diff options
| author | Luc Donnet | 2017-08-31 12:02:18 +0200 |
|---|---|---|
| committer | Luc Donnet | 2017-08-31 12:02:18 +0200 |
| commit | b6920319a4ddc9e96cd5d99d75d4e7a7689d40fd (patch) | |
| tree | b170443a4e0c6be40f3b6f98ca07d21b926ec9c9 /spec | |
| parent | 0fc3f95303d442a5feb7d6ce333e3db3d6315655 (diff) | |
| parent | 412861903ed16b52bf57b394b1ea599d56fb75d3 (diff) | |
| download | chouette-core-b6920319a4ddc9e96cd5d99d75d4e7a7689d40fd.tar.bz2 | |
Merge branch 'master' into staging
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/models/import_spec.rb | 146 |
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 |
