123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- require 'rails_helper'
- describe "Creating a new agent", js: true do
- before(:each) do
- login_as(users(:bob))
- end
- it "creates an agent" do
- visit "/"
- page.find("a", text: "Agents").trigger(:mouseover)
- click_on("New Agent")
- select_agent_type("Trigger Agent")
- fill_in(:agent_name, with: "Test Trigger Agent")
- click_on "Save"
- expect(page).to have_text("Test Trigger Agent")
- end
- context "with associated agents" do
- let!(:bob_scheduler_agent) {
- Agents::SchedulerAgent.create!(
- user: users(:bob),
- name: 'Example Scheduler',
- options: {
- 'action' => 'run',
- 'schedule' => '0 * * * *'
- },
- )
- }
- let!(:bob_weather_agent) {
- agents(:bob_weather_agent)
- }
- let!(:bob_formatting_agent) {
- agents(:bob_formatting_agent).tap { |agent|
- # Make this valid
- agent.options['instructions']['foo'] = 'bar'
- agent.save!
- }
- }
- it "creates an agent with a source and a receiver" do
- visit "/"
- page.find("a", text: "Agents").trigger(:mouseover)
- click_on("New Agent")
- select_agent_type("Trigger Agent")
- fill_in(:agent_name, with: "Test Trigger Agent")
- select2("SF Weather", from: 'Sources')
- select2("Formatting Agent", from: 'Receivers')
- click_on "Save"
- expect(page).to have_text("Test Trigger Agent")
- agent = Agent.find_by(name: "Test Trigger Agent")
- expect(agent.sources).to eq([bob_weather_agent])
- expect(agent.receivers).to eq([bob_formatting_agent])
- end
- it "creates an agent with a control target" do
- visit "/"
- page.find("a", text: "Agents").trigger(:mouseover)
- click_on("New Agent")
- select_agent_type("Scheduler Agent")
- fill_in(:agent_name, with: "Test Scheduler Agent")
- select2("SF Weather", from: 'Control targets')
- click_on "Save"
- expect(page).to have_text("Test Scheduler Agent")
- agent = Agent.find_by(name: "Test Scheduler Agent")
- expect(agent.control_targets).to eq([bob_weather_agent])
- end
- it "creates an agent with a controller" do
- visit "/"
- page.find("a", text: "Agents").trigger(:mouseover)
- click_on("New Agent")
- select_agent_type("Weather Agent")
- fill_in(:agent_name, with: "Test Weather Agent")
- select2("Example Scheduler", from: 'Controllers')
- click_on "Save"
- expect(page).to have_text("Test Weather Agent")
- agent = Agent.find_by(name: "Test Weather Agent")
- expect(agent.controllers).to eq([bob_scheduler_agent])
- end
- end
- it "creates an alert if a new agent with invalid json is submitted" do
- visit "/"
- page.find("a", text: "Agents").trigger(:mouseover)
- click_on("New Agent")
- select_agent_type("Trigger Agent")
- fill_in(:agent_name, with: "Test Trigger Agent")
- click_on("Toggle View")
- fill_in(:agent_options, with: '{
- "expected_receive_period_in_days": "2"
- "keep_event": "false"
- }')
- expect(get_alert_text_from { click_on "Save" }).to have_text("Sorry, there appears to be an error in your JSON input. Please fix it before continuing.")
- end
- context "displaying the correct information" do
- before(:each) do
- visit new_agent_path
- end
- it "shows all options for agents that can be scheduled, create and receive events" do
- select_agent_type("Website Agent scrapes")
- expect(page).not_to have_content('This type of Agent cannot create events.')
- end
- it "does not show the target select2 field when the agent can not create events" do
- select_agent_type("Email Agent")
- expect(page).to have_content('This type of Agent cannot create events.')
- end
- end
- it "allows to click on on the agent name in select2 tags" do
- visit new_agent_path
- select_agent_type("Website Agent scrapes")
- select2("SF Weather", from: 'Sources')
- click_on "SF Weather"
- expect(page).to have_content "Editing your WeatherAgent"
- end
- context "clearing unsupported fields of agents" do
- before do
- visit new_agent_path
- end
- it "does not send previously configured sources when the current agent does not support them" do
- select_agent_type("Website Agent scrapes")
- select2("SF Weather", from: 'Sources')
- select_agent_type("Webhook Agent")
- fill_in(:agent_name, with: "No sources")
- click_on "Save"
- expect(page).to have_content("No sources")
- agent = Agent.find_by(name: "No sources")
- expect(agent.sources).to eq([])
- end
- it "does not send previously configured control targets when the current agent does not support them" do
- select_agent_type("Commander Agent")
- select2("SF Weather", from: 'Control targets')
- select_agent_type("Webhook Agent")
- fill_in(:agent_name, with: "No control targets")
- click_on "Save"
- expect(page).to have_content("No control targets")
- agent = Agent.find_by(name: "No control targets")
- expect(agent.control_targets).to eq([])
- end
- it "does not send previously configured receivers when the current agent does not support them" do
- select_agent_type("Website Agent scrapes")
- sleep 0.5
- select2("ZKCD", from: 'Receivers')
- select_agent_type("Email Agent")
- fill_in(:agent_name, with: "No receivers")
- click_on "Save"
- expect(page).to have_content("No receivers")
- agent = Agent.find_by(name: "No receivers")
- expect(agent.receivers).to eq([])
- end
- end
- end
|