summaryrefslogtreecommitdiff
path: root/spec/rubocop/cop/migration/schedule_async_spec.rb
blob: a7246dfa73a8ce81bee7218a72640fc019c842e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# frozen_string_literal: true

require 'fast_spec_helper'

require 'rubocop'
require 'rubocop/rspec/support'

require_relative '../../../../rubocop/cop/migration/schedule_async'

RSpec.describe RuboCop::Cop::Migration::ScheduleAsync do
  include CopHelper

  let(:cop) { described_class.new }
  let(:source) do
    <<~SOURCE
      def up
        BackgroundMigrationWorker.perform_async(ClazzName, "Bar", "Baz")
      end
    SOURCE
  end

  shared_examples 'a disabled cop' do
    it 'does not register any offenses' do
      inspect_source(source)

      expect(cop.offenses).to be_empty
    end
  end

  context 'outside of a migration' do
    it_behaves_like 'a disabled cop'
  end

  context 'in a migration' do
    before do
      allow(cop).to receive(:in_migration?).and_return(true)
    end

    context 'in an old migration' do
      before do
        allow(cop).to receive(:version).and_return(described_class::ENFORCED_SINCE - 5)
      end

      it_behaves_like 'a disabled cop'
    end

    context 'that is recent' do
      before do
        allow(cop).to receive(:version).and_return(described_class::ENFORCED_SINCE + 5)
      end

      context 'BackgroundMigrationWorker.perform_async' do
        it 'adds an offence when calling `BackgroundMigrationWorker.peform_async`' do
          inspect_source(source)

          expect(cop.offenses.size).to eq(1)
        end

        it 'autocorrects to the right version' do
          correct_source = <<~CORRECT
          def up
            migrate_async(ClazzName, "Bar", "Baz")
          end
          CORRECT

          expect(autocorrect_source(source)).to eq(correct_source)
        end
      end

      context 'BackgroundMigrationWorker.perform_in' do
        let(:source) do
          <<~SOURCE
            def up
              BackgroundMigrationWorker
                .perform_in(delay, ClazzName, "Bar", "Baz")
            end
          SOURCE
        end

        it 'adds an offence' do
          inspect_source(source)

          expect(cop.offenses.size).to eq(1)
        end

        it 'autocorrects to the right version' do
          correct_source = <<~CORRECT
            def up
              migrate_in(delay, ClazzName, "Bar", "Baz")
            end
          CORRECT

          expect(autocorrect_source(source)).to eq(correct_source)
        end
      end

      context 'BackgroundMigrationWorker.bulk_perform_async' do
        let(:source) do
          <<~SOURCE
            def up
              BackgroundMigrationWorker
                .bulk_perform_async(jobs)
            end
          SOURCE
        end

        it 'adds an offence' do
          inspect_source(source)

          expect(cop.offenses.size).to eq(1)
        end

        it 'autocorrects to the right version' do
          correct_source = <<~CORRECT
            def up
              bulk_migrate_async(jobs)
            end
          CORRECT

          expect(autocorrect_source(source)).to eq(correct_source)
        end
      end

      context 'BackgroundMigrationWorker.bulk_perform_in' do
        let(:source) do
          <<~SOURCE
            def up
              BackgroundMigrationWorker
                .bulk_perform_in(5.minutes, jobs)
            end
          SOURCE
        end

        it 'adds an offence' do
          inspect_source(source)

          expect(cop.offenses.size).to eq(1)
        end

        it 'autocorrects to the right version' do
          correct_source = <<~CORRECT
            def up
              bulk_migrate_in(5.minutes, jobs)
            end
          CORRECT

          expect(autocorrect_source(source)).to eq(correct_source)
        end
      end
    end
  end
end