feat(simulations): choix du sujet — dropdown intégré + bouton aléatoire

This commit is contained in:
Hermann_Kitio 2026-04-21 02:06:08 +03:00
parent 477477b6a6
commit 7902eec042
5 changed files with 193 additions and 29 deletions

View file

@ -2,7 +2,8 @@
* Tests de la state machine useSimulation.
*
* Transitions couvertes :
* idle task-selected (selectTask success)
* idle choosing-subject (selectTask success, tâche avec catalogue)
* choosing-subject task-selected (selectRandom / selectSujet)
* task-selected correcting (submitText déclenché)
* correcting done (correctEe success)
* correcting task-selected (correctEe error)
@ -69,7 +70,7 @@ describe('useSimulation — état initial', () => {
})
describe('useSimulation — selectTask', () => {
it('step passe à task-selected et production est hydratée après succès', async () => {
it('step passe à choosing-subject et production est hydratée pour une tâche avec catalogue', async () => {
mockCreateSimulation.mockResolvedValue(mockProduction)
const { result } = renderHook(() => useSimulation(), { wrapper: createWrapper() })
@ -78,10 +79,24 @@ describe('useSimulation — selectTask', () => {
result.current.selectTask({ tache: 'EE_T1', mode: 'entrainement' })
})
await waitFor(() => expect(result.current.step).toBe('task-selected'))
await waitFor(() => expect(result.current.step).toBe('choosing-subject'))
expect(result.current.production).toEqual(mockProduction)
})
it('step passe directement à task-selected pour EO_T1 (sans catalogue)', async () => {
const eoProduction: Production = { ...mockProduction, tache: 'EO_T1' }
mockCreateSimulation.mockResolvedValue(eoProduction)
const { result } = renderHook(() => useSimulation(), { wrapper: createWrapper() })
act(() => {
result.current.selectTask({ tache: 'EO_T1', mode: 'entrainement' })
})
await waitFor(() => expect(result.current.step).toBe('task-selected'))
expect(result.current.production).toEqual(eoProduction)
})
it('isCreating = true pendant la mutation createSimulation', async () => {
let resolveCreate!: (p: Production) => void
mockCreateSimulation.mockImplementation(() => new Promise(r => { resolveCreate = r }))
@ -109,6 +124,8 @@ describe('useSimulation — submitText', () => {
const { result } = renderHook(() => useSimulation(), { wrapper: createWrapper() })
act(() => result.current.selectTask({ tache: 'EE_T1', mode: 'entrainement' }))
await waitFor(() => expect(result.current.step).toBe('choosing-subject'))
act(() => result.current.selectRandom([]))
await waitFor(() => expect(result.current.step).toBe('task-selected'))
act(() => result.current.submitText('Mon texte de production.'))
@ -126,6 +143,8 @@ describe('useSimulation — submitText', () => {
const { result } = renderHook(() => useSimulation(), { wrapper: createWrapper() })
act(() => result.current.selectTask({ tache: 'EE_T1', mode: 'entrainement' }))
await waitFor(() => expect(result.current.step).toBe('choosing-subject'))
act(() => result.current.selectRandom([]))
await waitFor(() => expect(result.current.step).toBe('task-selected'))
act(() => result.current.submitText('Mon texte.')
@ -151,6 +170,8 @@ describe('useSimulation — reset', () => {
const { result } = renderHook(() => useSimulation(), { wrapper: createWrapper() })
act(() => result.current.selectTask({ tache: 'EE_T1', mode: 'entrainement' }))
await waitFor(() => expect(result.current.step).toBe('choosing-subject'))
act(() => result.current.selectRandom([]))
await waitFor(() => expect(result.current.step).toBe('task-selected'))
act(() => result.current.reset())