import assert from 'node:assert/strict' import test from 'node:test' import { readFileSync } from 'node:fs' import { join } from 'node:path' import { reconcileReferenceSequence } from '../server/service/reference/reference-reconciliation.ts' test('reports work waiting after the Twin cursor', () => { const got = reconcileReferenceSequence({ source: { first: 1, last: 48 }, cursorSeq: 30, firstSeqSeen: 1 }) assert.equal(got.status, 'gap') assert.equal(got.behind, 18) assert.equal(got.headMissing, undefined) }) test('reports the leading range only when the first received sequence proves it', () => { const got = reconcileReferenceSequence({ source: { first: 1, last: 48 }, cursorSeq: 48, firstSeqSeen: 21 }) assert.equal(got.status, 'gap') assert.equal(got.headMissing, 20) }) test('does not claim alignment when the source range or first received sequence is unknown', () => { assert.equal(reconcileReferenceSequence({ source: { first: 1 }, cursorSeq: 1, firstSeqSeen: 1 }).status, 'unknown') assert.equal(reconcileReferenceSequence({ source: { first: 1, last: 1 }, cursorSeq: 1 }).status, 'unknown') }) test('reports alignment only with both source bounds and a recorded first sequence', () => { const got = reconcileReferenceSequence({ source: { first: 1, last: 48 }, cursorSeq: 48, firstSeqSeen: 1 }) assert.equal(got.status, 'aligned') }) test('registers the durable reconciliation table and its migration', () => { const root = join(import.meta.dirname, '..', 'server') const migration = readFileSync(join(root, 'migrations', '1786800000000-CreateTwinReferenceReconciliations.ts'), 'utf8') const list = readFileSync(join(root, 'migrations', 'index.ts'), 'utf8') const referenceIndex = readFileSync(join(root, 'service', 'reference', 'index.ts'), 'utf8') assert.match(migration, /twin_reference_reconciliations/) assert.match(migration, /uq_twin_reference_reconciliation_0/) assert.match(list, /CreateTwinReferenceReconciliations1786800000000/) assert.match(referenceIndex, /TwinReferenceReconciliation/) })