"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const importRunner_1 = require("../../src/jobs/importRunner"); (0, vitest_1.describe)('jobs/importRunner', () => { (0, vitest_1.it)('enqueue rechaza después de stop', async () => { const runner = new importRunner_1.ImportRunner(1); runner.start(); runner.stop(); await (0, vitest_1.expect)(runner.enqueue(() => 'x')).rejects.toThrow(); }); (0, vitest_1.it)('rechaza tareas en cola tras stop', async () => { const r = new importRunner_1.ImportRunner(1); // Primera tarea comienza inmediatamente const t1 = r.enqueue(async () => { await new Promise((res) => setTimeout(res, 50)); return 'ok1'; }); // Segunda tarea quedará en cola const t2 = r.enqueue(async () => 'ok2'); // Parar el runner inmediatamente r.stop(); await (0, vitest_1.expect)(t1).resolves.toBe('ok1'); await (0, vitest_1.expect)(t2).rejects.toThrow(/ImportRunner stopped/); const s = r.getStatus(); (0, vitest_1.expect)(s.completed).toBeGreaterThanOrEqual(1); }); (0, vitest_1.it)('completed incrementa en rechazo', async () => { const runner = new importRunner_1.ImportRunner(1); runner.start(); const p = runner.enqueue(() => Promise.reject(new Error('boom'))); await (0, vitest_1.expect)(p).rejects.toThrow('boom'); const status = runner.getStatus(); (0, vitest_1.expect)(status.completed).toBeGreaterThanOrEqual(1); runner.stop(); }); (0, vitest_1.it)('enqueue resuelve con el resultado de la tarea', async () => { const runner = new importRunner_1.ImportRunner(2); runner.start(); const result = await runner.enqueue(async () => 'ok'); (0, vitest_1.expect)(result).toBe('ok'); const status = runner.getStatus(); (0, vitest_1.expect)(status.completed).toBe(1); (0, vitest_1.expect)(status.running).toBe(0); (0, vitest_1.expect)(status.queued).toBe(0); (0, vitest_1.expect)(status.concurrency).toBe(2); runner.stop(); }); (0, vitest_1.it)('respeta la concurrencia configurada', async () => { const concurrency = 2; const runner = new importRunner_1.ImportRunner(concurrency); runner.start(); let active = 0; const observed = []; const makeTask = (delay) => async () => { active++; observed.push(active); await new Promise((r) => setTimeout(r, delay)); active--; return 'done'; }; const promises = []; for (let i = 0; i < 5; i++) { promises.push(runner.enqueue(makeTask(80))); } await Promise.all(promises); (0, vitest_1.expect)(Math.max(...observed)).toBeLessThanOrEqual(concurrency); runner.stop(); }); (0, vitest_1.it)('getStatus reporta queued, running, completed y concurrency', async () => { const concurrency = 2; const runner = new importRunner_1.ImportRunner(concurrency); runner.start(); const p1 = runner.enqueue(() => new Promise((r) => setTimeout(() => r('a'), 60))); const p2 = runner.enqueue(() => new Promise((r) => setTimeout(() => r('b'), 60))); const p3 = runner.enqueue(() => new Promise((r) => setTimeout(() => r('c'), 60))); // allow the runner to start tasks await new Promise((r) => setImmediate(r)); const statusNow = runner.getStatus(); (0, vitest_1.expect)(statusNow.concurrency).toBe(concurrency); (0, vitest_1.expect)(statusNow.running).toBeLessThanOrEqual(concurrency); (0, vitest_1.expect)(statusNow.queued).toBeGreaterThanOrEqual(0); await Promise.all([p1, p2, p3]); const statusAfter = runner.getStatus(); (0, vitest_1.expect)(statusAfter.queued).toBe(0); (0, vitest_1.expect)(statusAfter.running).toBe(0); (0, vitest_1.expect)(statusAfter.completed).toBe(3); runner.stop(); }); });