Merges the full git history of Inventory_frontend into the monorepo under frontend/. Removes the submodule in favor of a unified repo. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
84 lines
2.6 KiB
TypeScript
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)
|
|
})
|
|
})
|