Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> git-subtree-dir: maquina-comercial-pessoal git-subtree-mainline:f5af038e19git-subtree-split:a9ef4d776d
27 lines
1.1 KiB
JavaScript
27 lines
1.1 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { openDb } from '../src/db.mjs';
|
|
import { createJobLease } from '../src/jobs/lease.mjs';
|
|
|
|
test('lease marca running e atualiza heartbeat ate cleanup', () => {
|
|
const db = openDb(':memory:');
|
|
const id = Number(db.prepare("INSERT INTO exports (tipo, status) VALUES ('excel', 'pending')").run().lastInsertRowid);
|
|
let tick;
|
|
let cleared = false;
|
|
const lease = createJobLease({
|
|
db, table: 'exports', id, ownerToken: 'owner-1', pid: 123,
|
|
setInterval: (fn) => { tick = fn; return 7; },
|
|
clearInterval: (timer) => { assert.equal(timer, 7); cleared = true; }
|
|
});
|
|
const first = db.prepare('SELECT status, pid, owner_token, heartbeat_at FROM exports WHERE id = ?').get(id);
|
|
assert.equal(first.status, 'running');
|
|
assert.equal(first.pid, 123);
|
|
assert.equal(first.owner_token, 'owner-1');
|
|
db.prepare("UPDATE exports SET heartbeat_at = '2000-01-01 00:00:00' WHERE id = ?").run(id);
|
|
tick();
|
|
assert.notEqual(db.prepare('SELECT heartbeat_at FROM exports WHERE id = ?').get(id).heartbeat_at, '2000-01-01 00:00:00');
|
|
lease.close();
|
|
assert.equal(cleared, true);
|
|
db.close();
|
|
});
|