Files
Inventory/frontend/tests/composables/useConfirm.test.ts
Matthieu 974a4a0781 refactor : merge Inventory_frontend submodule into frontend/ directory
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>
2026-04-01 14:17:57 +02:00

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