| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import assert from 'node:assert/strict';
- import { test } from 'node:test';
- import { startTrackingRetentionWorker } from '../src/tracking-retention.js';
- test('retention worker prunes on startup and interval and stops cleanly', async () => {
- const calls = [];
- const worker = startTrackingRetentionWorker({
- enabled: true,
- days: 45,
- intervalMs: 10,
- prune(options) {
- calls.push(options.days);
- return 1;
- },
- logger: { warn() {} }
- });
- await waitFor(() => calls.length >= 2);
- assert.deepEqual(calls.slice(0, 2), [45, 45]);
- worker.stop();
- const stoppedAt = calls.length;
- await new Promise((resolve) => setTimeout(resolve, 30));
- assert.equal(calls.length, stoppedAt);
- });
- test('retention worker can be disabled', () => {
- let calls = 0;
- const worker = startTrackingRetentionWorker({
- enabled: false,
- prune() {
- calls += 1;
- }
- });
- assert.equal(worker, null);
- assert.equal(calls, 0);
- });
- async function waitFor(predicate, timeoutMs = 500) {
- const startedAt = Date.now();
- while (!predicate()) {
- if (Date.now() - startedAt > timeoutMs) throw new Error('Timed out waiting for retention worker.');
- await new Promise((resolve) => setTimeout(resolve, 5));
- }
- }
|