feat: v0.17.0 — ISS-008 toasts for errors/events + browser notifications
CI / build + unit + e2e (pull_request) Failing after 6m59s
CI / build + unit + e2e (pull_request) Failing after 6m59s
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { MAX_TOASTS, pushToast, type Toast } from './useToasts';
|
||||
|
||||
// ISS-008 (v0.17.0): the toast queue's pure core — append + cap at MAX_TOASTS dropping the
|
||||
// oldest. The hook itself is a thin useState wrapper around this (auto-dismiss timers are
|
||||
// plain setTimeout, covered by e2e via the visible toasts).
|
||||
|
||||
const toast = (id: number, message: string): Toast => ({ id, kind: 'info', message });
|
||||
|
||||
describe('pushToast', () => {
|
||||
it('appends to an empty queue and preserves order', () => {
|
||||
expect(pushToast([], toast(1, 'a'))).toEqual([toast(1, 'a')]);
|
||||
expect(pushToast([toast(1, 'a')], toast(2, 'b'))).toEqual([toast(1, 'a'), toast(2, 'b')]);
|
||||
});
|
||||
|
||||
it('keeps the newest MAX_TOASTS entries, dropping the oldest beyond the cap', () => {
|
||||
let queue: Toast[] = [];
|
||||
for (let id = 1; id <= MAX_TOASTS + 2; id++) queue = pushToast(queue, toast(id, `m${id}`));
|
||||
expect(queue).toEqual([toast(MAX_TOASTS - 1, 'm3'), toast(MAX_TOASTS, 'm4'), toast(MAX_TOASTS + 1, 'm5'), toast(MAX_TOASTS + 2, 'm6')]);
|
||||
});
|
||||
|
||||
it('does not mutate the input queue', () => {
|
||||
const before = [toast(1, 'a')];
|
||||
pushToast(before, toast(2, 'b'));
|
||||
expect(before).toEqual([toast(1, 'a')]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user