import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import { assertStageMap, dealStatusForStage, } from '../src/pipelines/pipeline-merge.util'; type S = { id: string; name: string; isWon: boolean; isLost: boolean }; const openA: S = { id: 'a1', name: 'سرنخ', isWon: false, isLost: false }; const wonA: S = { id: 'aW', name: 'برنده', isWon: true, isLost: false }; const lostA: S = { id: 'aL', name: 'از دست‌رفته', isWon: false, isLost: true }; const openB: S = { id: 'b1', name: 'تماس', isWon: false, isLost: false }; const wonB: S = { id: 'bW', name: 'برنده', isWon: true, isLost: false }; const lostB: S = { id: 'bL', name: 'باخت', isWon: false, isLost: true }; describe('pipeline merge stage map', () => { it('rejects incomplete map', () => { assert.throws( () => assertStageMap([openA, wonA], [openB, wonB], { a1: 'b1' }), /همهٔ ستون/, ); }); it('rejects won → open', () => { assert.throws( () => assertStageMap([openA, wonA], [openB, wonB], { a1: 'b1', aW: 'b1', }), /برنده/, ); }); it('rejects lost → open', () => { assert.throws( () => assertStageMap([openA, lostA], [openB, lostB], { a1: 'b1', aL: 'b1', }), /از دست/, ); }); it('accepts valid mapping', () => { assert.doesNotThrow(() => assertStageMap([openA, wonA, lostA], [openB, wonB, lostB], { a1: 'b1', aW: 'bW', aL: 'bL', }), ); }); it('dealStatusForStage', () => { assert.equal(dealStatusForStage(wonB), 'won'); assert.equal(dealStatusForStage(lostB), 'lost'); assert.equal(dealStatusForStage(openB), 'open'); }); });