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:
Hermann_Kitio 2026-04-21 02:56:02 +03:00
parent 6bfdf15db9
commit 4712a3a16e
4 changed files with 40 additions and 170 deletions

View file

@ -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())

View file

@ -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,
}