activejob 5.2.2.1 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +128 -32
 - data/MIT-LICENSE +1 -1
 - data/README.md +17 -10
 - data/lib/active_job.rb +2 -1
 - data/lib/active_job/arguments.rb +40 -28
 - data/lib/active_job/base.rb +3 -1
 - data/lib/active_job/callbacks.rb +4 -1
 - data/lib/active_job/core.rb +38 -21
 - data/lib/active_job/enqueuing.rb +26 -5
 - data/lib/active_job/exceptions.rb +40 -17
 - data/lib/active_job/execution.rb +1 -1
 - data/lib/active_job/gem_version.rb +3 -3
 - data/lib/active_job/logging.rb +40 -9
 - data/lib/active_job/queue_adapter.rb +2 -0
 - data/lib/active_job/queue_adapters.rb +8 -10
 - data/lib/active_job/queue_adapters/async_adapter.rb +1 -1
 - data/lib/active_job/queue_adapters/backburner_adapter.rb +2 -2
 - data/lib/active_job/queue_adapters/inline_adapter.rb +1 -1
 - data/lib/active_job/queue_adapters/sidekiq_adapter.rb +2 -2
 - data/lib/active_job/queue_adapters/test_adapter.rb +22 -8
 - data/lib/active_job/queue_name.rb +21 -1
 - data/lib/active_job/railtie.rb +16 -1
 - data/lib/active_job/serializers.rb +63 -0
 - data/lib/active_job/serializers/date_serializer.rb +21 -0
 - data/lib/active_job/serializers/date_time_serializer.rb +21 -0
 - data/lib/active_job/serializers/duration_serializer.rb +24 -0
 - data/lib/active_job/serializers/object_serializer.rb +54 -0
 - data/lib/active_job/serializers/symbol_serializer.rb +21 -0
 - data/lib/active_job/serializers/time_serializer.rb +21 -0
 - data/lib/active_job/serializers/time_with_zone_serializer.rb +21 -0
 - data/lib/active_job/test_helper.rb +278 -57
 - data/lib/active_job/timezones.rb +13 -0
 - data/lib/active_job/translation.rb +1 -1
 - data/lib/rails/generators/job/job_generator.rb +4 -0
 - metadata +22 -11
 - data/lib/active_job/queue_adapters/qu_adapter.rb +0 -46
 
| 
         @@ -1,7 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require "active_support/core_ext/class/subclasses"
         
     | 
| 
       4 
     | 
    
         
            -
            require "active_support/core_ext/hash/keys"
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
5 
     | 
    
         
             
            module ActiveJob
         
     | 
| 
       7 
6 
     | 
    
         
             
              # Provides helper methods for testing Active Job
         
     | 
| 
         @@ -52,7 +51,7 @@ module ActiveJob 
     | 
|
| 
       52 
51 
     | 
    
         
             
                  queue_adapter_changed_jobs.each { |klass| klass.disable_test_adapter }
         
     | 
| 
       53 
52 
     | 
    
         
             
                end
         
     | 
| 
       54 
53 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
                # Specifies the queue adapter to use with all  
     | 
| 
      
 54 
     | 
    
         
            +
                # Specifies the queue adapter to use with all Active Job test helpers.
         
     | 
| 
       56 
55 
     | 
    
         
             
                #
         
     | 
| 
       57 
56 
     | 
    
         
             
                # Returns an instance of the queue adapter and defaults to
         
     | 
| 
       58 
57 
     | 
    
         
             
                # <tt>ActiveJob::QueueAdapters::TestAdapter</tt>.
         
     | 
| 
         @@ -75,7 +74,7 @@ module ActiveJob 
     | 
|
| 
       75 
74 
     | 
    
         
             
                #     assert_enqueued_jobs 2
         
     | 
| 
       76 
75 
     | 
    
         
             
                #   end
         
     | 
| 
       77 
76 
     | 
    
         
             
                #
         
     | 
| 
       78 
     | 
    
         
            -
                # If a block is passed, that block will cause the specified number of
         
     | 
| 
      
 77 
     | 
    
         
            +
                # If a block is passed, asserts that the block will cause the specified number of
         
     | 
| 
       79 
78 
     | 
    
         
             
                # jobs to be enqueued.
         
     | 
| 
       80 
79 
     | 
    
         
             
                #
         
     | 
| 
       81 
80 
     | 
    
         
             
                #   def test_jobs_again
         
     | 
| 
         @@ -89,7 +88,7 @@ module ActiveJob 
     | 
|
| 
       89 
88 
     | 
    
         
             
                #     end
         
     | 
| 
       90 
89 
     | 
    
         
             
                #   end
         
     | 
| 
       91 
90 
     | 
    
         
             
                #
         
     | 
| 
       92 
     | 
    
         
            -
                #  
     | 
| 
      
 91 
     | 
    
         
            +
                # Asserts the number of times a specific job was enqueued by passing +:only+ option.
         
     | 
| 
       93 
92 
     | 
    
         
             
                #
         
     | 
| 
       94 
93 
     | 
    
         
             
                #   def test_logging_job
         
     | 
| 
       95 
94 
     | 
    
         
             
                #     assert_enqueued_jobs 1, only: LoggingJob do
         
     | 
| 
         @@ -98,7 +97,7 @@ module ActiveJob 
     | 
|
| 
       98 
97 
     | 
    
         
             
                #     end
         
     | 
| 
       99 
98 
     | 
    
         
             
                #   end
         
     | 
| 
       100 
99 
     | 
    
         
             
                #
         
     | 
| 
       101 
     | 
    
         
            -
                #  
     | 
| 
      
 100 
     | 
    
         
            +
                # Asserts the number of times a job except specific class was enqueued by passing +:except+ option.
         
     | 
| 
       102 
101 
     | 
    
         
             
                #
         
     | 
| 
       103 
102 
     | 
    
         
             
                #   def test_logging_job
         
     | 
| 
       104 
103 
     | 
    
         
             
                #     assert_enqueued_jobs 1, except: HelloJob do
         
     | 
| 
         @@ -107,7 +106,10 @@ module ActiveJob 
     | 
|
| 
       107 
106 
     | 
    
         
             
                #     end
         
     | 
| 
       108 
107 
     | 
    
         
             
                #   end
         
     | 
| 
       109 
108 
     | 
    
         
             
                #
         
     | 
| 
       110 
     | 
    
         
            -
                #  
     | 
| 
      
 109 
     | 
    
         
            +
                # +:only+ and +:except+ options accepts Class, Array of Class or Proc. When passed a Proc,
         
     | 
| 
      
 110 
     | 
    
         
            +
                # a hash containing the job's class and it's argument are passed as argument.
         
     | 
| 
      
 111 
     | 
    
         
            +
                #
         
     | 
| 
      
 112 
     | 
    
         
            +
                # Asserts the number of times a job is enqueued to a specific queue by passing +:queue+ option.
         
     | 
| 
       111 
113 
     | 
    
         
             
                #
         
     | 
| 
       112 
114 
     | 
    
         
             
                #   def test_logging_job
         
     | 
| 
       113 
115 
     | 
    
         
             
                #     assert_enqueued_jobs 2, queue: 'default' do
         
     | 
| 
         @@ -117,14 +119,18 @@ module ActiveJob 
     | 
|
| 
       117 
119 
     | 
    
         
             
                #   end
         
     | 
| 
       118 
120 
     | 
    
         
             
                def assert_enqueued_jobs(number, only: nil, except: nil, queue: nil)
         
     | 
| 
       119 
121 
     | 
    
         
             
                  if block_given?
         
     | 
| 
       120 
     | 
    
         
            -
                    original_count =  
     | 
| 
      
 122 
     | 
    
         
            +
                    original_count = enqueued_jobs_with(only: only, except: except, queue: queue)
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
       121 
124 
     | 
    
         
             
                    yield
         
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
                     
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                    new_count = enqueued_jobs_with(only: only, except: except, queue: queue)
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                    actual_count = new_count - original_count
         
     | 
| 
       124 
129 
     | 
    
         
             
                  else
         
     | 
| 
       125 
     | 
    
         
            -
                    actual_count =  
     | 
| 
       126 
     | 
    
         
            -
                    assert_equal number, actual_count, "#{number} jobs expected, but #{actual_count} were enqueued"
         
     | 
| 
      
 130 
     | 
    
         
            +
                    actual_count = enqueued_jobs_with(only: only, except: except, queue: queue)
         
     | 
| 
       127 
131 
     | 
    
         
             
                  end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                  assert_equal number, actual_count, "#{number} jobs expected, but #{actual_count} were enqueued"
         
     | 
| 
       128 
134 
     | 
    
         
             
                end
         
     | 
| 
       129 
135 
     | 
    
         | 
| 
       130 
136 
     | 
    
         
             
                # Asserts that no jobs have been enqueued.
         
     | 
| 
         @@ -135,7 +141,7 @@ module ActiveJob 
     | 
|
| 
       135 
141 
     | 
    
         
             
                #     assert_enqueued_jobs 1
         
     | 
| 
       136 
142 
     | 
    
         
             
                #   end
         
     | 
| 
       137 
143 
     | 
    
         
             
                #
         
     | 
| 
       138 
     | 
    
         
            -
                # If a block is passed, that block  
     | 
| 
      
 144 
     | 
    
         
            +
                # If a block is passed, asserts that the block will not cause any job to be enqueued.
         
     | 
| 
       139 
145 
     | 
    
         
             
                #
         
     | 
| 
       140 
146 
     | 
    
         
             
                #   def test_jobs_again
         
     | 
| 
       141 
147 
     | 
    
         
             
                #     assert_no_enqueued_jobs do
         
     | 
| 
         @@ -143,7 +149,7 @@ module ActiveJob 
     | 
|
| 
       143 
149 
     | 
    
         
             
                #     end
         
     | 
| 
       144 
150 
     | 
    
         
             
                #   end
         
     | 
| 
       145 
151 
     | 
    
         
             
                #
         
     | 
| 
       146 
     | 
    
         
            -
                #  
     | 
| 
      
 152 
     | 
    
         
            +
                # Asserts that no jobs of a specific kind are enqueued by passing +:only+ option.
         
     | 
| 
       147 
153 
     | 
    
         
             
                #
         
     | 
| 
       148 
154 
     | 
    
         
             
                #   def test_no_logging
         
     | 
| 
       149 
155 
     | 
    
         
             
                #     assert_no_enqueued_jobs only: LoggingJob do
         
     | 
| 
         @@ -151,7 +157,7 @@ module ActiveJob 
     | 
|
| 
       151 
157 
     | 
    
         
             
                #     end
         
     | 
| 
       152 
158 
     | 
    
         
             
                #   end
         
     | 
| 
       153 
159 
     | 
    
         
             
                #
         
     | 
| 
       154 
     | 
    
         
            -
                #  
     | 
| 
      
 160 
     | 
    
         
            +
                # Asserts that no jobs except specific class are enqueued by passing +:except+ option.
         
     | 
| 
       155 
161 
     | 
    
         
             
                #
         
     | 
| 
       156 
162 
     | 
    
         
             
                #   def test_no_logging
         
     | 
| 
       157 
163 
     | 
    
         
             
                #     assert_no_enqueued_jobs except: HelloJob do
         
     | 
| 
         @@ -159,16 +165,27 @@ module ActiveJob 
     | 
|
| 
       159 
165 
     | 
    
         
             
                #     end
         
     | 
| 
       160 
166 
     | 
    
         
             
                #   end
         
     | 
| 
       161 
167 
     | 
    
         
             
                #
         
     | 
| 
      
 168 
     | 
    
         
            +
                # +:only+ and +:except+ options accepts Class, Array of Class or Proc. When passed a Proc,
         
     | 
| 
      
 169 
     | 
    
         
            +
                # a hash containing the job's class and it's argument are passed as argument.
         
     | 
| 
      
 170 
     | 
    
         
            +
                #
         
     | 
| 
      
 171 
     | 
    
         
            +
                # Asserts that no jobs are enqueued to a specific queue by passing +:queue+ option
         
     | 
| 
      
 172 
     | 
    
         
            +
                #
         
     | 
| 
      
 173 
     | 
    
         
            +
                #   def test_no_logging
         
     | 
| 
      
 174 
     | 
    
         
            +
                #     assert_no_enqueued_jobs queue: 'default' do
         
     | 
| 
      
 175 
     | 
    
         
            +
                #       LoggingJob.set(queue: :some_queue).perform_later
         
     | 
| 
      
 176 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 177 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 178 
     | 
    
         
            +
                #
         
     | 
| 
       162 
179 
     | 
    
         
             
                # Note: This assertion is simply a shortcut for:
         
     | 
| 
       163 
180 
     | 
    
         
             
                #
         
     | 
| 
       164 
181 
     | 
    
         
             
                #   assert_enqueued_jobs 0, &block
         
     | 
| 
       165 
     | 
    
         
            -
                def assert_no_enqueued_jobs(only: nil, except: nil, &block)
         
     | 
| 
       166 
     | 
    
         
            -
                  assert_enqueued_jobs 0, only: only, except: except, &block
         
     | 
| 
      
 182 
     | 
    
         
            +
                def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
         
     | 
| 
      
 183 
     | 
    
         
            +
                  assert_enqueued_jobs 0, only: only, except: except, queue: queue, &block
         
     | 
| 
       167 
184 
     | 
    
         
             
                end
         
     | 
| 
       168 
185 
     | 
    
         | 
| 
       169 
186 
     | 
    
         
             
                # Asserts that the number of performed jobs matches the given number.
         
     | 
| 
       170 
187 
     | 
    
         
             
                # If no block is passed, <tt>perform_enqueued_jobs</tt>
         
     | 
| 
       171 
     | 
    
         
            -
                # must be called around the job call.
         
     | 
| 
      
 188 
     | 
    
         
            +
                # must be called around or after the job call.
         
     | 
| 
       172 
189 
     | 
    
         
             
                #
         
     | 
| 
       173 
190 
     | 
    
         
             
                #   def test_jobs
         
     | 
| 
       174 
191 
     | 
    
         
             
                #     assert_performed_jobs 0
         
     | 
| 
         @@ -178,13 +195,14 @@ module ActiveJob 
     | 
|
| 
       178 
195 
     | 
    
         
             
                #     end
         
     | 
| 
       179 
196 
     | 
    
         
             
                #     assert_performed_jobs 1
         
     | 
| 
       180 
197 
     | 
    
         
             
                #
         
     | 
| 
       181 
     | 
    
         
            -
                #      
     | 
| 
       182 
     | 
    
         
            -
                # 
     | 
| 
       183 
     | 
    
         
            -
                # 
     | 
| 
       184 
     | 
    
         
            -
                # 
     | 
| 
      
 198 
     | 
    
         
            +
                #     HelloJob.perform_later('yves')
         
     | 
| 
      
 199 
     | 
    
         
            +
                #
         
     | 
| 
      
 200 
     | 
    
         
            +
                #     perform_enqueued_jobs
         
     | 
| 
      
 201 
     | 
    
         
            +
                #
         
     | 
| 
      
 202 
     | 
    
         
            +
                #     assert_performed_jobs 2
         
     | 
| 
       185 
203 
     | 
    
         
             
                #   end
         
     | 
| 
       186 
204 
     | 
    
         
             
                #
         
     | 
| 
       187 
     | 
    
         
            -
                # If a block is passed, that block  
     | 
| 
      
 205 
     | 
    
         
            +
                # If a block is passed, asserts that the block will cause the specified number of
         
     | 
| 
       188 
206 
     | 
    
         
             
                # jobs to be performed.
         
     | 
| 
       189 
207 
     | 
    
         
             
                #
         
     | 
| 
       190 
208 
     | 
    
         
             
                #   def test_jobs_again
         
     | 
| 
         @@ -198,7 +216,7 @@ module ActiveJob 
     | 
|
| 
       198 
216 
     | 
    
         
             
                #     end
         
     | 
| 
       199 
217 
     | 
    
         
             
                #   end
         
     | 
| 
       200 
218 
     | 
    
         
             
                #
         
     | 
| 
       201 
     | 
    
         
            -
                #  
     | 
| 
      
 219 
     | 
    
         
            +
                # This method also supports filtering. If the +:only+ option is specified,
         
     | 
| 
       202 
220 
     | 
    
         
             
                # then only the listed job(s) will be performed.
         
     | 
| 
       203 
221 
     | 
    
         
             
                #
         
     | 
| 
       204 
222 
     | 
    
         
             
                #     def test_hello_job
         
     | 
| 
         @@ -208,7 +226,7 @@ module ActiveJob 
     | 
|
| 
       208 
226 
     | 
    
         
             
                #       end
         
     | 
| 
       209 
227 
     | 
    
         
             
                #     end
         
     | 
| 
       210 
228 
     | 
    
         
             
                #
         
     | 
| 
       211 
     | 
    
         
            -
                # Also if the  
     | 
| 
      
 229 
     | 
    
         
            +
                # Also if the +:except+ option is specified,
         
     | 
| 
       212 
230 
     | 
    
         
             
                # then the job(s) except specific class will be performed.
         
     | 
| 
       213 
231 
     | 
    
         
             
                #
         
     | 
| 
       214 
232 
     | 
    
         
             
                #     def test_hello_job
         
     | 
| 
         @@ -229,17 +247,42 @@ module ActiveJob 
     | 
|
| 
       229 
247 
     | 
    
         
             
                #         end
         
     | 
| 
       230 
248 
     | 
    
         
             
                #       end
         
     | 
| 
       231 
249 
     | 
    
         
             
                #     end
         
     | 
| 
       232 
     | 
    
         
            -
                 
     | 
| 
      
 250 
     | 
    
         
            +
                #
         
     | 
| 
      
 251 
     | 
    
         
            +
                # A proc may also be specified. When passed a Proc, the job's instance will be passed as argument.
         
     | 
| 
      
 252 
     | 
    
         
            +
                #
         
     | 
| 
      
 253 
     | 
    
         
            +
                #     def test_hello_and_logging_jobs
         
     | 
| 
      
 254 
     | 
    
         
            +
                #       assert_nothing_raised do
         
     | 
| 
      
 255 
     | 
    
         
            +
                #         assert_performed_jobs(1, only: ->(job) { job.is_a?(HelloJob) }) do
         
     | 
| 
      
 256 
     | 
    
         
            +
                #           HelloJob.perform_later('jeremy')
         
     | 
| 
      
 257 
     | 
    
         
            +
                #           LoggingJob.perform_later('stewie')
         
     | 
| 
      
 258 
     | 
    
         
            +
                #           RescueJob.perform_later('david')
         
     | 
| 
      
 259 
     | 
    
         
            +
                #         end
         
     | 
| 
      
 260 
     | 
    
         
            +
                #       end
         
     | 
| 
      
 261 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 262 
     | 
    
         
            +
                #
         
     | 
| 
      
 263 
     | 
    
         
            +
                # If the +:queue+ option is specified,
         
     | 
| 
      
 264 
     | 
    
         
            +
                # then only the job(s) enqueued to a specific queue will be performed.
         
     | 
| 
      
 265 
     | 
    
         
            +
                #
         
     | 
| 
      
 266 
     | 
    
         
            +
                #     def test_assert_performed_jobs_with_queue_option
         
     | 
| 
      
 267 
     | 
    
         
            +
                #       assert_performed_jobs 1, queue: :some_queue do
         
     | 
| 
      
 268 
     | 
    
         
            +
                #         HelloJob.set(queue: :some_queue).perform_later("jeremy")
         
     | 
| 
      
 269 
     | 
    
         
            +
                #         HelloJob.set(queue: :other_queue).perform_later("bogdan")
         
     | 
| 
      
 270 
     | 
    
         
            +
                #       end
         
     | 
| 
      
 271 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 272 
     | 
    
         
            +
                def assert_performed_jobs(number, only: nil, except: nil, queue: nil, &block)
         
     | 
| 
       233 
273 
     | 
    
         
             
                  if block_given?
         
     | 
| 
       234 
274 
     | 
    
         
             
                    original_count = performed_jobs.size
         
     | 
| 
       235 
     | 
    
         
            -
             
     | 
| 
      
 275 
     | 
    
         
            +
             
     | 
| 
      
 276 
     | 
    
         
            +
                    perform_enqueued_jobs(only: only, except: except, queue: queue, &block)
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
       236 
278 
     | 
    
         
             
                    new_count = performed_jobs.size
         
     | 
| 
       237 
     | 
    
         
            -
             
     | 
| 
       238 
     | 
    
         
            -
             
     | 
| 
      
 279 
     | 
    
         
            +
             
     | 
| 
      
 280 
     | 
    
         
            +
                    performed_jobs_size = new_count - original_count
         
     | 
| 
       239 
281 
     | 
    
         
             
                  else
         
     | 
| 
       240 
     | 
    
         
            -
                    performed_jobs_size =  
     | 
| 
       241 
     | 
    
         
            -
                    assert_equal number, performed_jobs_size, "#{number} jobs expected, but #{performed_jobs_size} were performed"
         
     | 
| 
      
 282 
     | 
    
         
            +
                    performed_jobs_size = performed_jobs_with(only: only, except: except, queue: queue)
         
     | 
| 
       242 
283 
     | 
    
         
             
                  end
         
     | 
| 
      
 284 
     | 
    
         
            +
             
     | 
| 
      
 285 
     | 
    
         
            +
                  assert_equal number, performed_jobs_size, "#{number} jobs expected, but #{performed_jobs_size} were performed"
         
     | 
| 
       243 
286 
     | 
    
         
             
                end
         
     | 
| 
       244 
287 
     | 
    
         | 
| 
       245 
288 
     | 
    
         
             
                # Asserts that no jobs have been performed.
         
     | 
| 
         @@ -253,7 +296,7 @@ module ActiveJob 
     | 
|
| 
       253 
296 
     | 
    
         
             
                #     end
         
     | 
| 
       254 
297 
     | 
    
         
             
                #   end
         
     | 
| 
       255 
298 
     | 
    
         
             
                #
         
     | 
| 
       256 
     | 
    
         
            -
                # If a block is passed, that block  
     | 
| 
      
 299 
     | 
    
         
            +
                # If a block is passed, asserts that the block will not cause any job to be performed.
         
     | 
| 
       257 
300 
     | 
    
         
             
                #
         
     | 
| 
       258 
301 
     | 
    
         
             
                #   def test_jobs_again
         
     | 
| 
       259 
302 
     | 
    
         
             
                #     assert_no_performed_jobs do
         
     | 
| 
         @@ -261,7 +304,7 @@ module ActiveJob 
     | 
|
| 
       261 
304 
     | 
    
         
             
                #     end
         
     | 
| 
       262 
305 
     | 
    
         
             
                #   end
         
     | 
| 
       263 
306 
     | 
    
         
             
                #
         
     | 
| 
       264 
     | 
    
         
            -
                # The block form supports filtering. If the  
     | 
| 
      
 307 
     | 
    
         
            +
                # The block form supports filtering. If the +:only+ option is specified,
         
     | 
| 
       265 
308 
     | 
    
         
             
                # then only the listed job(s) will not be performed.
         
     | 
| 
       266 
309 
     | 
    
         
             
                #
         
     | 
| 
       267 
310 
     | 
    
         
             
                #   def test_no_logging
         
     | 
| 
         @@ -270,7 +313,7 @@ module ActiveJob 
     | 
|
| 
       270 
313 
     | 
    
         
             
                #     end
         
     | 
| 
       271 
314 
     | 
    
         
             
                #   end
         
     | 
| 
       272 
315 
     | 
    
         
             
                #
         
     | 
| 
       273 
     | 
    
         
            -
                # Also if the  
     | 
| 
      
 316 
     | 
    
         
            +
                # Also if the +:except+ option is specified,
         
     | 
| 
       274 
317 
     | 
    
         
             
                # then the job(s) except specific class will not be performed.
         
     | 
| 
       275 
318 
     | 
    
         
             
                #
         
     | 
| 
       276 
319 
     | 
    
         
             
                #   def test_no_logging
         
     | 
| 
         @@ -279,14 +322,53 @@ module ActiveJob 
     | 
|
| 
       279 
322 
     | 
    
         
             
                #     end
         
     | 
| 
       280 
323 
     | 
    
         
             
                #   end
         
     | 
| 
       281 
324 
     | 
    
         
             
                #
         
     | 
| 
      
 325 
     | 
    
         
            +
                # +:only+ and +:except+ options accepts Class, Array of Class or Proc. When passed a Proc,
         
     | 
| 
      
 326 
     | 
    
         
            +
                # an instance of the job will be passed as argument.
         
     | 
| 
      
 327 
     | 
    
         
            +
                #
         
     | 
| 
      
 328 
     | 
    
         
            +
                # If the +:queue+ option is specified,
         
     | 
| 
      
 329 
     | 
    
         
            +
                # then only the job(s) enqueued to a specific queue will not be performed.
         
     | 
| 
      
 330 
     | 
    
         
            +
                #
         
     | 
| 
      
 331 
     | 
    
         
            +
                #   def test_assert_no_performed_jobs_with_queue_option
         
     | 
| 
      
 332 
     | 
    
         
            +
                #     assert_no_performed_jobs queue: :some_queue do
         
     | 
| 
      
 333 
     | 
    
         
            +
                #       HelloJob.set(queue: :other_queue).perform_later("jeremy")
         
     | 
| 
      
 334 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 335 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 336 
     | 
    
         
            +
                #
         
     | 
| 
       282 
337 
     | 
    
         
             
                # Note: This assertion is simply a shortcut for:
         
     | 
| 
       283 
338 
     | 
    
         
             
                #
         
     | 
| 
       284 
339 
     | 
    
         
             
                #   assert_performed_jobs 0, &block
         
     | 
| 
       285 
     | 
    
         
            -
                def assert_no_performed_jobs(only: nil, except: nil, &block)
         
     | 
| 
       286 
     | 
    
         
            -
                  assert_performed_jobs 0, only: only, except: except, &block
         
     | 
| 
      
 340 
     | 
    
         
            +
                def assert_no_performed_jobs(only: nil, except: nil, queue: nil, &block)
         
     | 
| 
      
 341 
     | 
    
         
            +
                  assert_performed_jobs 0, only: only, except: except, queue: queue, &block
         
     | 
| 
       287 
342 
     | 
    
         
             
                end
         
     | 
| 
       288 
343 
     | 
    
         | 
| 
       289 
     | 
    
         
            -
                # Asserts that the job  
     | 
| 
      
 344 
     | 
    
         
            +
                # Asserts that the job has been enqueued with the given arguments.
         
     | 
| 
      
 345 
     | 
    
         
            +
                #
         
     | 
| 
      
 346 
     | 
    
         
            +
                #   def test_assert_enqueued_with
         
     | 
| 
      
 347 
     | 
    
         
            +
                #     MyJob.perform_later(1,2,3)
         
     | 
| 
      
 348 
     | 
    
         
            +
                #     assert_enqueued_with(job: MyJob, args: [1,2,3], queue: 'low')
         
     | 
| 
      
 349 
     | 
    
         
            +
                #
         
     | 
| 
      
 350 
     | 
    
         
            +
                #     MyJob.set(wait_until: Date.tomorrow.noon).perform_later
         
     | 
| 
      
 351 
     | 
    
         
            +
                #     assert_enqueued_with(job: MyJob, at: Date.tomorrow.noon)
         
     | 
| 
      
 352 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 353 
     | 
    
         
            +
                #
         
     | 
| 
      
 354 
     | 
    
         
            +
                #
         
     | 
| 
      
 355 
     | 
    
         
            +
                # The +args+ argument also accepts a proc which will get passed the actual
         
     | 
| 
      
 356 
     | 
    
         
            +
                # job's arguments. Your proc needs to return a boolean value determining if
         
     | 
| 
      
 357 
     | 
    
         
            +
                # the job's arguments matches your expectation. This is useful to check only
         
     | 
| 
      
 358 
     | 
    
         
            +
                # for a subset of arguments.
         
     | 
| 
      
 359 
     | 
    
         
            +
                #
         
     | 
| 
      
 360 
     | 
    
         
            +
                #   def test_assert_enqueued_with
         
     | 
| 
      
 361 
     | 
    
         
            +
                #     expected_args = ->(job_args) do
         
     | 
| 
      
 362 
     | 
    
         
            +
                #       assert job_args.first.key?(:foo)
         
     | 
| 
      
 363 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 364 
     | 
    
         
            +
                #
         
     | 
| 
      
 365 
     | 
    
         
            +
                #     MyJob.perform_later(foo: 'bar', other_arg: 'No need to check in the test')
         
     | 
| 
      
 366 
     | 
    
         
            +
                #     assert_enqueued_with(job: MyJob, args: expected_args, queue: 'low')
         
     | 
| 
      
 367 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 368 
     | 
    
         
            +
                #
         
     | 
| 
      
 369 
     | 
    
         
            +
                #
         
     | 
| 
      
 370 
     | 
    
         
            +
                # If a block is passed, asserts that the block will cause the job to be
         
     | 
| 
      
 371 
     | 
    
         
            +
                # enqueued with the given arguments.
         
     | 
| 
       290 
372 
     | 
    
         
             
                #
         
     | 
| 
       291 
373 
     | 
    
         
             
                #   def test_assert_enqueued_with
         
     | 
| 
       292 
374 
     | 
    
         
             
                #     assert_enqueued_with(job: MyJob, args: [1,2,3], queue: 'low') do
         
     | 
| 
         @@ -298,20 +380,70 @@ module ActiveJob 
     | 
|
| 
       298 
380 
     | 
    
         
             
                #     end
         
     | 
| 
       299 
381 
     | 
    
         
             
                #   end
         
     | 
| 
       300 
382 
     | 
    
         
             
                def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil)
         
     | 
| 
       301 
     | 
    
         
            -
                  original_enqueued_jobs_count = enqueued_jobs.count
         
     | 
| 
       302 
383 
     | 
    
         
             
                  expected = { job: job, args: args, at: at, queue: queue }.compact
         
     | 
| 
       303 
384 
     | 
    
         
             
                  expected_args = prepare_args_for_assertion(expected)
         
     | 
| 
       304 
     | 
    
         
            -
             
     | 
| 
       305 
     | 
    
         
            -
                   
     | 
| 
       306 
     | 
    
         
            -
             
     | 
| 
       307 
     | 
    
         
            -
             
     | 
| 
       308 
     | 
    
         
            -
                     
     | 
| 
      
 385 
     | 
    
         
            +
             
     | 
| 
      
 386 
     | 
    
         
            +
                  if block_given?
         
     | 
| 
      
 387 
     | 
    
         
            +
                    original_enqueued_jobs_count = enqueued_jobs.count
         
     | 
| 
      
 388 
     | 
    
         
            +
             
     | 
| 
      
 389 
     | 
    
         
            +
                    yield
         
     | 
| 
      
 390 
     | 
    
         
            +
             
     | 
| 
      
 391 
     | 
    
         
            +
                    jobs = enqueued_jobs.drop(original_enqueued_jobs_count)
         
     | 
| 
      
 392 
     | 
    
         
            +
                  else
         
     | 
| 
      
 393 
     | 
    
         
            +
                    jobs = enqueued_jobs
         
     | 
| 
       309 
394 
     | 
    
         
             
                  end
         
     | 
| 
      
 395 
     | 
    
         
            +
             
     | 
| 
      
 396 
     | 
    
         
            +
                  matching_job = jobs.find do |enqueued_job|
         
     | 
| 
      
 397 
     | 
    
         
            +
                    deserialized_job = deserialize_args_for_assertion(enqueued_job)
         
     | 
| 
      
 398 
     | 
    
         
            +
             
     | 
| 
      
 399 
     | 
    
         
            +
                    expected_args.all? do |key, value|
         
     | 
| 
      
 400 
     | 
    
         
            +
                      if value.respond_to?(:call)
         
     | 
| 
      
 401 
     | 
    
         
            +
                        value.call(deserialized_job[key])
         
     | 
| 
      
 402 
     | 
    
         
            +
                      else
         
     | 
| 
      
 403 
     | 
    
         
            +
                        value == deserialized_job[key]
         
     | 
| 
      
 404 
     | 
    
         
            +
                      end
         
     | 
| 
      
 405 
     | 
    
         
            +
                    end
         
     | 
| 
      
 406 
     | 
    
         
            +
                  end
         
     | 
| 
      
 407 
     | 
    
         
            +
             
     | 
| 
       310 
408 
     | 
    
         
             
                  assert matching_job, "No enqueued job found with #{expected}"
         
     | 
| 
       311 
409 
     | 
    
         
             
                  instantiate_job(matching_job)
         
     | 
| 
       312 
410 
     | 
    
         
             
                end
         
     | 
| 
       313 
411 
     | 
    
         | 
| 
       314 
     | 
    
         
            -
                # Asserts that the job  
     | 
| 
      
 412 
     | 
    
         
            +
                # Asserts that the job has been performed with the given arguments.
         
     | 
| 
      
 413 
     | 
    
         
            +
                #
         
     | 
| 
      
 414 
     | 
    
         
            +
                #   def test_assert_performed_with
         
     | 
| 
      
 415 
     | 
    
         
            +
                #     MyJob.perform_later(1,2,3)
         
     | 
| 
      
 416 
     | 
    
         
            +
                #
         
     | 
| 
      
 417 
     | 
    
         
            +
                #     perform_enqueued_jobs
         
     | 
| 
      
 418 
     | 
    
         
            +
                #
         
     | 
| 
      
 419 
     | 
    
         
            +
                #     assert_performed_with(job: MyJob, args: [1,2,3], queue: 'high')
         
     | 
| 
      
 420 
     | 
    
         
            +
                #
         
     | 
| 
      
 421 
     | 
    
         
            +
                #     MyJob.set(wait_until: Date.tomorrow.noon).perform_later
         
     | 
| 
      
 422 
     | 
    
         
            +
                #
         
     | 
| 
      
 423 
     | 
    
         
            +
                #     perform_enqueued_jobs
         
     | 
| 
      
 424 
     | 
    
         
            +
                #
         
     | 
| 
      
 425 
     | 
    
         
            +
                #     assert_performed_with(job: MyJob, at: Date.tomorrow.noon)
         
     | 
| 
      
 426 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 427 
     | 
    
         
            +
                #
         
     | 
| 
      
 428 
     | 
    
         
            +
                # The +args+ argument also accepts a proc which will get passed the actual
         
     | 
| 
      
 429 
     | 
    
         
            +
                # job's arguments. Your proc needs to return a boolean value determining if
         
     | 
| 
      
 430 
     | 
    
         
            +
                # the job's arguments matches your expectation. This is useful to check only
         
     | 
| 
      
 431 
     | 
    
         
            +
                # for a subset of arguments.
         
     | 
| 
      
 432 
     | 
    
         
            +
                #
         
     | 
| 
      
 433 
     | 
    
         
            +
                #   def test_assert_performed_with
         
     | 
| 
      
 434 
     | 
    
         
            +
                #     expected_args = ->(job_args) do
         
     | 
| 
      
 435 
     | 
    
         
            +
                #       assert job_args.first.key?(:foo)
         
     | 
| 
      
 436 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 437 
     | 
    
         
            +
                #     MyJob.perform_later(foo: 'bar', other_arg: 'No need to check in the test')
         
     | 
| 
      
 438 
     | 
    
         
            +
                #
         
     | 
| 
      
 439 
     | 
    
         
            +
                #     perform_enqueued_jobs
         
     | 
| 
      
 440 
     | 
    
         
            +
                #
         
     | 
| 
      
 441 
     | 
    
         
            +
                #     assert_performed_with(job: MyJob, args: expected_args, queue: 'high')
         
     | 
| 
      
 442 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 443 
     | 
    
         
            +
                #
         
     | 
| 
      
 444 
     | 
    
         
            +
                # If a block is passed, that block performs all of the jobs that were
         
     | 
| 
      
 445 
     | 
    
         
            +
                # enqueued throughout the duration of the block and asserts that
         
     | 
| 
      
 446 
     | 
    
         
            +
                # the job has been performed with the given arguments in the block.
         
     | 
| 
       315 
447 
     | 
    
         
             
                #
         
     | 
| 
       316 
448 
     | 
    
         
             
                #   def test_assert_performed_with
         
     | 
| 
       317 
449 
     | 
    
         
             
                #     assert_performed_with(job: MyJob, args: [1,2,3], queue: 'high') do
         
     | 
| 
         @@ -322,21 +454,39 @@ module ActiveJob 
     | 
|
| 
       322 
454 
     | 
    
         
             
                #       MyJob.set(wait_until: Date.tomorrow.noon).perform_later
         
     | 
| 
       323 
455 
     | 
    
         
             
                #     end
         
     | 
| 
       324 
456 
     | 
    
         
             
                #   end
         
     | 
| 
       325 
     | 
    
         
            -
                def assert_performed_with(job: nil, args: nil, at: nil, queue: nil)
         
     | 
| 
       326 
     | 
    
         
            -
                  original_performed_jobs_count = performed_jobs.count
         
     | 
| 
      
 457 
     | 
    
         
            +
                def assert_performed_with(job: nil, args: nil, at: nil, queue: nil, &block)
         
     | 
| 
       327 
458 
     | 
    
         
             
                  expected = { job: job, args: args, at: at, queue: queue }.compact
         
     | 
| 
       328 
459 
     | 
    
         
             
                  expected_args = prepare_args_for_assertion(expected)
         
     | 
| 
       329 
     | 
    
         
            -
             
     | 
| 
       330 
     | 
    
         
            -
                   
     | 
| 
       331 
     | 
    
         
            -
             
     | 
| 
       332 
     | 
    
         
            -
             
     | 
| 
       333 
     | 
    
         
            -
                     
     | 
| 
      
 460 
     | 
    
         
            +
             
     | 
| 
      
 461 
     | 
    
         
            +
                  if block_given?
         
     | 
| 
      
 462 
     | 
    
         
            +
                    original_performed_jobs_count = performed_jobs.count
         
     | 
| 
      
 463 
     | 
    
         
            +
             
     | 
| 
      
 464 
     | 
    
         
            +
                    perform_enqueued_jobs(&block)
         
     | 
| 
      
 465 
     | 
    
         
            +
             
     | 
| 
      
 466 
     | 
    
         
            +
                    jobs = performed_jobs.drop(original_performed_jobs_count)
         
     | 
| 
      
 467 
     | 
    
         
            +
                  else
         
     | 
| 
      
 468 
     | 
    
         
            +
                    jobs = performed_jobs
         
     | 
| 
       334 
469 
     | 
    
         
             
                  end
         
     | 
| 
      
 470 
     | 
    
         
            +
             
     | 
| 
      
 471 
     | 
    
         
            +
                  matching_job = jobs.find do |enqueued_job|
         
     | 
| 
      
 472 
     | 
    
         
            +
                    deserialized_job = deserialize_args_for_assertion(enqueued_job)
         
     | 
| 
      
 473 
     | 
    
         
            +
             
     | 
| 
      
 474 
     | 
    
         
            +
                    expected_args.all? do |key, value|
         
     | 
| 
      
 475 
     | 
    
         
            +
                      if value.respond_to?(:call)
         
     | 
| 
      
 476 
     | 
    
         
            +
                        value.call(deserialized_job[key])
         
     | 
| 
      
 477 
     | 
    
         
            +
                      else
         
     | 
| 
      
 478 
     | 
    
         
            +
                        value == deserialized_job[key]
         
     | 
| 
      
 479 
     | 
    
         
            +
                      end
         
     | 
| 
      
 480 
     | 
    
         
            +
                    end
         
     | 
| 
      
 481 
     | 
    
         
            +
                  end
         
     | 
| 
      
 482 
     | 
    
         
            +
             
     | 
| 
       335 
483 
     | 
    
         
             
                  assert matching_job, "No performed job found with #{expected}"
         
     | 
| 
       336 
484 
     | 
    
         
             
                  instantiate_job(matching_job)
         
     | 
| 
       337 
485 
     | 
    
         
             
                end
         
     | 
| 
       338 
486 
     | 
    
         | 
| 
       339 
     | 
    
         
            -
                # Performs all enqueued jobs  
     | 
| 
      
 487 
     | 
    
         
            +
                # Performs all enqueued jobs. If a block is given, performs all of the jobs
         
     | 
| 
      
 488 
     | 
    
         
            +
                # that were enqueued throughout the duration of the block. If a block is
         
     | 
| 
      
 489 
     | 
    
         
            +
                # not given, performs all of the enqueued jobs up to this point in the test.
         
     | 
| 
       340 
490 
     | 
    
         
             
                #
         
     | 
| 
       341 
491 
     | 
    
         
             
                #   def test_perform_enqueued_jobs
         
     | 
| 
       342 
492 
     | 
    
         
             
                #     perform_enqueued_jobs do
         
     | 
| 
         @@ -345,6 +495,14 @@ module ActiveJob 
     | 
|
| 
       345 
495 
     | 
    
         
             
                #     assert_performed_jobs 1
         
     | 
| 
       346 
496 
     | 
    
         
             
                #   end
         
     | 
| 
       347 
497 
     | 
    
         
             
                #
         
     | 
| 
      
 498 
     | 
    
         
            +
                #   def test_perform_enqueued_jobs_without_block
         
     | 
| 
      
 499 
     | 
    
         
            +
                #     MyJob.perform_later(1, 2, 3)
         
     | 
| 
      
 500 
     | 
    
         
            +
                #
         
     | 
| 
      
 501 
     | 
    
         
            +
                #     perform_enqueued_jobs
         
     | 
| 
      
 502 
     | 
    
         
            +
                #
         
     | 
| 
      
 503 
     | 
    
         
            +
                #     assert_performed_jobs 1
         
     | 
| 
      
 504 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 505 
     | 
    
         
            +
                #
         
     | 
| 
       348 
506 
     | 
    
         
             
                # This method also supports filtering. If the +:only+ option is specified,
         
     | 
| 
       349 
507 
     | 
    
         
             
                # then only the listed job(s) will be performed.
         
     | 
| 
       350 
508 
     | 
    
         
             
                #
         
     | 
| 
         @@ -367,24 +525,45 @@ module ActiveJob 
     | 
|
| 
       367 
525 
     | 
    
         
             
                #     assert_performed_jobs 1
         
     | 
| 
       368 
526 
     | 
    
         
             
                #   end
         
     | 
| 
       369 
527 
     | 
    
         
             
                #
         
     | 
| 
       370 
     | 
    
         
            -
                 
     | 
| 
      
 528 
     | 
    
         
            +
                # +:only+ and +:except+ options accepts Class, Array of Class or Proc. When passed a Proc,
         
     | 
| 
      
 529 
     | 
    
         
            +
                # an instance of the job will be passed as argument.
         
     | 
| 
      
 530 
     | 
    
         
            +
                #
         
     | 
| 
      
 531 
     | 
    
         
            +
                # If the +:queue+ option is specified,
         
     | 
| 
      
 532 
     | 
    
         
            +
                # then only the job(s) enqueued to a specific queue will be performed.
         
     | 
| 
      
 533 
     | 
    
         
            +
                #
         
     | 
| 
      
 534 
     | 
    
         
            +
                #   def test_perform_enqueued_jobs_with_queue
         
     | 
| 
      
 535 
     | 
    
         
            +
                #     perform_enqueued_jobs queue: :some_queue do
         
     | 
| 
      
 536 
     | 
    
         
            +
                #       MyJob.set(queue: :some_queue).perform_later(1, 2, 3) # will be performed
         
     | 
| 
      
 537 
     | 
    
         
            +
                #       HelloJob.set(queue: :other_queue).perform_later(1, 2, 3) # will not be performed
         
     | 
| 
      
 538 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 539 
     | 
    
         
            +
                #     assert_performed_jobs 1
         
     | 
| 
      
 540 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 541 
     | 
    
         
            +
                #
         
     | 
| 
      
 542 
     | 
    
         
            +
                def perform_enqueued_jobs(only: nil, except: nil, queue: nil)
         
     | 
| 
      
 543 
     | 
    
         
            +
                  return flush_enqueued_jobs(only: only, except: except, queue: queue) unless block_given?
         
     | 
| 
      
 544 
     | 
    
         
            +
             
     | 
| 
       371 
545 
     | 
    
         
             
                  validate_option(only: only, except: except)
         
     | 
| 
      
 546 
     | 
    
         
            +
             
     | 
| 
       372 
547 
     | 
    
         
             
                  old_perform_enqueued_jobs = queue_adapter.perform_enqueued_jobs
         
     | 
| 
       373 
548 
     | 
    
         
             
                  old_perform_enqueued_at_jobs = queue_adapter.perform_enqueued_at_jobs
         
     | 
| 
       374 
549 
     | 
    
         
             
                  old_filter = queue_adapter.filter
         
     | 
| 
       375 
550 
     | 
    
         
             
                  old_reject = queue_adapter.reject
         
     | 
| 
      
 551 
     | 
    
         
            +
                  old_queue = queue_adapter.queue
         
     | 
| 
       376 
552 
     | 
    
         | 
| 
       377 
553 
     | 
    
         
             
                  begin
         
     | 
| 
       378 
554 
     | 
    
         
             
                    queue_adapter.perform_enqueued_jobs = true
         
     | 
| 
       379 
555 
     | 
    
         
             
                    queue_adapter.perform_enqueued_at_jobs = true
         
     | 
| 
       380 
556 
     | 
    
         
             
                    queue_adapter.filter = only
         
     | 
| 
       381 
557 
     | 
    
         
             
                    queue_adapter.reject = except
         
     | 
| 
      
 558 
     | 
    
         
            +
                    queue_adapter.queue = queue
         
     | 
| 
      
 559 
     | 
    
         
            +
             
     | 
| 
       382 
560 
     | 
    
         
             
                    yield
         
     | 
| 
       383 
561 
     | 
    
         
             
                  ensure
         
     | 
| 
       384 
562 
     | 
    
         
             
                    queue_adapter.perform_enqueued_jobs = old_perform_enqueued_jobs
         
     | 
| 
       385 
563 
     | 
    
         
             
                    queue_adapter.perform_enqueued_at_jobs = old_perform_enqueued_at_jobs
         
     | 
| 
       386 
564 
     | 
    
         
             
                    queue_adapter.filter = old_filter
         
     | 
| 
       387 
565 
     | 
    
         
             
                    queue_adapter.reject = old_reject
         
     | 
| 
      
 566 
     | 
    
         
            +
                    queue_adapter.queue = old_queue
         
     | 
| 
       388 
567 
     | 
    
         
             
                  end
         
     | 
| 
       389 
568 
     | 
    
         
             
                end
         
     | 
| 
       390 
569 
     | 
    
         | 
| 
         @@ -406,30 +585,72 @@ module ActiveJob 
     | 
|
| 
       406 
585 
     | 
    
         
             
                    performed_jobs.clear
         
     | 
| 
       407 
586 
     | 
    
         
             
                  end
         
     | 
| 
       408 
587 
     | 
    
         | 
| 
       409 
     | 
    
         
            -
                  def  
     | 
| 
      
 588 
     | 
    
         
            +
                  def jobs_with(jobs, only: nil, except: nil, queue: nil)
         
     | 
| 
       410 
589 
     | 
    
         
             
                    validate_option(only: only, except: except)
         
     | 
| 
       411 
     | 
    
         
            -
             
     | 
| 
      
 590 
     | 
    
         
            +
             
     | 
| 
      
 591 
     | 
    
         
            +
                    jobs.count do |job|
         
     | 
| 
       412 
592 
     | 
    
         
             
                      job_class = job.fetch(:job)
         
     | 
| 
      
 593 
     | 
    
         
            +
             
     | 
| 
       413 
594 
     | 
    
         
             
                      if only
         
     | 
| 
       414 
     | 
    
         
            -
                        next false unless  
     | 
| 
      
 595 
     | 
    
         
            +
                        next false unless filter_as_proc(only).call(job)
         
     | 
| 
       415 
596 
     | 
    
         
             
                      elsif except
         
     | 
| 
       416 
     | 
    
         
            -
                        next false if  
     | 
| 
      
 597 
     | 
    
         
            +
                        next false if filter_as_proc(except).call(job)
         
     | 
| 
       417 
598 
     | 
    
         
             
                      end
         
     | 
| 
      
 599 
     | 
    
         
            +
             
     | 
| 
       418 
600 
     | 
    
         
             
                      if queue
         
     | 
| 
       419 
601 
     | 
    
         
             
                        next false unless queue.to_s == job.fetch(:queue, job_class.queue_name)
         
     | 
| 
       420 
602 
     | 
    
         
             
                      end
         
     | 
| 
      
 603 
     | 
    
         
            +
             
     | 
| 
      
 604 
     | 
    
         
            +
                      yield job if block_given?
         
     | 
| 
      
 605 
     | 
    
         
            +
             
     | 
| 
       421 
606 
     | 
    
         
             
                      true
         
     | 
| 
       422 
607 
     | 
    
         
             
                    end
         
     | 
| 
       423 
608 
     | 
    
         
             
                  end
         
     | 
| 
       424 
609 
     | 
    
         | 
| 
      
 610 
     | 
    
         
            +
                  def filter_as_proc(filter)
         
     | 
| 
      
 611 
     | 
    
         
            +
                    return filter if filter.is_a?(Proc)
         
     | 
| 
      
 612 
     | 
    
         
            +
             
     | 
| 
      
 613 
     | 
    
         
            +
                    ->(job) { Array(filter).include?(job.fetch(:job)) }
         
     | 
| 
      
 614 
     | 
    
         
            +
                  end
         
     | 
| 
      
 615 
     | 
    
         
            +
             
     | 
| 
      
 616 
     | 
    
         
            +
                  def enqueued_jobs_with(only: nil, except: nil, queue: nil, &block)
         
     | 
| 
      
 617 
     | 
    
         
            +
                    jobs_with(enqueued_jobs, only: only, except: except, queue: queue, &block)
         
     | 
| 
      
 618 
     | 
    
         
            +
                  end
         
     | 
| 
      
 619 
     | 
    
         
            +
             
     | 
| 
      
 620 
     | 
    
         
            +
                  def performed_jobs_with(only: nil, except: nil, queue: nil, &block)
         
     | 
| 
      
 621 
     | 
    
         
            +
                    jobs_with(performed_jobs, only: only, except: except, queue: queue, &block)
         
     | 
| 
      
 622 
     | 
    
         
            +
                  end
         
     | 
| 
      
 623 
     | 
    
         
            +
             
     | 
| 
      
 624 
     | 
    
         
            +
                  def flush_enqueued_jobs(only: nil, except: nil, queue: nil)
         
     | 
| 
      
 625 
     | 
    
         
            +
                    enqueued_jobs_with(only: only, except: except, queue: queue) do |payload|
         
     | 
| 
      
 626 
     | 
    
         
            +
                      instantiate_job(payload).perform_now
         
     | 
| 
      
 627 
     | 
    
         
            +
                      queue_adapter.performed_jobs << payload
         
     | 
| 
      
 628 
     | 
    
         
            +
                    end
         
     | 
| 
      
 629 
     | 
    
         
            +
                  end
         
     | 
| 
      
 630 
     | 
    
         
            +
             
     | 
| 
       425 
631 
     | 
    
         
             
                  def prepare_args_for_assertion(args)
         
     | 
| 
       426 
632 
     | 
    
         
             
                    args.dup.tap do |arguments|
         
     | 
| 
       427 
     | 
    
         
            -
                      arguments[:at] = arguments[:at] 
     | 
| 
      
 633 
     | 
    
         
            +
                      arguments[:at] = round_time_arguments(arguments[:at]) if arguments[:at]
         
     | 
| 
      
 634 
     | 
    
         
            +
                      arguments[:args] = round_time_arguments(arguments[:args]) if arguments[:args]
         
     | 
| 
      
 635 
     | 
    
         
            +
                    end
         
     | 
| 
      
 636 
     | 
    
         
            +
                  end
         
     | 
| 
      
 637 
     | 
    
         
            +
             
     | 
| 
      
 638 
     | 
    
         
            +
                  def round_time_arguments(argument)
         
     | 
| 
      
 639 
     | 
    
         
            +
                    case argument
         
     | 
| 
      
 640 
     | 
    
         
            +
                    when Time, ActiveSupport::TimeWithZone, DateTime
         
     | 
| 
      
 641 
     | 
    
         
            +
                      argument.change(usec: 0)
         
     | 
| 
      
 642 
     | 
    
         
            +
                    when Hash
         
     | 
| 
      
 643 
     | 
    
         
            +
                      argument.transform_values { |value| round_time_arguments(value) }
         
     | 
| 
      
 644 
     | 
    
         
            +
                    when Array
         
     | 
| 
      
 645 
     | 
    
         
            +
                      argument.map { |element| round_time_arguments(element) }
         
     | 
| 
      
 646 
     | 
    
         
            +
                    else
         
     | 
| 
      
 647 
     | 
    
         
            +
                      argument
         
     | 
| 
       428 
648 
     | 
    
         
             
                    end
         
     | 
| 
       429 
649 
     | 
    
         
             
                  end
         
     | 
| 
       430 
650 
     | 
    
         | 
| 
       431 
651 
     | 
    
         
             
                  def deserialize_args_for_assertion(job)
         
     | 
| 
       432 
652 
     | 
    
         
             
                    job.dup.tap do |new_job|
         
     | 
| 
      
 653 
     | 
    
         
            +
                      new_job[:at] = round_time_arguments(Time.at(new_job[:at])) if new_job[:at]
         
     | 
| 
       433 
654 
     | 
    
         
             
                      new_job[:args] = ActiveJob::Arguments.deserialize(new_job[:args]) if new_job[:args]
         
     | 
| 
       434 
655 
     | 
    
         
             
                    end
         
     | 
| 
       435 
656 
     | 
    
         
             
                  end
         
     |