diff options
Diffstat (limited to 'spec/migrations/20201014205300_drop_backfill_jira_tracker_deployment_type_jobs_spec.rb')
-rw-r--r-- | spec/migrations/20201014205300_drop_backfill_jira_tracker_deployment_type_jobs_spec.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/spec/migrations/20201014205300_drop_backfill_jira_tracker_deployment_type_jobs_spec.rb b/spec/migrations/20201014205300_drop_backfill_jira_tracker_deployment_type_jobs_spec.rb new file mode 100644 index 00000000000..134bea6b666 --- /dev/null +++ b/spec/migrations/20201014205300_drop_backfill_jira_tracker_deployment_type_jobs_spec.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +require 'spec_helper' +require Rails.root.join('db', 'migrate', '20201014205300_drop_backfill_jira_tracker_deployment_type_jobs.rb') + +RSpec.describe DropBackfillJiraTrackerDeploymentTypeJobs, :sidekiq, :redis, schema: 2020_10_14_205300 do + subject(:migration) { described_class.new } + + describe '#up' do + let(:retry_set) { Sidekiq::RetrySet.new } + let(:scheduled_set) { Sidekiq::ScheduledSet.new } + + context 'there are only affected jobs on the queue' do + let(:payload) { { 'class' => ::BackgroundMigrationWorker, 'args' => [described_class::DROPPED_JOB_CLASS, 1] } } + let(:queue_payload) { payload.merge('queue' => described_class::QUEUE) } + + it 'removes enqueued BackfillJiraTrackerDeploymentType background jobs' do + Sidekiq::Testing.disable! do # https://github.com/mperham/sidekiq/wiki/testing#api Sidekiq's API does not have a testing mode + retry_set.schedule(1.hour.from_now, payload) + scheduled_set.schedule(1.hour.from_now, payload) + Sidekiq::Client.push(queue_payload) + + expect { migration.up }.to change { Sidekiq::Queue.new(described_class::QUEUE).size }.from(1).to(0) + expect(retry_set.size).to eq(0) + expect(scheduled_set.size).to eq(0) + end + end + end + + context 'there are not any affected jobs on the queue' do + let(:payload) { { 'class' => ::BackgroundMigrationWorker, 'args' => ['SomeOtherClass', 1] } } + let(:queue_payload) { payload.merge('queue' => described_class::QUEUE) } + + it 'skips other enqueued jobs' do + Sidekiq::Testing.disable! do + retry_set.schedule(1.hour.from_now, payload) + scheduled_set.schedule(1.hour.from_now, payload) + Sidekiq::Client.push(queue_payload) + + expect { migration.up }.not_to change { Sidekiq::Queue.new(described_class::QUEUE).size } + expect(retry_set.size).to eq(1) + expect(scheduled_set.size).to eq(1) + end + end + end + + context 'other queues' do + it 'does not modify them' do + Sidekiq::Testing.disable! do + Sidekiq::Client.push('queue' => 'other', 'class' => ::BackgroundMigrationWorker, 'args' => ['SomeOtherClass', 1]) + Sidekiq::Client.push('queue' => 'other', 'class' => ::BackgroundMigrationWorker, 'args' => [described_class::DROPPED_JOB_CLASS, 1]) + + expect { migration.up }.not_to change { Sidekiq::Queue.new('other').size } + end + end + end + end +end |