63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
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');
|
|
});
|
|
});
|