import { describe, expect, test } from 'vitest'; import { createMiniGameDraftGenerationState } from '../../services/miniGameDraftGenerationProgress'; import { shouldTickPlatformGenerationProgressClock } from './platformGenerationProgressClock'; describe('platformGenerationProgressClock', () => { test('ticks while puzzle clear generation is still running', () => { expect( shouldTickPlatformGenerationProgressClock({ selectionStage: 'puzzle-clear-generating', generationState: createMiniGameDraftGenerationState('puzzle-clear'), }), ).toBe(true); }); test('stops ticking after puzzle clear generation is ready or failed', () => { const runningState = createMiniGameDraftGenerationState('puzzle-clear'); expect( shouldTickPlatformGenerationProgressClock({ selectionStage: 'puzzle-clear-generating', generationState: { ...runningState, phase: 'ready' }, }), ).toBe(false); expect( shouldTickPlatformGenerationProgressClock({ selectionStage: 'puzzle-clear-generating', generationState: { ...runningState, phase: 'failed' }, }), ).toBe(false); }); test('ticks for other shared mini game generation stages', () => { expect( shouldTickPlatformGenerationProgressClock({ selectionStage: 'jump-hop-generating', generationState: createMiniGameDraftGenerationState('jump-hop'), }), ).toBe(true); expect( shouldTickPlatformGenerationProgressClock({ selectionStage: 'wooden-fish-generating', generationState: createMiniGameDraftGenerationState('wooden-fish'), }), ).toBe(true); }); test('ticks visual novel generation from its phase source', () => { expect( shouldTickPlatformGenerationProgressClock({ selectionStage: 'visual-novel-generating', visualNovelGenerationStartedAtMs: 1000, visualNovelGenerationPhase: 'generating', }), ).toBe(true); expect( shouldTickPlatformGenerationProgressClock({ selectionStage: 'visual-novel-generating', visualNovelGenerationStartedAtMs: 1000, visualNovelGenerationPhase: 'ready', }), ).toBe(false); }); test('does not tick when no generating stage is active', () => { expect( shouldTickPlatformGenerationProgressClock({ selectionStage: 'platform', generationState: createMiniGameDraftGenerationState('puzzle-clear'), }), ).toBe(false); }); });