@@ -171,4 +171,84 @@ describe('SqsPermissionConsumer - startupResourcePollingConfig', () => {
171171 await expect ( consumer . init ( ) ) . rejects . toThrow ( / d o e s n o t e x i s t / )
172172 } )
173173 } )
174+
175+ describe ( 'when nonBlocking mode is enabled' , ( ) => {
176+ it ( 'returns immediately when resource is available on first check' , async ( ) => {
177+ // Create queue first
178+ await assertQueue ( sqsClient , { QueueName : queueName } )
179+
180+ const consumer = new TestStartupResourcePollingConsumer ( diContainer . cradle , {
181+ locatorConfig : {
182+ queueUrl,
183+ startupResourcePolling : {
184+ enabled : true ,
185+ pollingIntervalMs : 100 ,
186+ timeoutMs : 5000 ,
187+ nonBlocking : true ,
188+ } ,
189+ } ,
190+ } )
191+
192+ await consumer . init ( )
193+
194+ expect ( consumer . queueProps . url ) . toBe ( queueUrl )
195+ expect ( consumer . queueProps . arn ) . toBeDefined ( )
196+ } )
197+
198+ it ( 'returns immediately when resource is not available and queueArn is undefined' , async ( ) => {
199+ const consumer = new TestStartupResourcePollingConsumer ( diContainer . cradle , {
200+ locatorConfig : {
201+ queueUrl,
202+ startupResourcePolling : {
203+ enabled : true ,
204+ pollingIntervalMs : 100 ,
205+ timeoutMs : 5000 ,
206+ nonBlocking : true ,
207+ } ,
208+ } ,
209+ } )
210+
211+ // Init should complete immediately even though queue doesn't exist
212+ await consumer . init ( )
213+
214+ expect ( consumer . queueProps . url ) . toBe ( queueUrl )
215+ expect ( consumer . queueProps . arn ) . toBeUndefined ( )
216+ } )
217+
218+ it ( 'invokes onQueueReady callback when resource becomes available in background' , async ( ) => {
219+ // We need to test the callback at the initter level since AbstractSqsConsumer
220+ // doesn't expose the onQueueReady callback directly
221+ const { initSqs } = await import ( '../../lib/utils/sqsInitter.ts' )
222+
223+ let callbackInvoked = false
224+ let callbackArn : string | undefined
225+
226+ // Start init without queue existing
227+ const initPromise = initSqs (
228+ sqsClient ,
229+ { queueUrl, startupResourcePolling : { enabled : true , pollingIntervalMs : 50 , timeoutMs : 5000 , nonBlocking : true } } ,
230+ undefined ,
231+ undefined ,
232+ {
233+ onQueueReady : ( result ) => {
234+ callbackInvoked = true
235+ callbackArn = result . queueArn
236+ } ,
237+ } ,
238+ )
239+
240+ // Init should return immediately
241+ const result = await initPromise
242+ expect ( result . queueArn ) . toBeUndefined ( )
243+
244+ // Create queue after init returns
245+ await assertQueue ( sqsClient , { QueueName : queueName } )
246+
247+ // Wait for background polling to detect the queue
248+ await setTimeout ( 200 )
249+
250+ expect ( callbackInvoked ) . toBe ( true )
251+ expect ( callbackArn ) . toBeDefined ( )
252+ } )
253+ } )
174254} )
0 commit comments