Files
Inventory/tests/composables/useToast.test.ts
Matthieu 634184c2be test: configure Vitest and add 54 unit tests (F6.1, F6.2)
Set up Vitest with happy-dom, mock Nuxt auto-imports via #imports alias.
Add tests for: inventory-types validators (9), apiHelpers (10),
modelUtils (18), useConfirm (8), useToast (9). All 54 tests pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 11:20:28 +01:00

84 lines
2.6 KiB
TypeScript

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)
})
})