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>
82 lines
2.6 KiB
TypeScript
82 lines
2.6 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import { useConfirm } from '~/composables/useConfirm'
|
|
|
|
describe('useConfirm', () => {
|
|
it('returns confirm function and state', () => {
|
|
const { confirm, confirmState, handleConfirm, handleCancel } = useConfirm()
|
|
expect(typeof confirm).toBe('function')
|
|
expect(typeof handleConfirm).toBe('function')
|
|
expect(typeof handleCancel).toBe('function')
|
|
expect(confirmState.open).toBe(false)
|
|
})
|
|
|
|
it('opens modal with correct options', () => {
|
|
const { confirm, confirmState } = useConfirm()
|
|
// Don't await — we'll manually resolve
|
|
confirm({ message: 'Delete this item?' })
|
|
expect(confirmState.open).toBe(true)
|
|
expect(confirmState.message).toBe('Delete this item?')
|
|
expect(confirmState.title).toBe('Confirmation')
|
|
expect(confirmState.confirmText).toBe('Supprimer')
|
|
expect(confirmState.cancelText).toBe('Annuler')
|
|
expect(confirmState.dangerous).toBe(true)
|
|
// Clean up by canceling
|
|
const { handleCancel } = useConfirm()
|
|
handleCancel()
|
|
})
|
|
|
|
it('resolves true on confirm', async () => {
|
|
const { confirm, handleConfirm } = useConfirm()
|
|
const promise = confirm({ message: 'Confirm?' })
|
|
handleConfirm()
|
|
const result = await promise
|
|
expect(result).toBe(true)
|
|
})
|
|
|
|
it('resolves false on cancel', async () => {
|
|
const { confirm, handleCancel } = useConfirm()
|
|
const promise = confirm({ message: 'Cancel?' })
|
|
handleCancel()
|
|
const result = await promise
|
|
expect(result).toBe(false)
|
|
})
|
|
|
|
it('closes modal after confirm', async () => {
|
|
const { confirm, confirmState, handleConfirm } = useConfirm()
|
|
confirm({ message: 'Test' })
|
|
expect(confirmState.open).toBe(true)
|
|
handleConfirm()
|
|
expect(confirmState.open).toBe(false)
|
|
})
|
|
|
|
it('closes modal after cancel', async () => {
|
|
const { confirm, confirmState, handleCancel } = useConfirm()
|
|
confirm({ message: 'Test' })
|
|
expect(confirmState.open).toBe(true)
|
|
handleCancel()
|
|
expect(confirmState.open).toBe(false)
|
|
})
|
|
|
|
it('supports custom options', () => {
|
|
const { confirm, confirmState, handleCancel } = useConfirm()
|
|
confirm({
|
|
title: 'Custom Title',
|
|
message: 'Custom message',
|
|
confirmText: 'Yes',
|
|
cancelText: 'No',
|
|
dangerous: false,
|
|
})
|
|
expect(confirmState.title).toBe('Custom Title')
|
|
expect(confirmState.confirmText).toBe('Yes')
|
|
expect(confirmState.cancelText).toBe('No')
|
|
expect(confirmState.dangerous).toBe(false)
|
|
handleCancel()
|
|
})
|
|
|
|
it('shares state across calls (singleton)', () => {
|
|
const a = useConfirm()
|
|
const b = useConfirm()
|
|
expect(a.confirmState).toBe(b.confirmState)
|
|
})
|
|
})
|