33 lines
2.3 KiB
JavaScript
33 lines
2.3 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {applyTenderStates,tenderSnapshot,tenderSourceChanges} from '../src/services/tenderState.js';
|
|
import {bidSourceSnapshot} from '../src/services/bidSource.js';
|
|
test('fresh deadline and cancellation changes remain visible without overwriting saved work',()=>{
|
|
const original={id:'old-id',ikn:'2026/1',tarih:'10.09.2026',saat:'10:00',durum:'Açık',documentVersion:'v1'};
|
|
const current={...original,id:'new-source-id',tarih:'12.09.2026',saat:'11:00',durum:'İptal',documentVersion:'v2'};
|
|
const data={takipte:true,notes:[{text:'Firma notu'}],bidDraft:{pricesBySource:{kit:'100'}}};
|
|
const result=applyTenderStates([current],{'2026/1':{snapshot:tenderSnapshot(original),data}})[0];
|
|
assert.equal(result.id,'new-source-id');assert.equal(result.durum,'İptal');
|
|
assert.deepEqual(result.notes,data.notes);assert.deepEqual(result.bidDraft,data.bidDraft);
|
|
assert.deepEqual(result.sourceChanges.map(x=>x.field),['tarih','saat','durum','documentVersion']);
|
|
assert.notEqual(bidSourceSnapshot(original),bidSourceSnapshot({...original,durum:'İptal'}));
|
|
});
|
|
test('unknown legacy fields do not invent a change and a new saved baseline clears comparisons',()=>{
|
|
assert.deepEqual(tenderSourceChanges({tarih:''},{tarih:'12.09.2026',durum:'Açık'}),[]);
|
|
const current={ikn:'2026/2',tarih:'12.09.2026',saat:'11:00',durum:'Açık'};
|
|
const result=applyTenderStates([current],{'2026/2':{snapshot:tenderSnapshot(current),data:{takipte:true}}});
|
|
assert.deepEqual(result[0].sourceChanges,[]);
|
|
});
|
|
|
|
test('winner publication changes the reviewed bid source without destroying saved prices',()=>{
|
|
const original={ikn:'2026/winner',tarih:'10.09.2026',saat:'10:00',durum:'Açık'};
|
|
const draft={pricesBySource:{kit:'100'},reviewedSource:bidSourceSnapshot(original)};
|
|
const awarded={...original,kazananFirma:'QA Kazanan'};
|
|
const result=applyTenderStates([awarded],{[original.ikn]:{snapshot:tenderSnapshot(original),data:{bidDraft:draft,takipte:true}}})[0];
|
|
assert.notEqual(bidSourceSnapshot(result),draft.reviewedSource);
|
|
assert.deepEqual(result.bidDraft,draft);
|
|
const restored=applyTenderStates([],{[original.ikn]:{snapshot:tenderSnapshot(awarded),data:{bidDraft:draft,takipte:true}}})[0];
|
|
assert.equal(restored.kazananFirma,'QA Kazanan');
|
|
assert.equal(bidSourceSnapshot(original),bidSourceSnapshot({...original,kazananFirma:''}));
|
|
});
|