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:f5af038e19git-subtree-split:a9ef4d776d
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
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();
|
||||
});
|
||||
Reference in New Issue
Block a user