This commit is contained in:
Boki 2025-06-25 10:47:00 -04:00
parent 54f37f9521
commit 3a7254708e
19 changed files with 1560 additions and 1237 deletions

View file

@ -4,6 +4,15 @@ import type { Job, Queue } from 'bullmq';
import type { RedisConfig } from '../src/types';
describe('DeadLetterQueueHandler', () => {
// Mock the DLQ Queue that will be created
const mockDLQQueue = {
name: 'test-queue-dlq',
add: mock(() => Promise.resolve({})),
getCompleted: mock(() => Promise.resolve([])),
getFailed: mock(() => Promise.resolve([])),
getWaiting: mock(() => Promise.resolve([])),
close: mock(() => Promise.resolve()),
} as unknown as Queue;
const mockLogger = {
info: mock(() => {}),
error: mock(() => {}),
@ -28,7 +37,18 @@ describe('DeadLetterQueueHandler', () => {
let dlqHandler: DeadLetterQueueHandler;
beforeEach(() => {
// Reset DLQ queue mocks
mockDLQQueue.add = mock(() => Promise.resolve({}));
mockDLQQueue.getCompleted = mock(() => Promise.resolve([]));
mockDLQQueue.getFailed = mock(() => Promise.resolve([]));
mockDLQQueue.getWaiting = mock(() => Promise.resolve([]));
mockDLQQueue.close = mock(() => Promise.resolve());
// Create handler with mocked DLQ queue
dlqHandler = new DeadLetterQueueHandler(mockQueue, mockRedisConfig, {}, mockLogger);
// Override the dlq property to use our mock
(dlqHandler as any).dlq = mockDLQQueue;
// Reset mocks
mockLogger.info = mock(() => {});
mockLogger.error = mock(() => {});
@ -47,9 +67,11 @@ describe('DeadLetterQueueHandler', () => {
payload: { test: true },
},
attemptsMade: 3,
opts: { attempts: 3 },
failedReason: 'Test error',
finishedOn: Date.now(),
processedOn: Date.now() - 5000,
timestamp: Date.now() - 10000,
} as Job;
const error = new Error('Job processing failed');
@ -72,7 +94,10 @@ describe('DeadLetterQueueHandler', () => {
name: 'test-job',
queueName: 'test-queue',
data: null,
attemptsMade: 1,
attemptsMade: 3,
opts: { attempts: 3 },
timestamp: Date.now() - 10000,
processedOn: Date.now() - 5000,
} as any;
const error = new Error('No data');
@ -120,9 +145,9 @@ describe('DeadLetterQueueHandler', () => {
},
];
(mockQueue.getCompleted as any) = mock(() => Promise.resolve(mockJobs));
(mockQueue.getFailed as any) = mock(() => Promise.resolve([]));
(mockQueue.getWaiting as any) = mock(() => Promise.resolve([]));
mockDLQQueue.getCompleted = mock(() => Promise.resolve(mockJobs));
mockDLQQueue.getFailed = mock(() => Promise.resolve([]));
mockDLQQueue.getWaiting = mock(() => Promise.resolve([]));
const stats = await dlqHandler.getStats();