import { describe, expect, it, vi } from 'vitest'; import { insertOutboxEvent } from '../../src/core/outbox.js'; import { parseUlid } from '../../src/core/ids.js'; describe('transactional outbox helper', () => { it('writes a complete platform event envelope with an occurrence time', async () => { const query = vi.fn(async (...args: [string, readonly unknown[] | undefined]) => { void args; return { rows: [], rowCount: 1 }; }); const tenantId = parseUlid('01J0000000000000000000000A'); const actorId = parseUlid('01J0000000000000000000001A'); const subjectId = parseUlid('01J0000000000000000000002A'); const correlationId = parseUlid('01J0000000000000000000003A'); await insertOutboxEvent({ query } as never, { tenantId, eventType: 'staff.test.created', subjectType: 'TestSubject', subjectId, actorType: 'user', actorId, payload: { state: 'created' }, correlationId, }); expect(query).toHaveBeenCalledOnce(); const [sql, parameters] = query.mock.calls[0] as unknown as [string, unknown[]]; expect(sql).toContain('causation_id, occurred_at'); expect(parameters[8]).toBe('{"state":"created"}'); expect(parameters[11]).toMatch(/^\d{4}-\d{2}-\d{2}T/); }); it('preserves a source occurrence time for imported or terminal events', async () => { const query = vi.fn(async (...args: [string, readonly unknown[] | undefined]) => { void args; return { rows: [], rowCount: 1 }; }); const occurredAt = '2026-09-24T01:00:00.000Z'; await insertOutboxEvent({ query } as never, { tenantId: parseUlid('01J0000000000000000000000A'), eventType: 'attendance.clock.in', subjectType: 'Employee', subjectId: parseUlid('01J0000000000000000000002A'), actorType: 'service', actorId: parseUlid('01J0000000000000000000001A'), payload: { source: 'terminal' }, correlationId: parseUlid('01J0000000000000000000003A'), occurredAt, }); const parameters = query.mock.calls[0]?.[1] as readonly unknown[]; expect(parameters[11]).toBe(occurredAt); }); });