fix: require explicit choice for conflicting bid item sources

This commit is contained in:
2026-09-06 09:13:26 +03:00
parent c3264149ea
commit 0d2cf584e7
4 changed files with 63 additions and 10 deletions
+15 -1
View File
@@ -1,7 +1,21 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import {sourceRows,bidSourceSnapshot,restoreBidPrices} from '../src/services/bidSource.js';
import {sourceRows,bidSourceSnapshot,restoreBidPrices,bidSourceOptions} from '../src/services/bidSource.js';
const tender = {ikn:'2026/test',aciklama:'120 gün',items:[{id:1,ad:'Kit',miktar:10,birim:'adet'},{id:2,ad:'Cihaz',miktar:2,birim:'adet'}]};
test('conflicting source inventories require explicit choice and invalidate that choice on change',()=>{
const results={itemsAndSpecs:[{name:'Kit',quantity:'20 adet'}],documentVersion:'v1'};
const options=bidSourceOptions(tender,results);
assert.equal(options.needsSelection,true);
const selection={source:'analysis',signature:options.signature};
assert.equal(bidSourceOptions(tender,results,selection).needsSelection,false);
assert.deepEqual(sourceRows(tender,results,'analysis').map(r=>r.quantity),['20 adet']);
assert.equal(bidSourceOptions(tender,{...results,documentVersion:'v2'},selection).needsSelection,true);
assert.equal(bidSourceOptions({...tender,items:[tender.items[0]]},results,selection).needsSelection,true);
assert.notEqual(bidSourceSnapshot(tender,results),bidSourceSnapshot(tender,{...results,itemsAndSpecs:[{name:'Kit',quantity:'30 adet'}]}));
const matching={itemsAndSpecs:[{name:'Cihaz',quantity:'2 adet'},{name:'Kit',quantity:'10 adet'}]};
assert.equal(bidSourceOptions(tender,matching).conflict,false);
assert.equal(bidSourceOptions({},results).conflict,false);
});
test('reordered source rows retain their own prices without invalidating identical content',()=>{
const original=sourceRows(tender);
const draft={priceSchema:1,pricesBySource:{[original[0].priceKey]:'15',[original[1].priceKey]:'900'}};