Skip to content

Commit fcada62

Browse files
committed
Add extra tests
1 parent d24e84b commit fcada62

1 file changed

Lines changed: 80 additions & 0 deletions

File tree

packages/sqs/test/consumers/SqsPermissionConsumer.startupResourcePolling.spec.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,84 @@ describe('SqsPermissionConsumer - startupResourcePollingConfig', () => {
171171
await expect(consumer.init()).rejects.toThrow(/does not exist/)
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

Comments
 (0)