From e2917e8854c0b6fb5107912f333959ff4b24aaa7 Mon Sep 17 00:00:00 2001 From: Dominik Sander Date: Tue, 17 Jan 2017 22:00:38 +0100 Subject: [PATCH] Fix scenario import when merges are required Fixes #1875 --- .../scenario_imports_controller.rb | 6 ++-- spec/data_fixtures/twitter_scenario.json | 35 +++++++++++++++++++ spec/features/scenario_import_spec.rb | 9 +++++ spec/fixtures/services.yml | 11 +++++- spec/models/concerns/oauthable.rb | 2 +- 5 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 spec/data_fixtures/twitter_scenario.json diff --git a/app/controllers/scenario_imports_controller.rb b/app/controllers/scenario_imports_controller.rb index a90fa30a..f883ddcd 100644 --- a/app/controllers/scenario_imports_controller.rb +++ b/app/controllers/scenario_imports_controller.rb @@ -17,9 +17,9 @@ class ScenarioImportsController < ApplicationController private def scenario_import_params - merges = params[:scenario_import].delete(:merges) - params.require(:scenario_import).permit(:url, :data, :file, :do_import) do |params| + merges = params[:scenario_import].delete(:merges).try(:permit!) + params.require(:scenario_import).permit(:url, :data, :file, :do_import).tap do |params| params[:merges] = merges end end -end \ No newline at end of file +end diff --git a/spec/data_fixtures/twitter_scenario.json b/spec/data_fixtures/twitter_scenario.json new file mode 100644 index 00000000..d8d1592a --- /dev/null +++ b/spec/data_fixtures/twitter_scenario.json @@ -0,0 +1,35 @@ +{ + "schema_version": 1, + "name": "Twitter", + "description": "No description provided", + "source_url": false, + "guid": "d91bf1508595a65b4a00b74d59857918", + "tag_fg_color": "#ffffff", + "tag_bg_color": "#5bc0de", + "icon": "pencil", + "exported_at": "2017-01-17T19:08:31Z", + "agents": [ + { + "type": "Agents::TwitterStreamAgent", + "name": "Twitter Counts", + "disabled": false, + "guid": "03c77bb9ec0fb2415f7c399ba849289d", + "options": { + "filters": [ + "ruby vulnerability", + "rails security", + "huginn" + ], + "expected_update_period_in_days": "2", + "generate": "counts" + }, + "schedule": "every_10m", + "keep_events_for": 604800 + } + ], + "links": [ + ], + "control_links": [ + + ] +} diff --git a/spec/features/scenario_import_spec.rb b/spec/features/scenario_import_spec.rb index 614cda5b..9e0775c2 100644 --- a/spec/features/scenario_import_spec.rb +++ b/spec/features/scenario_import_spec.rb @@ -43,4 +43,13 @@ describe ScenarioImportsController do click_on 'Finish Import' expect(page).to have_text('Import successful!') end + + it 'imports a scenario which requires a service' do + visit new_scenario_imports_path + attach_file('Option 2: Upload a Scenario JSON File', File.join(Rails.root, 'spec/data_fixtures/twitter_scenario.json')) + click_on 'Start Import' + check('I confirm that I want to import these Agents.') + expect { click_on 'Finish Import' }.to change(Scenario, :count).by(1) + expect(page).to have_text('Import successful!') + end end diff --git a/spec/fixtures/services.yml b/spec/fixtures/services.yml index 731d9b18..6fdb598d 100644 --- a/spec/fixtures/services.yml +++ b/spec/fixtures/services.yml @@ -14,4 +14,13 @@ global: expires_at: <%= Time.parse("2015-01-01 00:00:00") %> options: <%= { user_id: 12345 }.to_yaml.inspect %> user: jane - global: true \ No newline at end of file + global: true +twitter: + token: 1234token + secret: 56789secret + refresh_token: refresh12345 + provider: twitter + name: test + expires_at: <%= Time.parse("2015-01-01 00:00:00") %> + options: <%= { user_id: 12345 }.to_yaml.inspect %> + user: bob diff --git a/spec/models/concerns/oauthable.rb b/spec/models/concerns/oauthable.rb index e8fea961..4bac24c1 100644 --- a/spec/models/concerns/oauthable.rb +++ b/spec/models/concerns/oauthable.rb @@ -19,7 +19,7 @@ shared_examples_for Oauthable do describe "valid_services_for" do it "should return all available services without specifying valid_oauth_providers" do @agent = Agents::OauthableTestAgent.new - expect(@agent.valid_services_for(users(:bob)).collect(&:id).sort).to eq([services(:generic), services(:global)].collect(&:id).sort) + expect(@agent.valid_services_for(users(:bob)).collect(&:id).sort).to eq([services(:generic), services(:twitter), services(:global)].collect(&:id).sort) end it "should filter the services based on the agent defaults" do