import { describe, expect, it } from 'vitest'; import type { PuzzleAgentSessionSnapshot } from '../../../packages/shared/src/contracts/puzzleAgentSession'; import { isPuzzleCompileActionReady } from './puzzleDraftGenerationState'; describe('isPuzzleCompileActionReady', () => { it('keeps compile action generating until the draft has a cover image', () => { const session = { sessionId: 'puzzle-session-1', draft: { coverImageSrc: null, levels: [ { generationStatus: 'generating', coverImageSrc: null, }, ], }, } as PuzzleAgentSessionSnapshot; expect(isPuzzleCompileActionReady(session)).toBe(false); }); it('keeps compile action generating when only the selected cover exists', () => { const session = { sessionId: 'puzzle-session-1', draft: { coverImageSrc: '/generated-puzzle-assets/session/cover.png', levels: [ { generationStatus: 'generating', coverImageSrc: '/generated-puzzle-assets/session/cover.png', }, ], }, } as PuzzleAgentSessionSnapshot; expect(isPuzzleCompileActionReady(session)).toBe(false); }); it('treats compile action as ready after all runtime assets exist', () => { const session = { sessionId: 'puzzle-session-1', draft: { coverImageSrc: '/generated-puzzle-assets/session/cover.png', levels: [ { generationStatus: 'ready', coverImageSrc: '/generated-puzzle-assets/session/cover.png', levelSceneImageObjectKey: 'generated-puzzle-assets/session/level-scene.png', uiSpritesheetImageObjectKey: 'generated-puzzle-assets/session/ui-spritesheet.png', levelBackgroundImageObjectKey: 'generated-puzzle-assets/session/level-background.png', }, ], }, } as PuzzleAgentSessionSnapshot; expect(isPuzzleCompileActionReady(session)).toBe(true); }); });