Merge pull request #1173 from TildeWill/multi_scenario_import

Allow multiple users to import the same scenario

Andrew Cantino 8 anos atrás
pai
commit
a414584042

+ 1 - 5
app/controllers/scenario_imports_controller.rb

@@ -7,11 +7,7 @@ class ScenarioImportsController < ApplicationController
7 7
     @scenario_import = ScenarioImport.new(params[:scenario_import])
8 8
     @scenario_import.set_user(current_user)
9 9
 
10
-    if @scenario_import.will_request_local?(scenarios_url)
11
-      render :text => 'Sorry, you cannot import a Scenario by URL from your own Huginn server.' and return
12
-    end
13
-
14
-    if @scenario_import.valid? && @scenario_import.should_import? && @scenario_import.import
10
+    if @scenario_import.valid? && @scenario_import.import_confirmed? && @scenario_import.import
15 11
       redirect_to @scenario_import.scenario, notice: "Import successful!"
16 12
     else
17 13
       render action: "new"

+ 1 - 5
app/models/scenario_import.rb

@@ -50,7 +50,7 @@ class ScenarioImport
50 50
     @agent_diffs || generate_diff
51 51
   end
52 52
 
53
-  def should_import?
53
+  def import_confirmed?
54 54
     do_import == "1"
55 55
   end
56 56
 
@@ -111,10 +111,6 @@ class ScenarioImport
111 111
     @scenario || @existing_scenario
112 112
   end
113 113
 
114
-  def will_request_local?(url_root)
115
-    data.blank? && file.blank? && url.present? && url.starts_with?(url_root)
116
-  end
117
-
118 114
   protected
119 115
 
120 116
   def parse_file

+ 35 - 1
spec/models/scenario_import_spec.rb

@@ -317,7 +317,7 @@ describe ScenarioImport do
317 317
       end
318 318
     end
319 319
 
320
-    context "when an a scenario already exists with the given guid" do
320
+    context "when an a scenario already exists with the given guid for the importing user" do
321 321
       let!(:existing_scenario) do
322 322
         _existing_scenerio = users(:bob).scenarios.build(:name => "an existing scenario", :description => "something")
323 323
         _existing_scenerio.guid = guid
@@ -507,6 +507,40 @@ describe ScenarioImport do
507 507
         end
508 508
       end
509 509
     end
510
+    
511
+    context "when Bob imports Jane's scenario" do
512
+      let!(:existing_scenario) do
513
+        _existing_scenerio = users(:jane).scenarios.build(:name => "an existing scenario", :description => "something")
514
+        _existing_scenerio.guid = guid
515
+        _existing_scenerio.save!
516
+        _existing_scenerio
517
+      end
518
+      
519
+      describe "#import" do
520
+        it "makes a new scenario for Bob" do
521
+          expect {
522
+            scenario_import.import(:skip_agents => true)
523
+          }.to change { users(:bob).scenarios.count }.by(1)
524
+
525
+          expect(Scenario.where(guid: guid).count).to eq(2)
526
+
527
+          expect(scenario_import.scenario.name).to eq(name)
528
+          expect(scenario_import.scenario.description).to eq(description)
529
+          expect(scenario_import.scenario.guid).to eq(guid)
530
+          expect(scenario_import.scenario.tag_fg_color).to eq(tag_fg_color)
531
+          expect(scenario_import.scenario.tag_bg_color).to eq(tag_bg_color)
532
+          expect(scenario_import.scenario.source_url).to eq(source_url)
533
+          expect(scenario_import.scenario.public).to be_falsey
534
+        end
535
+
536
+        it "does not change Jane's scenario" do
537
+          expect {
538
+            scenario_import.import(:skip_agents => true)
539
+          }.not_to change { users(:jane).scenarios }
540
+          expect(users(:jane).scenarios.find_by(guid: guid)).to eq(existing_scenario)
541
+        end
542
+      end
543
+    end
510 544
 
511 545
     context "agents which require a service" do
512 546
       let(:valid_parsed_services) do