import test from 'node:test'; import assert from 'node:assert/strict'; import {bidFirmFields,bidFirmIssues} from '../src/services/bidFirmFields.js'; import {preparationSummary} from '../src/services/preparationSummary.js'; const firm=Object.fromEntries(bidFirmFields.map(f=>[f.k,f.k==='eposta'?'teklif+lab@example.test':'QA metin'])); test('filled but malformed email blocks both firm form and saved preparation summary',()=>{ assert.deepEqual(bidFirmIssues(firm),[]); for(const eposta of ['yanlış','firma@','@firma.com','a b@firma.com','a@@firma.com']){ const firma={...firm,eposta};const issues=bidFirmIssues(firma); assert.equal(issues.length,1);assert.equal(issues[0].k,'eposta'); const summary=preparationSummary({bidDraft:{firma}},{documents:[]}); assert.ok(summary.issues.some(x=>x.target==='firm:eposta'&&x.text===issues[0].message)); } assert.deepEqual(bidFirmIssues({...firm,eposta:' teklif@example.test '}),[]); }); test('whitespace and non-scalar required values are incomplete; optional registry field stays optional',()=>{ for(const field of bidFirmFields.filter(f=>f.zorunlu)){ for(const bad of [' ',null,{},[]])assert.ok(bidFirmIssues({...firm,[field.k]:bad}).some(x=>x.k===field.k)); } assert.deepEqual(bidFirmIssues({...firm,sicilNo:''}),[]); });