refactor(simulations): supprimer SujetSelector + selectSujet orphelins (FTD-22)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
6bfdf15db9
commit
4712a3a16e
4 changed files with 40 additions and 170 deletions
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Transitions couvertes :
|
||||
* idle → choosing-subject (selectTask success, tâche avec catalogue)
|
||||
* choosing-subject → task-selected (selectSujet)
|
||||
* choosing-subject → task-selected (changeSubject + setStep depuis /sujets)
|
||||
* task-selected → correcting (submitText déclenché)
|
||||
* correcting → done (correctEe success)
|
||||
* correcting → task-selected (correctEe error)
|
||||
|
|
@ -17,7 +17,7 @@ import { MemoryRouter } from 'react-router-dom'
|
|||
import React from 'react'
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
import { useSimulation } from '../useSimulation'
|
||||
import { SimulationFlowProvider } from '../../state/SimulationFlowProvider'
|
||||
import { SimulationFlowProvider, useSimulationFlow } from '../../state/SimulationFlowProvider'
|
||||
import { createSimulation } from '@/entities/production/api'
|
||||
import { correctEe } from '@/entities/report/api'
|
||||
import type { Production } from '@/entities/production/types'
|
||||
|
|
@ -142,11 +142,21 @@ describe('useSimulation — submitText', () => {
|
|||
let resolveCorrect!: (r: Report) => void
|
||||
mockCorrectEe.mockImplementation(() => new Promise(r => { resolveCorrect = r }))
|
||||
|
||||
const { result } = renderHook(() => useSimulation(), { wrapper: createWrapper() })
|
||||
const { result } = renderHook(
|
||||
() => {
|
||||
const sim = useSimulation()
|
||||
const { setStep } = useSimulationFlow()
|
||||
return { ...sim, setStep }
|
||||
},
|
||||
{ wrapper: createWrapper() },
|
||||
)
|
||||
|
||||
act(() => result.current.selectTask({ tache: 'EE_T1', mode: 'entrainement' }))
|
||||
await waitFor(() => expect(result.current.step).toBe('choosing-subject'))
|
||||
act(() => result.current.selectSujet(mockSujet))
|
||||
act(() => {
|
||||
result.current.changeSubject(mockSujet)
|
||||
result.current.setStep('task-selected')
|
||||
})
|
||||
await waitFor(() => expect(result.current.step).toBe('task-selected'))
|
||||
|
||||
act(() => result.current.submitText('Mon texte de production.'))
|
||||
|
|
@ -161,11 +171,21 @@ describe('useSimulation — submitText', () => {
|
|||
mockCreateSimulation.mockResolvedValue(mockProduction)
|
||||
mockCorrectEe.mockRejectedValue({ code: 'SIMULATION_NOT_FOUND', message: 'Not found' })
|
||||
|
||||
const { result } = renderHook(() => useSimulation(), { wrapper: createWrapper() })
|
||||
const { result } = renderHook(
|
||||
() => {
|
||||
const sim = useSimulation()
|
||||
const { setStep } = useSimulationFlow()
|
||||
return { ...sim, setStep }
|
||||
},
|
||||
{ wrapper: createWrapper() },
|
||||
)
|
||||
|
||||
act(() => result.current.selectTask({ tache: 'EE_T1', mode: 'entrainement' }))
|
||||
await waitFor(() => expect(result.current.step).toBe('choosing-subject'))
|
||||
act(() => result.current.selectSujet(mockSujet))
|
||||
act(() => {
|
||||
result.current.changeSubject(mockSujet)
|
||||
result.current.setStep('task-selected')
|
||||
})
|
||||
await waitFor(() => expect(result.current.step).toBe('task-selected'))
|
||||
|
||||
act(() => result.current.submitText('Mon texte.')
|
||||
|
|
@ -188,11 +208,21 @@ describe('useSimulation — reset', () => {
|
|||
it('reset depuis task-selected remet step à idle et production à null', async () => {
|
||||
mockCreateSimulation.mockResolvedValue(mockProduction)
|
||||
|
||||
const { result } = renderHook(() => useSimulation(), { wrapper: createWrapper() })
|
||||
const { result } = renderHook(
|
||||
() => {
|
||||
const sim = useSimulation()
|
||||
const { setStep } = useSimulationFlow()
|
||||
return { ...sim, setStep }
|
||||
},
|
||||
{ wrapper: createWrapper() },
|
||||
)
|
||||
|
||||
act(() => result.current.selectTask({ tache: 'EE_T1', mode: 'entrainement' }))
|
||||
await waitFor(() => expect(result.current.step).toBe('choosing-subject'))
|
||||
act(() => result.current.selectSujet(mockSujet))
|
||||
act(() => {
|
||||
result.current.changeSubject(mockSujet)
|
||||
result.current.setStep('task-selected')
|
||||
})
|
||||
await waitFor(() => expect(result.current.step).toBe('task-selected'))
|
||||
|
||||
act(() => result.current.reset())
|
||||
|
|
|
|||
|
|
@ -11,19 +11,11 @@
|
|||
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
import { useSimulationFlow } from '../state/SimulationFlowProvider'
|
||||
import type { SujetData } from '@/entities/production/types'
|
||||
|
||||
export function useSimulation() {
|
||||
const navigate = useNavigate()
|
||||
const flow = useSimulationFlow()
|
||||
|
||||
/** Sélectionne un sujet puis passe à la saisie (utilisé depuis /sujets). */
|
||||
function selectSujet(sujet: SujetData): void {
|
||||
flow.changeSubject(sujet)
|
||||
flow.setStep('task-selected')
|
||||
navigate('/simulation/ee')
|
||||
}
|
||||
|
||||
/** Retour à /sujets depuis SimulationForm (bouton "Changer de sujet"). */
|
||||
function goToSubjectPicker(): void {
|
||||
flow.setStep('choosing-subject')
|
||||
|
|
@ -42,7 +34,6 @@ export function useSimulation() {
|
|||
selectTask: flow.selectTask,
|
||||
submitText: flow.submitText,
|
||||
changeSubject: flow.changeSubject,
|
||||
selectSujet,
|
||||
goToSubjectPicker,
|
||||
reset: flow.reset,
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue