fix: retain server notifications when local alerts arrive
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {mergeServerNotifications,acknowledgeNotifications} from '../src/services/notifications.js';
|
||||
import {mergeServerNotifications,acknowledgeNotifications,addLocalNotification} from '../src/services/notifications.js';
|
||||
const rows=[{id:'one',baslik:'Tarih değişti',metin:'Yeni tarih',okundu:0,zaman:'2026-09-06T10:00:00Z'}];
|
||||
test('refresh keeps stable notification identities and server unread state without acknowledging delivery',()=>{
|
||||
const once=mergeServerNotifications([{id:'local',title:'Yerel',read:false}],rows);
|
||||
@@ -17,3 +17,20 @@ test('read acknowledgement requires server success and only covers the captured
|
||||
const acknowledged=await acknowledgeNotifications(current,async ids=>{assert.deepEqual(ids,['one']);return {success:true,okundu:1};});
|
||||
assert.deepEqual([...acknowledged],['server:one','local']);assert.equal(acknowledged.has('arrived-later'),false);
|
||||
});
|
||||
|
||||
|
||||
test('local notification bursts preserve every loaded server record and its read state',()=>{
|
||||
const remote=Array.from({length:100},(_,i)=>({id:String(i),baslik:'İhale '+i,metin:'Kaynak bildirimi',okundu:i%2,zaman:'2026-09-06T10:00:00Z'}));
|
||||
let list=mergeServerNotifications([],remote);
|
||||
const before=list.map(row=>({...row}));
|
||||
for(let i=0;i<40;i++)list=addLocalNotification(list,'Yerel '+i,'İşlem sonucu');
|
||||
assert.deepEqual(list.filter(row=>row.serverId),before);
|
||||
const local=list.filter(row=>!row.serverId);
|
||||
assert.equal(local.length,30);
|
||||
assert.equal(local[0].title,'Yerel 39');assert.equal(local.at(-1).title,'Yerel 10');
|
||||
assert.equal(new Set(local.map(row=>row.id)).size,30);
|
||||
const refreshed=mergeServerNotifications(list,remote.map(row=>({...row,okundu:1})));
|
||||
assert.equal(refreshed.filter(row=>row.serverId).length,100);
|
||||
assert.ok(refreshed.filter(row=>row.serverId).every(row=>row.read));
|
||||
assert.deepEqual(refreshed.filter(row=>!row.serverId),local);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user