Cover dashboard route state helpers
This commit is contained in:
@@ -77,6 +77,38 @@ function makeDeps(
|
|||||||
}
|
}
|
||||||
|
|
||||||
describe('web dashboard inbox action routes', () => {
|
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 () => {
|
it('dismisses inbox items and queues paired follow-up intents', async () => {
|
||||||
const dismissTracker = createInboxDismissTracker();
|
const dismissTracker = createInboxDismissTracker();
|
||||||
const task = makePairedTask({ id: 'merge-1', status: 'merge_ready' });
|
const task = makePairedTask({ id: 'merge-1', status: 'merge_ready' });
|
||||||
|
|||||||
@@ -68,6 +68,17 @@ function makeDeps(
|
|||||||
}
|
}
|
||||||
|
|
||||||
describe('web dashboard room message routes', () => {
|
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 () => {
|
it('injects messages and deduplicates repeated request ids', async () => {
|
||||||
const messages: NewMessage[] = [];
|
const messages: NewMessage[] = [];
|
||||||
const queued: Array<{ chatJid: string; groupFolder: string }> = [];
|
const queued: Array<{ chatJid: string; groupFolder: string }> = [];
|
||||||
|
|||||||
Reference in New Issue
Block a user