From 499a46cabdf2ee1aab830f27c3aa3e896ded24e3 Mon Sep 17 00:00:00 2001 From: Luc Donnet Date: Thu, 15 Mar 2018 14:36:14 +0100 Subject: Rename export spec to use the right classes Refs #6133 @1 --- spec/models/export/base_spec.rb | 239 ++++++++++++++++++++++++++++ spec/models/export/export_message_spec.rb | 7 - spec/models/export/export_resource_spec.rb | 19 --- spec/models/export/export_spec.rb | 239 ---------------------------- spec/models/export/message_spec.rb | 7 + spec/models/export/netex_export_spec.rb | 19 --- spec/models/export/netex_spec.rb | 19 +++ spec/models/export/resource_spec.rb | 19 +++ spec/models/export/workgroup_export_spec.rb | 10 -- spec/models/export/workgroup_spec.rb | 10 ++ spec/models/netex_export_spec.rb | 10 -- 11 files changed, 294 insertions(+), 304 deletions(-) create mode 100644 spec/models/export/base_spec.rb delete mode 100644 spec/models/export/export_message_spec.rb delete mode 100644 spec/models/export/export_resource_spec.rb delete mode 100644 spec/models/export/export_spec.rb create mode 100644 spec/models/export/message_spec.rb delete mode 100644 spec/models/export/netex_export_spec.rb create mode 100644 spec/models/export/netex_spec.rb create mode 100644 spec/models/export/resource_spec.rb delete mode 100644 spec/models/export/workgroup_export_spec.rb create mode 100644 spec/models/export/workgroup_spec.rb delete mode 100644 spec/models/netex_export_spec.rb diff --git a/spec/models/export/base_spec.rb b/spec/models/export/base_spec.rb new file mode 100644 index 000000000..edc0788f2 --- /dev/null +++ b/spec/models/export/base_spec.rb @@ -0,0 +1,239 @@ +RSpec.describe Export::Base, type: :model do + + it { should belong_to(:referential) } + it { should belong_to(:workbench) } + it { should belong_to(:parent) } + + it { should enumerize(:status).in("aborted", "canceled", "failed", "new", "pending", "running", "successful", "warning") } + + it { should validate_presence_of(:workbench) } + it { should validate_presence_of(:creator) } + + include ActionDispatch::TestProcess + it { should allow_value(fixture_file_upload('OFFRE_TRANSDEV_2017030112251.zip')).for(:file) } + it { should_not allow_value(fixture_file_upload('reflex_updated.xml')).for(:file).with_message(I18n.t('errors.messages.extension_whitelist_error', extension: '"xml"', allowed_types: "zip, csv, json")) } + + let(:workgroup_export) {netex_export.parent} + let(:workgroup_export_with_completed_steps) do + build_stubbed( + :workgroup_export, + total_steps: 2, + current_step: 2 + ) + end + + let(:netex_export) do + create( + :netex_export + ) + end + + describe ".abort_old" do + it "changes exports older than 4 hours to aborted" do + Timecop.freeze(Time.now) do + old_export = create( + :workgroup_export, + status: 'pending', + created_at: 4.hours.ago - 1.minute + ) + current_export = create(:workgroup_export, status: 'pending') + + Export::Base.abort_old + + expect(current_export.reload.status).to eq('pending') + expect(old_export.reload.status).to eq('aborted') + end + end + + it "doesn't work on exports with a `finished_status`" do + Timecop.freeze(Time.now) do + export = create( + :workgroup_export, + status: 'successful', + created_at: 4.hours.ago - 1.minute + ) + + Export::Base.abort_old + + expect(export.reload.status).to eq('successful') + end + end + + it "only works on the caller type" do + Timecop.freeze(Time.now) do + workgroup_export = create( + :workgroup_export, + status: 'pending', + created_at: 4.hours.ago - 1.minute + ) + netex_export = create( + :netex_export, + status: 'pending', + created_at: 4.hours.ago - 1.minute + ) + + Export::Netex.abort_old + + expect(workgroup_export.reload.status).to eq('pending') + expect(netex_export.reload.status).to eq('aborted') + end + end + end + + describe "#destroy" do + it "must destroy all child exports" do + netex_export = create(:netex_export) + + netex_export.parent.destroy + + expect(netex_export.parent).to be_destroyed + expect(Export::Netex.count).to eq(0) + end + + it "must destroy all associated Export::Messages" do + export = create(:netex_export) + create(:export_resource, export: export) + + export.destroy + + expect(Export::Resource.count).to eq(0) + end + + it "must destroy all associated Export::Resources" do + export = create(:netex_export) + create(:export_message, export: export) + + export.destroy + + expect(Export::Message.count).to eq(0) + end + end + + describe "#notify_parent" do + it "must call #child_change on its parent" do + allow(netex_export).to receive(:update) + + expect(workgroup_export).to receive(:child_change) + netex_export.status = :foo + netex_export.notify_parent + end + + it "must update the :notified_parent_at field of the child export" do + allow(workgroup_export).to receive(:child_change) + + Timecop.freeze(Time.now) do + netex_export.status = :bar + + netex_export.notify_parent + expect(netex_export.notified_parent_at.strftime('%Y-%m-%d %H:%M:%S.%3N')).to eq Time.now.strftime('%Y-%m-%d %H:%M:%S.%3N') + expect(netex_export.reload.notified_parent_at.strftime('%Y-%m-%d %H:%M:%S.%3N')).to eq Time.now.strftime('%Y-%m-%d %H:%M:%S.%3N') + end + end + end + + describe "#child_change" do + it "calls #update_status" do + allow(workgroup_export).to receive(:update) + + expect(workgroup_export).to receive(:update_status) + workgroup_export.child_change + end + end + + describe "#update_status" do + shared_examples( + "updates :status to failed when >=1 child has failing status" + ) do |failure_status| + it "updates :status to failed when >=1 child has failing status" do + workgroup_export = create(:workgroup_export) + create( + :netex_export, + parent: workgroup_export, + status: failure_status + ) + + workgroup_export.update_status + + expect(workgroup_export.status).to eq('failed') + end + end + + include_examples( + "updates :status to failed when >=1 child has failing status", + "failed" + ) + include_examples( + "updates :status to failed when >=1 child has failing status", + "aborted" + ) + include_examples( + "updates :status to failed when >=1 child has failing status", + "canceled" + ) + + it "updates :status to successful when all children are successful" do + workgroup_export = create(:workgroup_export) + exports = create_list( + :netex_export, + 2, + parent: workgroup_export, + status: 'successful' + ) + + workgroup_export.update_status + + expect(workgroup_export.status).to eq('successful') + end + + it "updates :status to failed when any child has failed" do + workgroup_export = create(:workgroup_export) + [ + 'failed', + 'successful' + ].each do |status| + create( + :netex_export, + parent: workgroup_export, + status: status + ) + end + + workgroup_export.update_status + + expect(workgroup_export.status).to eq('failed') + end + + it "updates :status to warning when any child has warning or successful" do + workgroup_export = create(:workgroup_export) + [ + 'warning', + 'successful' + ].each do |status| + create( + :netex_export, + parent: workgroup_export, + status: status + ) + end + + workgroup_export.update_status + + expect(workgroup_export.status).to eq('warning') + end + + it "updates :ended_at to now when status is finished" do + workgroup_export = create(:workgroup_export) + create( + :netex_export, + parent: workgroup_export, + status: 'failed' + ) + + Timecop.freeze(Time.now) do + workgroup_export.update_status + + expect(workgroup_export.ended_at).to eq(Time.now) + end + end + end +end diff --git a/spec/models/export/export_message_spec.rb b/spec/models/export/export_message_spec.rb deleted file mode 100644 index 61a3b6319..000000000 --- a/spec/models/export/export_message_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'rails_helper' - -RSpec.describe Export::Message, :type => :model do - it { should validate_presence_of(:criticity) } - it { should belong_to(:export) } - it { should belong_to(:resource) } -end diff --git a/spec/models/export/export_resource_spec.rb b/spec/models/export/export_resource_spec.rb deleted file mode 100644 index 7537cd2a8..000000000 --- a/spec/models/export/export_resource_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'rails_helper' - -RSpec.describe Export::Resource, :type => :model do - it { should belong_to(:export) } - - it { should enumerize(:status).in("OK", "ERROR", "WARNING", "IGNORED") } - - it { should validate_presence_of(:name) } - it { should validate_presence_of(:resource_type) } - it { should validate_presence_of(:reference) } - - describe 'states' do - let(:export_resource) { create(:export_resource) } - - it 'should initialize with new state' do - expect(export_resource.status).to eq("WARNING") - end - end -end diff --git a/spec/models/export/export_spec.rb b/spec/models/export/export_spec.rb deleted file mode 100644 index edc0788f2..000000000 --- a/spec/models/export/export_spec.rb +++ /dev/null @@ -1,239 +0,0 @@ -RSpec.describe Export::Base, type: :model do - - it { should belong_to(:referential) } - it { should belong_to(:workbench) } - it { should belong_to(:parent) } - - it { should enumerize(:status).in("aborted", "canceled", "failed", "new", "pending", "running", "successful", "warning") } - - it { should validate_presence_of(:workbench) } - it { should validate_presence_of(:creator) } - - include ActionDispatch::TestProcess - it { should allow_value(fixture_file_upload('OFFRE_TRANSDEV_2017030112251.zip')).for(:file) } - it { should_not allow_value(fixture_file_upload('reflex_updated.xml')).for(:file).with_message(I18n.t('errors.messages.extension_whitelist_error', extension: '"xml"', allowed_types: "zip, csv, json")) } - - let(:workgroup_export) {netex_export.parent} - let(:workgroup_export_with_completed_steps) do - build_stubbed( - :workgroup_export, - total_steps: 2, - current_step: 2 - ) - end - - let(:netex_export) do - create( - :netex_export - ) - end - - describe ".abort_old" do - it "changes exports older than 4 hours to aborted" do - Timecop.freeze(Time.now) do - old_export = create( - :workgroup_export, - status: 'pending', - created_at: 4.hours.ago - 1.minute - ) - current_export = create(:workgroup_export, status: 'pending') - - Export::Base.abort_old - - expect(current_export.reload.status).to eq('pending') - expect(old_export.reload.status).to eq('aborted') - end - end - - it "doesn't work on exports with a `finished_status`" do - Timecop.freeze(Time.now) do - export = create( - :workgroup_export, - status: 'successful', - created_at: 4.hours.ago - 1.minute - ) - - Export::Base.abort_old - - expect(export.reload.status).to eq('successful') - end - end - - it "only works on the caller type" do - Timecop.freeze(Time.now) do - workgroup_export = create( - :workgroup_export, - status: 'pending', - created_at: 4.hours.ago - 1.minute - ) - netex_export = create( - :netex_export, - status: 'pending', - created_at: 4.hours.ago - 1.minute - ) - - Export::Netex.abort_old - - expect(workgroup_export.reload.status).to eq('pending') - expect(netex_export.reload.status).to eq('aborted') - end - end - end - - describe "#destroy" do - it "must destroy all child exports" do - netex_export = create(:netex_export) - - netex_export.parent.destroy - - expect(netex_export.parent).to be_destroyed - expect(Export::Netex.count).to eq(0) - end - - it "must destroy all associated Export::Messages" do - export = create(:netex_export) - create(:export_resource, export: export) - - export.destroy - - expect(Export::Resource.count).to eq(0) - end - - it "must destroy all associated Export::Resources" do - export = create(:netex_export) - create(:export_message, export: export) - - export.destroy - - expect(Export::Message.count).to eq(0) - end - end - - describe "#notify_parent" do - it "must call #child_change on its parent" do - allow(netex_export).to receive(:update) - - expect(workgroup_export).to receive(:child_change) - netex_export.status = :foo - netex_export.notify_parent - end - - it "must update the :notified_parent_at field of the child export" do - allow(workgroup_export).to receive(:child_change) - - Timecop.freeze(Time.now) do - netex_export.status = :bar - - netex_export.notify_parent - expect(netex_export.notified_parent_at.strftime('%Y-%m-%d %H:%M:%S.%3N')).to eq Time.now.strftime('%Y-%m-%d %H:%M:%S.%3N') - expect(netex_export.reload.notified_parent_at.strftime('%Y-%m-%d %H:%M:%S.%3N')).to eq Time.now.strftime('%Y-%m-%d %H:%M:%S.%3N') - end - end - end - - describe "#child_change" do - it "calls #update_status" do - allow(workgroup_export).to receive(:update) - - expect(workgroup_export).to receive(:update_status) - workgroup_export.child_change - end - end - - describe "#update_status" do - shared_examples( - "updates :status to failed when >=1 child has failing status" - ) do |failure_status| - it "updates :status to failed when >=1 child has failing status" do - workgroup_export = create(:workgroup_export) - create( - :netex_export, - parent: workgroup_export, - status: failure_status - ) - - workgroup_export.update_status - - expect(workgroup_export.status).to eq('failed') - end - end - - include_examples( - "updates :status to failed when >=1 child has failing status", - "failed" - ) - include_examples( - "updates :status to failed when >=1 child has failing status", - "aborted" - ) - include_examples( - "updates :status to failed when >=1 child has failing status", - "canceled" - ) - - it "updates :status to successful when all children are successful" do - workgroup_export = create(:workgroup_export) - exports = create_list( - :netex_export, - 2, - parent: workgroup_export, - status: 'successful' - ) - - workgroup_export.update_status - - expect(workgroup_export.status).to eq('successful') - end - - it "updates :status to failed when any child has failed" do - workgroup_export = create(:workgroup_export) - [ - 'failed', - 'successful' - ].each do |status| - create( - :netex_export, - parent: workgroup_export, - status: status - ) - end - - workgroup_export.update_status - - expect(workgroup_export.status).to eq('failed') - end - - it "updates :status to warning when any child has warning or successful" do - workgroup_export = create(:workgroup_export) - [ - 'warning', - 'successful' - ].each do |status| - create( - :netex_export, - parent: workgroup_export, - status: status - ) - end - - workgroup_export.update_status - - expect(workgroup_export.status).to eq('warning') - end - - it "updates :ended_at to now when status is finished" do - workgroup_export = create(:workgroup_export) - create( - :netex_export, - parent: workgroup_export, - status: 'failed' - ) - - Timecop.freeze(Time.now) do - workgroup_export.update_status - - expect(workgroup_export.ended_at).to eq(Time.now) - end - end - end -end diff --git a/spec/models/export/message_spec.rb b/spec/models/export/message_spec.rb new file mode 100644 index 000000000..61a3b6319 --- /dev/null +++ b/spec/models/export/message_spec.rb @@ -0,0 +1,7 @@ +require 'rails_helper' + +RSpec.describe Export::Message, :type => :model do + it { should validate_presence_of(:criticity) } + it { should belong_to(:export) } + it { should belong_to(:resource) } +end diff --git a/spec/models/export/netex_export_spec.rb b/spec/models/export/netex_export_spec.rb deleted file mode 100644 index d9cccd6ad..000000000 --- a/spec/models/export/netex_export_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -RSpec.describe Export::Netex, type: [:model, :with_commit] do - - let( :boiv_iev_uri ){ URI("#{Rails.configuration.iev_url}/boiv_iev/referentials/exporter/new?id=#{subject.id}")} - - before do - allow(Thread).to receive(:new).and_yield - end - - context 'with referential' do - subject{ build( :netex_export, id: random_int ) } - - it 'will trigger the Java API' do - with_stubbed_request(:get, boiv_iev_uri) do |request| - with_commit{ subject.save! } - expect(request).to have_been_requested - end - end - end -end diff --git a/spec/models/export/netex_spec.rb b/spec/models/export/netex_spec.rb new file mode 100644 index 000000000..d9cccd6ad --- /dev/null +++ b/spec/models/export/netex_spec.rb @@ -0,0 +1,19 @@ +RSpec.describe Export::Netex, type: [:model, :with_commit] do + + let( :boiv_iev_uri ){ URI("#{Rails.configuration.iev_url}/boiv_iev/referentials/exporter/new?id=#{subject.id}")} + + before do + allow(Thread).to receive(:new).and_yield + end + + context 'with referential' do + subject{ build( :netex_export, id: random_int ) } + + it 'will trigger the Java API' do + with_stubbed_request(:get, boiv_iev_uri) do |request| + with_commit{ subject.save! } + expect(request).to have_been_requested + end + end + end +end diff --git a/spec/models/export/resource_spec.rb b/spec/models/export/resource_spec.rb new file mode 100644 index 000000000..7537cd2a8 --- /dev/null +++ b/spec/models/export/resource_spec.rb @@ -0,0 +1,19 @@ +require 'rails_helper' + +RSpec.describe Export::Resource, :type => :model do + it { should belong_to(:export) } + + it { should enumerize(:status).in("OK", "ERROR", "WARNING", "IGNORED") } + + it { should validate_presence_of(:name) } + it { should validate_presence_of(:resource_type) } + it { should validate_presence_of(:reference) } + + describe 'states' do + let(:export_resource) { create(:export_resource) } + + it 'should initialize with new state' do + expect(export_resource.status).to eq("WARNING") + end + end +end diff --git a/spec/models/export/workgroup_export_spec.rb b/spec/models/export/workgroup_export_spec.rb deleted file mode 100644 index c812b2b21..000000000 --- a/spec/models/export/workgroup_export_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -RSpec.describe Export::Workgroup, type: [:model, :with_commit] do - it { should validate_presence_of(:duration) } - - it "should set options" do - expect(Export::Workgroup.options).to have_key :duration - expect(Export::Workgroup.options[:duration][:required]).to be_truthy - expect(Export::Workgroup.options[:duration][:default_value]).to eq 90 - expect(Export::Workgroup.options[:duration][:type]).to eq :integer - end -end diff --git a/spec/models/export/workgroup_spec.rb b/spec/models/export/workgroup_spec.rb new file mode 100644 index 000000000..c812b2b21 --- /dev/null +++ b/spec/models/export/workgroup_spec.rb @@ -0,0 +1,10 @@ +RSpec.describe Export::Workgroup, type: [:model, :with_commit] do + it { should validate_presence_of(:duration) } + + it "should set options" do + expect(Export::Workgroup.options).to have_key :duration + expect(Export::Workgroup.options[:duration][:required]).to be_truthy + expect(Export::Workgroup.options[:duration][:default_value]).to eq 90 + expect(Export::Workgroup.options[:duration][:type]).to eq :integer + end +end diff --git a/spec/models/netex_export_spec.rb b/spec/models/netex_export_spec.rb deleted file mode 100644 index 345bf4d5a..000000000 --- a/spec/models/netex_export_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec_helper' - -# describe NetexExport, :type => :model do -# -# # describe '#export_options' do -# # subject { super().export_options } -# # it { is_expected.to include(:format => :netex) } -# # end -# -# end -- cgit v1.2.3