import test from 'node:test'; import assert from 'node:assert/strict'; import {REGION_CITIES,matchesRegion,matchesProcurement,savedFilterCriteria} from '../src/services/savedFilterCriteria.js'; import {CITIES_LIST} from '../src/data/constants.js'; test('province-based regions cover all 81 cities exactly once and normalize Turkish names',()=>{ const cities=Object.values(REGION_CITIES).flatMap(value=>value.split(',')); assert.equal(cities.length,81);assert.deepEqual([...cities].sort(),[...CITIES_LIST].sort());assert.equal(new Set(cities).size,81); assert.equal(matchesRegion({sehir:' giresun '},'KARADENİZ BÖLGESİ'),true); assert.equal(matchesRegion({sehir:'Kayseri'},'KARADENİZ BÖLGESİ'),false); assert.equal(matchesRegion({sehir:''},'KARADENİZ BÖLGESİ'),false); }); test('saved criteria preserves all five fields and rejects unrecognized regions',()=>{ assert.deepEqual(savedFilterCriteria({sehir:' Giresun ',bolge:'karadeniz bölgesi',sektor:'Laboratuvar',kurumTipi:'Hastaneler',usul:'Açık İhale'}),{city:'Giresun',region:'KARADENİZ BÖLGESİ',sector:'Laboratuvar',institution:'Hastaneler',procedure:'Açık İhale',keyword:'',institutionName:'',registration:''}); assert.throws(()=>savedFilterCriteria({bolge:'Bilinmeyen'}),/tanınmadı/); assert.throws(()=>savedFilterCriteria({sehir:[]}),/geçersiz/); }); test('saved search text survives serialization independently and malformed values are rejected',()=>{ const criteria=savedFilterCriteria(JSON.parse(JSON.stringify({anahtarKelime:' test ürünü ',kurumAdi:' Kayseri ',ikn:' 2026/1534665 '}))); assert.equal(criteria.keyword,'test ürünü'); assert.equal(criteria.institutionName,'Kayseri'); assert.equal(criteria.registration,'2026/1534665'); for(const key of ['anahtarKelime','kurumAdi','ikn'])assert.throws(()=>savedFilterCriteria({[key]:['invalid']}),/geçersiz/); }); test('procedure filter uses explicit source procedure, not inferred purchase category',()=>{ assert.equal(matchesProcurement({alimTuru:'Mal Alımı',ihaleUsulu:'Açık İhale'},'Açık İhale'),true); assert.equal(matchesProcurement({alimTuru:'Mal Alımı'},'Açık İhale'),false); assert.equal(matchesProcurement({alimTuru:'Doğrudan Temin'},'Doğrudan Temin'),true); });