import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { clearToasts, dismissToast, showToast, TOAST_TIMEOUT, toasts, useToasts } from '../../src/state/useToasts' beforeEach(() => { vi.useFakeTimers() clearToasts() }) afterEach(() => { clearToasts() vi.useRealTimers() }) describe('toast queue', () => { it('queues newest first with success as the default tone', () => { const first = showToast('Saved') const second = showToast('Failed', 'danger') expect(second).toBeGreaterThan(first) expect(toasts.value.map((item) => [item.text, item.tone])).toEqual([ ['Failed', 'danger'], ['Saved', 'success'], ]) }) it('dismisses each toast after about 4 seconds', () => { expect(TOAST_TIMEOUT).toBe(4000) showToast('one') vi.advanceTimersByTime(1000) showToast('two') vi.advanceTimersByTime(TOAST_TIMEOUT - 1000) expect(toasts.value.map((item) => item.text)).toEqual(['two']) vi.advanceTimersByTime(1000) expect(toasts.value).toEqual([]) }) it('dismisses on request and cancels that toast timer', () => { const id = showToast('bye') const other = showToast('stay') dismissToast(id) expect(toasts.value.map((item) => item.id)).toEqual([other]) dismissToast(id) dismissToast(999_999) expect(vi.getTimerCount()).toBe(1) }) it('clears every toast and timer', () => { showToast('a') showToast('b') clearToasts() expect(toasts.value).toEqual([]) expect(vi.getTimerCount()).toBe(0) expect(useToasts().showToast).toBe(showToast) }) })