aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorLuc Donnet2017-08-31 12:02:18 +0200
committerLuc Donnet2017-08-31 12:02:18 +0200
commitb6920319a4ddc9e96cd5d99d75d4e7a7689d40fd (patch)
treeb170443a4e0c6be40f3b6f98ca07d21b926ec9c9 /spec
parent0fc3f95303d442a5feb7d6ce333e3db3d6315655 (diff)
parent412861903ed16b52bf57b394b1ea599d56fb75d3 (diff)
downloadchouette-core-b6920319a4ddc9e96cd5d99d75d4e7a7689d40fd.tar.bz2
Merge branch 'master' into staging
Diffstat (limited to 'spec')
-rw-r--r--spec/models/import_spec.rb146
1 files changed, 89 insertions, 57 deletions
diff --git a/spec/models/import_spec.rb b/spec/models/import_spec.rb
index 76f945871..941e5b386 100644
--- a/spec/models/import_spec.rb
+++ b/spec/models/import_spec.rb
@@ -1,4 +1,4 @@
-RSpec.describe Import, :type => :model do
+RSpec.describe Import, type: :model do
it { should belong_to(:referential) }
it { should belong_to(:workbench) }
@@ -30,7 +30,7 @@ RSpec.describe Import, :type => :model do
it "must call #child_change on its parent" do
allow(netex_import).to receive(:update)
- expect(workbench_import).to receive(:child_change).with(netex_import)
+ expect(workbench_import).to receive(:child_change)
netex_import.notify_parent
end
@@ -49,110 +49,142 @@ RSpec.describe Import, :type => :model do
end
describe "#child_change" do
+ it "calls #update_status" do
+ allow(workbench_import).to receive(:update)
+
+ expect(workbench_import).to receive(:update_status)
+ workbench_import.child_change
+ end
+
+ it "calls #update_referentials" do
+ allow(workbench_import).to receive(:update)
+
+ expect(workbench_import).to receive(:update_referentials)
+ workbench_import.child_change
+ end
+ end
+
+ describe "#update_status" do
shared_examples(
- "updates :status to failed when child status indicates failure"
+ "updates :status to failed when >=1 child has failing status"
) do |failure_status|
- it "updates :status to failed when child status indicates failure" do
- allow(workbench_import).to receive(:update)
-
- netex_import = build_stubbed(
+ it "updates :status to failed when >=1 child has failing status" do
+ workbench_import = create(:workbench_import)
+ create(
:netex_import,
parent: workbench_import,
status: failure_status
)
- expect(workbench_import).to receive(:update).with(status: 'failed')
+ workbench_import.update_status
- workbench_import.child_change(netex_import)
+ expect(workbench_import.status).to eq('failed')
end
end
include_examples(
- "updates :status to failed when child status indicates failure",
+ "updates :status to failed when >=1 child has failing status",
"failed"
)
include_examples(
- "updates :status to failed when child status indicates failure",
+ "updates :status to failed when >=1 child has failing status",
"aborted"
)
include_examples(
- "updates :status to failed when child status indicates failure",
+ "updates :status to failed when >=1 child has failing status",
"canceled"
)
- it "updates :status to successful when #ready?" do
- expect(workbench_import).to receive(:update).with(status: 'successful')
+ it "updates :status to successful when all children are successful" do
+ workbench_import = create(:workbench_import)
+ create_list(
+ :netex_import,
+ 2,
+ parent: workbench_import,
+ status: 'successful'
+ )
+
+ workbench_import.update_status
+
+ expect(workbench_import.status).to eq('successful')
+ end
+
+ it "Updates :status to failed when any child has failed" do
+ workbench_import = create(:workbench_import)
+ [
+ 'failed',
+ 'successful'
+ ].each do |status|
+ create(
+ :netex_import,
+ parent: workbench_import,
+ status: status
+ )
+ end
+
+ workbench_import.update_status
- workbench_import.child_change(netex_import)
+ expect(workbench_import.status).to eq('failed')
end
- it "updates :status to failed when #ready? and child is failed" do
- netex_import = build_stubbed(
+ it "updates :ended_at to now when status is finished" do
+ workbench_import = create(:workbench_import)
+ create(
:netex_import,
parent: workbench_import,
- status: :failed
+ status: 'failed'
)
- expect(workbench_import).to receive(:update).with(status: 'failed')
+ Timecop.freeze(Time.now) do
+ workbench_import.update_status
- workbench_import.child_change(netex_import)
+ expect(workbench_import.ended_at).to eq(Time.now)
+ end
+ end
+ end
+
+ describe "#update_referentials" do
+ it "doesn't update referentials if parent status isn't finished" do
+ workbench_import = create(:workbench_import, status: 'pending')
+ netex_import = create(:netex_import, parent: workbench_import)
+ netex_import.referential.update(ready: false)
+
+ workbench_import.update_referentials
+ netex_import.referential.reload
+
+ expect(netex_import.referential.ready).to be false
end
shared_examples(
- "doesn't update :status if parent import status is finished"
+ "makes child referentials `ready` when status is finished"
) do |finished_status|
- it "doesn't update :status if parent import status is finished" do
- workbench_import = build_stubbed(
- :workbench_import,
- total_steps: 2,
- current_step: 2,
- status: finished_status
- )
- child = double('Import')
+ it "makes child referentials `ready` when status is finished" do
+ workbench_import = create(:workbench_import, status: finished_status)
+ netex_import = create(:netex_import, parent: workbench_import)
+ netex_import.referential.update(ready: false)
- expect(workbench_import).not_to receive(:update)
+ workbench_import.update_referentials
+ netex_import.referential.reload
- workbench_import.child_change(child)
+ expect(netex_import.referential.ready).to be true
end
end
include_examples(
- "doesn't update :status if parent import status is finished",
+ "makes child referentials `ready` when status is finished",
"successful"
)
include_examples(
- "doesn't update :status if parent import status is finished",
+ "makes child referentials `ready` when status is finished",
"failed"
)
include_examples(
- "doesn't update :status if parent import status is finished",
+ "makes child referentials `ready` when status is finished",
"aborted"
)
include_examples(
- "doesn't update :status if parent import status is finished",
+ "makes child referentials `ready` when status is finished",
"canceled"
)
end
-
- describe "#ready?" do
- it "returns true if #current_step == #total_steps" do
- import = build_stubbed(
- :import,
- total_steps: 4,
- current_step: 4
- )
-
- expect(import.ready?).to be true
- end
-
- it "returns false if #current_step != #total_steps" do
- import = build_stubbed(
- :import,
- total_steps: 6,
- current_step: 3
- )
-
- expect(import.ready?).to be false
- end
- end
end