2026-05-18 21:18:16 +07:00
|
|
|
import { describe, expect, it } from 'bun:test';
|
2026-07-29 07:28:30 +07:00
|
|
|
import { enqueueUpload } from '../src/infrastructure/telegram/upload-queue';
|
2026-05-18 21:18:16 +07:00
|
|
|
|
|
|
|
|
describe('Telegram Queue', () => {
|
2026-05-18 21:54:39 +07:00
|
|
|
it('should process tasks in parallel without limit', async () => {
|
2026-05-18 21:18:16 +07:00
|
|
|
let activeTasks = 0;
|
|
|
|
|
let maxActiveTasks = 0;
|
|
|
|
|
|
|
|
|
|
const createTask = (id: number, delayMs: number) => {
|
|
|
|
|
return async () => {
|
|
|
|
|
activeTasks++;
|
|
|
|
|
if (activeTasks > maxActiveTasks) {
|
|
|
|
|
maxActiveTasks = activeTasks;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
|
|
|
|
|
|
|
|
activeTasks--;
|
|
|
|
|
return id;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const promises = [
|
|
|
|
|
enqueueUpload(createTask(1, 50)),
|
2026-05-18 21:54:39 +07:00
|
|
|
enqueueUpload(createTask(2, 50)),
|
|
|
|
|
enqueueUpload(createTask(3, 50)),
|
|
|
|
|
enqueueUpload(createTask(4, 50)),
|
2026-05-18 21:18:16 +07:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const results = await Promise.all(promises);
|
|
|
|
|
|
|
|
|
|
expect(results).toEqual([1, 2, 3, 4]);
|
2026-05-18 21:54:39 +07:00
|
|
|
// Concurrency limit is removed, so active tasks should be able to reach 4 (fully parallel)
|
|
|
|
|
expect(maxActiveTasks).toBe(4);
|
2026-05-18 21:18:16 +07:00
|
|
|
});
|
|
|
|
|
});
|