import test from 'node:test'; import assert from 'node:assert/strict'; import {execFileSync} from 'node:child_process'; import {mkdtempSync,rmSync,existsSync,statSync} from 'node:fs'; import {tmpdir} from 'node:os'; import {join} from 'node:path'; const url=new URL('../server/zeyilname.mjs',import.meta.url).href; test('notifications live in configured user volume, persist, and scope read acknowledgements to owner',()=>{ const dir=mkdtempSync(join(tmpdir(),'ihaleist-notifications-')); const run=code=>JSON.parse(execFileSync(process.execPath,['--input-type=module','-e',`const notifications=await import(${JSON.stringify(url)});${code}`],{ env:{...process.env,IHALEIST_USER_DATA_DIR:dir,IHALEIST_SHARED_DATA_DIR:join(dir,'shared')},encoding:'utf8',timeout:10000,stdio:['ignore','pipe','pipe'] })); try { const initial=run(` const id=notifications.bildirimYaz({email:'owner',tur:'zeyilname',ikn:'2026/1',baslik:'Tarih değişti',metin:'10 Eylül → 12 Eylül'}); const foreign=notifications.okunduIsaretle('other',[id]); console.log(JSON.stringify({id,foreign,owner:notifications.bildirimleriOku('owner'),other:notifications.bildirimleriOku('other')})); `); assert.equal(initial.foreign,0);assert.deepEqual(initial.other,[]);assert.equal(initial.owner[0].okundu,0); assert.ok(existsSync(join(dir,'takip.sqlite')));assert.equal(statSync(join(dir,'takip.sqlite')).mode&0o777,0o600); const next=run(`const changed=notifications.okunduIsaretle('owner',[${JSON.stringify(initial.id)}]);console.log(JSON.stringify({changed,rows:notifications.bildirimleriOku('owner')}));`); assert.equal(next.changed,1);assert.equal(next.rows[0].okundu,1);assert.equal(next.rows[0].metin,'10 Eylül → 12 Eylül'); }finally {rmSync(dir,{recursive:true,force:true});} });