diff --git a/src/web-dashboard-inbox-routes.test.ts b/src/web-dashboard-inbox-routes.test.ts index 476571a..d40d574 100644 --- a/src/web-dashboard-inbox-routes.test.ts +++ b/src/web-dashboard-inbox-routes.test.ts @@ -77,6 +77,38 @@ function makeDeps( } describe('web dashboard inbox action routes', () => { + it('tracks timestamped and global inbox dismissals separately', () => { + const tracker = createInboxDismissTracker(); + + tracker.dismiss('ci:task-1', '2026-04-26T05:00:00.000Z'); + expect( + tracker.isDismissed({ + id: 'ci:task-1', + lastOccurredAt: '2026-04-26T05:00:00.000Z', + }), + ).toBe(true); + expect( + tracker.isDismissed({ + id: 'ci:task-1', + lastOccurredAt: '2026-04-26T05:05:00.000Z', + }), + ).toBe(false); + + tracker.dismiss('ci:task-2', null); + expect( + tracker.isDismissed({ + id: 'ci:task-2', + lastOccurredAt: '2026-04-26T05:00:00.000Z', + }), + ).toBe(true); + expect( + tracker.isDismissed({ + id: 'ci:task-2', + lastOccurredAt: '2026-04-26T05:05:00.000Z', + }), + ).toBe(true); + }); + it('dismisses inbox items and queues paired follow-up intents', async () => { const dismissTracker = createInboxDismissTracker(); const task = makePairedTask({ id: 'merge-1', status: 'merge_ready' }); diff --git a/src/web-dashboard-room-message-routes.test.ts b/src/web-dashboard-room-message-routes.test.ts index 8bceb0c..9f74098 100644 --- a/src/web-dashboard-room-message-routes.test.ts +++ b/src/web-dashboard-room-message-routes.test.ts @@ -68,6 +68,17 @@ function makeDeps( } describe('web dashboard room message routes', () => { + it('expires the oldest remembered room message ids after the cache limit', () => { + const remember = createRoomMessageIdCache(2); + + expect(remember('room:message-1')).toBe(true); + expect(remember('room:message-1')).toBe(false); + expect(remember('room:message-2')).toBe(true); + expect(remember('room:message-3')).toBe(true); + expect(remember('room:message-1')).toBe(true); + expect(remember('room:message-2')).toBe(true); + }); + it('injects messages and deduplicates repeated request ids', async () => { const messages: NewMessage[] = []; const queued: Array<{ chatJid: string; groupFolder: string }> = [];