Files
ihaleist/tests/brief-content.test.mjs

38 lines
1.9 KiB
JavaScript

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { createBriefBuilder, splitBriefText } from '../server/brief-content.mjs';
const parseDate = value => /^\d{4}-\d{2}-\d{2}$/.test(value || '') ? new Date(value+'T00:00:00+03:00') : null;
test('brief includes more than 200 tracked tenders and 15 results without silent caps',()=>{
const keys=Array.from({length:205},(_,i)=>`2026/${i}`), seen=[];
const now=new Date('2026-09-06T21:05:00Z');
const build=createBriefBuilder({trackedKeys:()=>[...keys,keys[0]],
upcoming:(email,tenders,days,clock)=>{assert.equal(clock,now);assert.equal(days,7);return [];},
results:key=>{seen.push(key);return [{baslik:key,sozlesmeTarihi:'2026-09-06'}];},parseDate});
const result=build('test@example.test',[],now);
assert.equal(result.sonuclar.length,205);
assert.equal(new Set(result.sonuclar.map(t=>t.ikn)).size,205);
assert.equal(seen.length,205);
assert.equal(result.bos,false);
assert.equal(result.hafta,'07 Eylül 2026');
});
test('previous seven full Istanbul dates include the first day and exclude current/future dates',()=>{
const build=createBriefBuilder({trackedKeys:()=>['2026/1'],upcoming:()=>[],parseDate,
results:()=>['2026-08-30','2026-08-31','2026-09-06','2026-09-07','2026-09-08','invalid']
.map(date=>({baslik:date,sozlesmeTarihi:date}))});
const result=build('test@example.test',[],new Date('2026-09-06T21:05:00Z'));
assert.deepEqual(result.sonuclar.map(t=>t.baslik),['2026-09-06','2026-08-31']);
});
test('long Turkish/emoji text is preserved exactly without splitting surrogate pairs',()=>{
const text=('Laboratuvar <kit> & test 🧪\n').repeat(600);
const parts=splitBriefText(text);
assert.ok(parts.length>3);
assert.equal(parts.join(''),text);
for(const part of parts){assert.ok(part.length<=3900);assert.ok(part.isWellFormed());}
assert.deepEqual(splitBriefText(''),[]);
assert.throws(()=>splitBriefText('text',1));
});