@@ -78,14 +78,90 @@ class DynamicQueueJob < ApplicationJob
7878 end
7979 end
8080
81- if ActiveJob . gem_version >= Gem ::Version . new ( '5.0' )
82- context 'when there are ActiveJob classes with custom queue adapter' do
81+ context 'when there are ActiveJob classes with custom queue adapter' do
82+ subject do
83+ in_app_process ( adapter : :advanced_sneakers ) do
84+ class FooJob < ApplicationJob
85+ self . queue_adapter = :async
86+
87+ queue_as :bar
88+ end
89+
90+ AdvancedSneakersActiveJob . configure { |c | c . activejob_workers_strategy = :only }
91+
92+ Sneakers ::Worker ::Classes . call . map { |consumer | [ consumer . name , consumer . queue_name ] } . to_h
93+ end
94+ end
95+
96+ it 'are defined for queue from matching adapter only' do
97+ expected_consumers = {
98+ 'AdvancedSneakersActiveJob::DefaultConsumer' => 'default' , # default consumer
99+ 'AdvancedSneakersActiveJob::MailersConsumer' => 'mailers' , # action mailer consumer
100+ 'AdvancedSneakersActiveJob::CustomConsumer' => 'custom' # see CustomQueueJob in spec/apps/app/jobs
101+ }
102+
103+ expect ( subject . first ) . to eq ( expected_consumers )
104+ end
105+ end
106+
107+ context 'when advanced_sneakers is set as custom adapter' do
108+ subject do
109+ in_app_process ( adapter : :inline ) do
110+ class FooJob < ApplicationJob
111+ self . queue_adapter = :advanced_sneakers
112+
113+ queue_as :bar
114+ end
115+
116+ AdvancedSneakersActiveJob . configure { |c | c . activejob_workers_strategy = :only }
117+
118+ Sneakers ::Worker ::Classes . call . map { |consumer | [ consumer . name , consumer . queue_name ] } . to_h
119+ end
120+ end
121+
122+ it 'are defined for queue from matching adapter only' do
123+ expected_consumers = {
124+ 'AdvancedSneakersActiveJob::BarConsumer' => 'bar' # bar queue consumer for FooJob
125+ }
126+
127+ expect ( subject . first ) . to eq ( expected_consumers )
128+ end
129+ end
130+
131+ context 'when ActionMailer::Base has deliver_later_queue_name globally defined' do
132+ subject do
133+ in_app_process ( adapter : :advanced_sneakers ) do
134+ ActionMailer ::Base . deliver_later_queue_name = 'bar'
135+
136+ AdvancedSneakersActiveJob . configure { |c | c . activejob_workers_strategy = :only }
137+
138+ Sneakers ::Worker ::Classes . call . map { |consumer | [ consumer . name , consumer . queue_name ] } . to_h
139+ end
140+ end
141+
142+ it 'are defined for queue from matching adapter only' do
143+ expected_consumers = {
144+ 'AdvancedSneakersActiveJob::BarConsumer' => 'bar' , # bar queue consumer for FooMailer
145+ 'AdvancedSneakersActiveJob::DefaultConsumer' => 'default' , # default consumer
146+ 'AdvancedSneakersActiveJob::CustomConsumer' => 'custom' , # see CustomQueueJob in spec/apps/app/jobs
147+ }
148+
149+ expect ( subject . first ) . to eq ( expected_consumers )
150+ end
151+ end
152+
153+ # Support for mailer specific queue name was added in Rails 7.1
154+ # https://github.com/rails/rails/pull/47408
155+ if ActiveJob . gem_version >= Gem ::Version . new ( '7.1' )
156+ context 'when there are ActionMailer classes with queue defined' do
83157 subject do
84158 in_app_process ( adapter : :advanced_sneakers ) do
85- class FooJob < ApplicationJob
86- self . queue_adapter = :async
159+ class FooMailer < ActionMailer ::Base
160+ self . deliver_later_queue_name = 'bar'
161+ end
87162
88- queue_as :bar
163+ class BarMailer < ActionMailer ::Base
164+ self . deliver_later_queue_name = 'baz'
89165 end
90166
91167 AdvancedSneakersActiveJob . configure { |c | c . activejob_workers_strategy = :only }
@@ -96,24 +172,35 @@ class FooJob < ApplicationJob
96172
97173 it 'are defined for queue from matching adapter only' do
98174 expected_consumers = {
175+ 'AdvancedSneakersActiveJob::BarConsumer' => 'bar' , # bar queue consumer for FooMailer
176+ 'AdvancedSneakersActiveJob::BazConsumer' => 'baz' , # baz queue consumer for BarMailer
99177 'AdvancedSneakersActiveJob::DefaultConsumer' => 'default' , # default consumer
100178 'AdvancedSneakersActiveJob::MailersConsumer' => 'mailers' , # action mailer consumer
101- 'AdvancedSneakersActiveJob::CustomConsumer' => 'custom' # see CustomQueueJob in spec/apps/app/jobs
179+ 'AdvancedSneakersActiveJob::CustomConsumer' => 'custom' , # see CustomQueueJob in spec/apps/app/jobs
102180 }
103181
104182 expect ( subject . first ) . to eq ( expected_consumers )
105183 end
106184 end
107185
108- context 'when advanced_sneakers is set as custom adapter ' do
186+ context 'when there are ActionMailer classes with custom delivery jobs ' do
109187 subject do
110- in_app_process ( adapter : :inline ) do
111- class FooJob < ApplicationJob
112- self . queue_adapter = :advanced_sneakers
188+ in_app_process ( adapter : :advanced_sneakers ) do
189+ class CustomDeliveryJob < ActionMailer :: MailDeliveryJob
190+ self . queue_adapter = :async
113191
114192 queue_as :bar
115193 end
116194
195+ class FooMailer < ActionMailer ::Base
196+ self . delivery_job = CustomDeliveryJob
197+ self . deliver_later_queue_name = 'bar'
198+ end
199+
200+ class BarMailer < ActionMailer ::Base
201+ self . deliver_later_queue_name = 'baz'
202+ end
203+
117204 AdvancedSneakersActiveJob . configure { |c | c . activejob_workers_strategy = :only }
118205
119206 Sneakers ::Worker ::Classes . call . map { |consumer | [ consumer . name , consumer . queue_name ] } . to_h
@@ -122,7 +209,10 @@ class FooJob < ApplicationJob
122209
123210 it 'are defined for queue from matching adapter only' do
124211 expected_consumers = {
125- 'AdvancedSneakersActiveJob::BarConsumer' => 'bar' # bar queue consumer for FooJob
212+ 'AdvancedSneakersActiveJob::BazConsumer' => 'baz' , # baz queue consumer for BarMailer
213+ 'AdvancedSneakersActiveJob::DefaultConsumer' => 'default' , # default consumer
214+ 'AdvancedSneakersActiveJob::MailersConsumer' => 'mailers' , # action mailer consumer
215+ 'AdvancedSneakersActiveJob::CustomConsumer' => 'custom' , # see CustomQueueJob in spec/apps/app/jobs
126216 }
127217
128218 expect ( subject . first ) . to eq ( expected_consumers )
0 commit comments