import assert from 'node:assert/strict' import test from 'node:test' import { clearPendingRefreshProjects, createProjectRefreshCoordinator, mergePendingRefreshProjects, } from '../src/app/project-refresh-coordinator.ts' test('project A and B refresh generations do not abort each other', () => { const coordinator = createProjectRefreshCoordinator() const projectA = coordinator.beginProject('project-a') const projectB = coordinator.beginProject('project-b') assert.equal(projectA.signal.aborted, false) assert.equal(projectA.isCurrent(), true) assert.equal(projectB.signal.aborted, false) assert.equal(projectB.isCurrent(), true) const newerProjectA = coordinator.beginProject('project-a') assert.equal(projectA.signal.aborted, true) assert.equal(projectB.signal.aborted, false) assert.equal(newerProjectA.isCurrent(), true) }) test('project B success cannot clear project A pending recovery', () => { let pending = mergePendingRefreshProjects([], ['project-a']) pending = clearPendingRefreshProjects(pending, ['project-b']) assert.deepEqual(pending, ['project-a']) }) test('recovery clears only successful targets and full success clears all', () => { let pending = mergePendingRefreshProjects([], ['project-a', 'project-b']) pending = clearPendingRefreshProjects(pending, ['project-a']) assert.deepEqual(pending, ['project-b']) pending = clearPendingRefreshProjects(pending) assert.deepEqual(pending, []) }) test('full and targeted refreshes supersede only when their coverage overlaps globally', () => { const coordinator = createProjectRefreshCoordinator() const projectA = coordinator.beginProject('project-a') const projectB = coordinator.beginProject('project-b') const full = coordinator.beginFull() assert.equal(projectA.signal.aborted, true) assert.equal(projectB.signal.aborted, true) assert.equal(full.isCurrent(), true) const newerProjectA = coordinator.beginProject('project-a') assert.equal(full.signal.aborted, true) assert.equal(newerProjectA.isCurrent(), true) })