import { describe, it, expect, beforeEach, vi } from 'vitest' import { useToast } from '~/composables/useToast' describe('useToast', () => { beforeEach(() => { vi.useFakeTimers() const { clearAll } = useToast() clearAll() }) it('returns all expected functions', () => { const toast = useToast() expect(typeof toast.showToast).toBe('function') expect(typeof toast.showSuccess).toBe('function') expect(typeof toast.showError).toBe('function') expect(typeof toast.showWarning).toBe('function') expect(typeof toast.showInfo).toBe('function') expect(typeof toast.removeToast).toBe('function') expect(typeof toast.clearAll).toBe('function') }) it('adds a toast with correct properties', () => { const { showToast, toasts } = useToast() const id = showToast('Hello', 'info') expect(toasts.value).toHaveLength(1) expect(toasts.value[0].message).toBe('Hello') expect(toasts.value[0].type).toBe('info') expect(toasts.value[0].visible).toBe(true) expect(toasts.value[0].id).toBe(id) }) it('showSuccess creates a success toast', () => { const { showSuccess, toasts } = useToast() showSuccess('Saved!') expect(toasts.value[0].type).toBe('success') expect(toasts.value[0].message).toBe('Saved!') }) it('showError creates an error toast', () => { const { showError, toasts } = useToast() showError('Failed!') expect(toasts.value[0].type).toBe('error') }) it('showWarning creates a warning toast', () => { const { showWarning, toasts } = useToast() showWarning('Caution!') expect(toasts.value[0].type).toBe('warning') }) it('limits to MAX_TOASTS (3)', () => { const { showToast, toasts } = useToast() showToast('A', 'info') showToast('B', 'info') showToast('C', 'info') showToast('D', 'info') expect(toasts.value).toHaveLength(3) expect(toasts.value[0].message).toBe('B') expect(toasts.value[2].message).toBe('D') }) it('clearAll removes all toasts', () => { const { showToast, toasts, clearAll } = useToast() showToast('A', 'info') showToast('B', 'info') expect(toasts.value.length).toBeGreaterThan(0) clearAll() expect(toasts.value).toHaveLength(0) }) it('shares state across calls (singleton)', () => { const a = useToast() const b = useToast() expect(a.toasts).toBe(b.toasts) }) it('removeToast sets visible to false', () => { const { showToast, toasts, removeToast } = useToast() const id = showToast('Test', 'info') removeToast(id) expect(toasts.value[0].visible).toBe(false) }) })