diff options
| -rw-r--r-- | app/models/import.rb | 8 | ||||
| -rw-r--r-- | config/schedule.rb | 1 | ||||
| -rw-r--r-- | lib/tasks/imports.rake | 5 | ||||
| -rw-r--r-- | spec/models/import_spec.rb | 52 |
4 files changed, 66 insertions, 0 deletions
diff --git a/app/models/import.rb b/app/models/import.rb index d8e763bf3..29aadcd56 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -44,6 +44,14 @@ class Import < ActiveRecord::Base %w(successful failed warning aborted canceled) end + def self.abort_old + where( + 'created_at < ? AND status NOT IN (?)', + 4.hours.ago, + finished_statuses + ).update_all(status: 'aborted') + end + def notify_parent parent.child_change update(notified_parent_at: DateTime.now) diff --git a/config/schedule.rb b/config/schedule.rb index 532707470..0d2a24f31 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -40,6 +40,7 @@ every :day, :at => '4:00 am' do end every 5.minutes do + rake "import:netex_abort_old" rake "import:notify_parent" end diff --git a/lib/tasks/imports.rake b/lib/tasks/imports.rake index 55e017e7f..02e32fd3d 100644 --- a/lib/tasks/imports.rake +++ b/lib/tasks/imports.rake @@ -3,4 +3,9 @@ namespace :import do task notify_parent: :environment do ParentNotifier.new(Import).notify_when_finished end + + desc "Mark old unfinished Netex imports as 'aborted'" + task netex_abort_old: :environment do + NetexImport.abort_old + end end diff --git a/spec/models/import_spec.rb b/spec/models/import_spec.rb index ffb2360c2..8b85f151b 100644 --- a/spec/models/import_spec.rb +++ b/spec/models/import_spec.rb @@ -29,6 +29,58 @@ RSpec.describe Import, type: :model do ) end + describe ".abort_old" do + it "changes imports older than 4 hours to aborted" do + Timecop.freeze(Time.now) do + old_import = create( + :workbench_import, + status: 'pending', + created_at: 4.hours.ago - 1.minute + ) + current_import = create(:workbench_import, status: 'pending') + + Import.abort_old + + expect(current_import.reload.status).to eq('pending') + expect(old_import.reload.status).to eq('aborted') + end + end + + it "doesn't work on imports with a `finished_status`" do + Timecop.freeze(Time.now) do + import = create( + :workbench_import, + status: 'successful', + created_at: 4.hours.ago - 1.minute + ) + + Import.abort_old + + expect(import.reload.status).to eq('successful') + end + end + + it "only works on the caller type" do + Timecop.freeze(Time.now) do + workbench_import = create( + :workbench_import, + status: 'pending', + created_at: 4.hours.ago - 1.minute + ) + netex_import = create( + :netex_import, + status: 'pending', + created_at: 4.hours.ago - 1.minute + ) + + NetexImport.abort_old + + expect(workbench_import.reload.status).to eq('pending') + expect(netex_import.reload.status).to eq('aborted') + end + end + end + describe "#destroy" do it "must destroy all child imports" do netex_import = create(:netex_import) |
