Files
COMERCIAL-GTI/maquina-comercial-pessoal/tests/scheduler.test.mjs
T
GustavoandClaude Sonnet 5 417da56bd6 chore: import maquina-comercial-pessoal history via subtree
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

git-subtree-dir: maquina-comercial-pessoal
git-subtree-mainline: f5af038e19
git-subtree-split: a9ef4d776d
2026-09-28 15:50:17 -03:00

71 lines
2.2 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { startOutreachScheduler } from '../src/outreach/scheduler.mjs';
test('scheduler nao sobrepoe ciclos', async () => {
let active = 0;
let maxActive = 0;
let release;
const gate = new Promise((resolve) => { release = resolve; });
const timers = [];
const stop = startOutreachScheduler({
db: {}, whatsapp: {},
runBatch: async () => { active += 1; maxActive = Math.max(maxActive, active); await gate; active -= 1; },
setTimeoutFn: (fn) => { timers.push(fn); return { unref() {} }; },
setIntervalFn: (fn) => { timers.push(fn); return { unref() {} }; },
clearTimeoutFn: () => {}, clearIntervalFn: () => {}
});
timers[0]();
timers[1]();
await new Promise((resolve) => setTimeout(resolve, 1));
assert.equal(maxActive, 1);
release();
await stop();
});
test('stop aborta e aguarda o ciclo ativo', async () => {
let release;
let started;
const gate = new Promise((resolve) => { release = resolve; });
const active = new Promise((resolve) => { started = resolve; });
const timers = [];
let receivedSignal;
const stop = startOutreachScheduler({
db: {}, whatsapp: {},
runBatch: async ({ signal }) => { receivedSignal = signal; started(); await gate; },
setTimeoutFn: (fn) => { timers.push(fn); return { unref() {} }; },
setIntervalFn: (fn) => { timers.push(fn); return { unref() {} }; },
clearTimeoutFn: () => {}, clearIntervalFn: () => {}
});
timers[0]();
await active;
let stopped = false;
const stopping = stop().then(() => { stopped = true; });
await new Promise((resolve) => setTimeout(resolve, 1));
assert.equal(receivedSignal.aborted, true);
assert.equal(stopped, false);
release();
await stopping;
assert.equal(stopped, true);
});
test('scheduler consulta a fila a cada 60 segundos', async () => {
const intervals = [];
const stop = startOutreachScheduler({
db: {},
whatsapp: {},
runBatch: async () => {},
setTimeoutFn: () => ({ unref() {} }),
setIntervalFn: (_fn, ms) => {
intervals.push(ms);
return { unref() {} };
},
clearTimeoutFn: () => {},
clearIntervalFn: () => {}
});
assert.deepEqual(intervals, [60_000]);
await stop();
});