import assert from 'node:assert/strict'; import test from 'node:test'; import { diffTouchesRuntimePaths, isReleaseOnlyPath, isReleaseScenario, mergeIncrementalScenarios, } from './incremental.mjs'; test('isReleaseScenario identifies REL family only', () => { assert.equal(isReleaseScenario('REL-02'), true); assert.equal(isReleaseScenario('CHAT-01'), false); }); test('isReleaseOnlyPath accepts release workflow files only', () => { assert.equal(isReleaseOnlyPath('scripts/release-portal-runtime-prod.sh'), true); assert.equal(isReleaseOnlyPath('release-gate/runner.mjs'), true); assert.equal(isReleaseOnlyPath('server.mjs'), false); }); test('diffTouchesRuntimePaths flags runtime-impacting changes', () => { assert.equal( diffTouchesRuntimePaths(['scripts/release-portal-runtime-prod.sh']), false, ); assert.equal( diffTouchesRuntimePaths(['scripts/release-portal-runtime-prod.sh', 'server.mjs']), true, ); }); test('mergeIncrementalScenarios carries forward unchanged scenarios', () => { const merged = mergeIncrementalScenarios({ baselineScenarios: [ { id: 'CHAT-01', status: 'passed', evidence: ['suite=chat'] }, { id: 'REL-02', status: 'passed', evidence: ['old'] }, ], reexecutedScenarios: [ { id: 'REL-02', status: 'passed', evidence: ['new'] }, ], }); assert.equal(merged[0].evidence.includes('carried_forward=true'), true); assert.equal(merged[1].evidence.includes('carried_forward=false'), true); assert.equal(merged[1].evidence.includes('new'), true); });