queue.test.ts•1.54 kB
import { describe, expect, it } from 'vitest';
import { Queue } from './queue.js';
describe('Queue', () => {
it('should process jobs in order', async () => {
const queue = new Queue('test', { orgId: '' });
const results: number[] = [];
const task1 = async () => {
await new Promise(resolve => setTimeout(resolve, 10));
results.push(1);
};
const task2 = async () => {
results.push(2);
};
queue.enqueue('1', task1);
queue.enqueue('2', task2);
// Wait for queue to process
await new Promise(resolve => setTimeout(resolve, 50));
expect(results).toEqual([1, 2]);
});
it('should not add duplicate jobs', () => {
const queue = new Queue('test', { orgId: '' });
const task = async () => {
await new Promise(resolve => setTimeout(resolve, 100000));
};
queue.enqueue('1', task);
queue.enqueue('1', task);
// @ts-ignore - accessing private property for testing
expect(queue.queue.length).toBe(0);
});
it('should handle job errors without stopping the queue', async () => {
const queue = new Queue('test', { orgId: '' });
const results: string[] = [];
const failingTask = async () => {
throw new Error('Task failed');
};
const successTask = async () => {
results.push('success');
};
queue.enqueue('1', failingTask);
queue.enqueue('2', successTask);
// Wait for queue to process
await new Promise(resolve => setTimeout(resolve, 50));
expect(results).toEqual(['success']);
});
});