diff --git a/apps/ai-game-creator-shell/tests/imageAssetSelector.test.tsx b/apps/ai-game-creator-shell/tests/imageAssetSelector.test.tsx index 02b9627c1..a012f2d60 100644 --- a/apps/ai-game-creator-shell/tests/imageAssetSelector.test.tsx +++ b/apps/ai-game-creator-shell/tests/imageAssetSelector.test.tsx @@ -34,11 +34,12 @@ function renderSelector( value: string | null = null, onChange = vi.fn(), previewUrls: Record = {}, + selectorSprites: typeof sprites = sprites, ) { return render( { await user.keyboard('{Enter}'); expect(onChange).toHaveBeenCalledWith('hero'); }); + + it('closes when the modal backdrop is clicked', async () => { + const user = userEvent.setup(); + renderSelector(); + await user.click(screen.getByRole('button', { name: '选择素材' })); + const dialog = screen.getByRole('dialog', { name: '选择图片素材' }); + const overlay = dialog.parentElement; + expect(overlay).toBeTruthy(); + await user.click(overlay!); + expect(screen.queryByRole('dialog', { name: '选择图片素材' })).toBeNull(); + }); + + it('shows an empty state when no sprites are available', async () => { + const user = userEvent.setup(); + renderSelector(null, vi.fn(), {}, {}); + await user.click(screen.getByRole('button', { name: '选择素材' })); + const dialog = screen.getByRole('dialog', { name: '选择图片素材' }); + expect(within(dialog).getByText('暂无可用素材')).toBeTruthy(); + expect( + within(dialog).getByRole('button', { name: /清除选择/ }), + ).toBeTruthy(); + }); });