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) | 
