fix: preserve complete weekly brief content and date bounds
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
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));
|
||||
});
|
||||
Reference in New Issue
Block a user