app/api/queue.v2/infrastructure/specs/NamespacedDispatcher.ts
import { Dispatchable, HeartbeatCallback } from 'api/queue.v2/application/contracts/Dispatchable';
import { testingEnvironment } from 'api/utils/testingEnvironment';
import { DefaultTestingQueueAdapter } from 'api/queue.v2/configuration/factories';
import { NamespacedDispatcher } from '../NamespacedDispatcher';
class TestJob implements Dispatchable {
async handleDispatch(
_heartbeat: HeartbeatCallback,
_params: { data: { pieceOfData: string[] }; aNumber: number }
): Promise<void> {
throw new Error('not implemented');
}
}
beforeEach(async () => {
await testingEnvironment.setUp({});
});
afterAll(async () => {
await testingEnvironment.tearDown();
});
it('should enqueue and dequeue a job, including the namespace', async () => {
const adapter = DefaultTestingQueueAdapter();
const dispatcher = new NamespacedDispatcher('namespace', 'queue name', adapter);
const params = { data: { pieceOfData: ['a', 'b', 'c'] }, aNumber: 2 };
await dispatcher.dispatch(TestJob, params);
const job = await adapter.pickJob('queue name');
expect(job).toMatchObject({
id: expect.any(String),
name: TestJob.name,
params,
namespace: 'namespace',
});
});