Ctrl K
ComunidadGuías…

tests/service-store.test.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import assert from 'node:assert/strict';
import { mkdir, mkdtemp } from 'node:fs/promises';
import { resolve } from 'node:path';
import test from 'node:test';
import { FileServiceStore } from '../src/adapters/storage/service-store.js';
import { pollEvent } from '../src/domain/service-events.js';

async function fixture() {
  await mkdir('.cache/tests', { recursive: true });
  const root = await mkdtemp(resolve('.cache/tests/events-'));
  return { root, data: new FileServiceStore(root) };
}
test('atomic delivery append deduplicates concurrent processes without exposing partial JSON', async () => {
  const { root, data } = await fixture(), other = new FileServiceStore(root);
  const event = pollEvent('owner/repo', 'delivery-1', 'issue', 7);
  const results = await Promise.all([data.enqueue(event, 10), other.enqueue(event, 10)]);
  assert.deepEqual(results.sort(), ['created', 'duplicate']);
  assert.equal((await data.events('owner/repo')).length, 1);
  await assert.rejects(data.enqueue({ ...event, digest: 'different' }, 10), /different evidence/);
  assert.deepEqual(await data.events('other/repo'), []);
});
test('queue capacity, receipt recovery and retention preserve all unfinished evidence', async () => {
  const { root, data } = await fixture();
  const a = pollEvent('owner/repo', 'delivery-1', 'issue', 7), b = pollEvent('owner/repo', 'delivery-2', 'pull', 8);
  await data.enqueue(a, 1);
  await assert.rejects(data.enqueue(b, 1), /full/);
  await data.receipt(a.id, { status: 'processing', attempts: 1, updatedAt: '2020-01-01T00:00:00Z' });
  assert.equal((await new FileServiceStore(root).events('owner/repo'))[0]?.receipt?.status, 'processing');
  assert.equal(await data.prune('owner/repo', '2026-01-01'), 0);
  await data.receipt(a.id, { status: 'dead', attempts: 3, updatedAt: '2020-01-01T00:00:00Z' });
  await data.enqueue(b, 1);
  assert.equal(await data.prune('owner/repo', '2026-01-01'), 0);
  await data.receipt(a.id, { status: 'completed', attempts: 3, updatedAt: '2020-01-01T00:00:00Z' });
  assert.equal(await data.prune('owner/repo', '2026-01-01'), 1);
  assert.equal((await data.events('owner/repo'))[0]?.event.id, b.id);
});