/* @vitest-environment jsdom */ import { render, screen } from '@testing-library/react'; import { expect, test } from 'vitest'; import type { CustomWorldWorkSummary } from '../../../packages/shared/src/contracts/customWorldAgent'; import { CustomWorldCreationHub } from './CustomWorldCreationHub'; const noopCreateType = () => {}; const baseDraftItem: CustomWorldWorkSummary = { workId: 'draft:session-1', sourceType: 'agent_session', status: 'draft', title: '潮雾列岛', subtitle: '补齐关键锚点', summary: '玩家是失职返乡的守灯人。', coverImageSrc: null, updatedAt: new Date('2026-04-14T10:00:00.000Z').toISOString(), publishedAt: null, stage: 'object_refining', stageLabel: '待完善草稿', playableNpcCount: 3, landmarkCount: 4, sessionId: 'session-1', profileId: null, canResume: true, canEnterWorld: false, }; test('creation hub reflects updated draft title summary and counts after rerender', () => { const { rerender } = render( {}} onCreateType={noopCreateType} onOpenDraft={() => {}} onEnterPublished={() => {}} />, ); expect(screen.getByText('潮雾列岛')).toBeTruthy(); expect(screen.getByText('玩家是失职返乡的守灯人。')).toBeTruthy(); expect(screen.getByText('角色 3')).toBeTruthy(); expect(screen.getByText('地点 4')).toBeTruthy(); expect(screen.getByRole('button', { name: /角色扮演 RPG/u })).toBeTruthy(); expect(screen.getByRole('button', { name: /大鱼吃小鱼/u })).toBeTruthy(); expect(screen.getByRole('button', { name: /拼图玩法/u })).toBeTruthy(); rerender( {}} onCreateType={noopCreateType} onOpenDraft={() => {}} onEnterPublished={() => {}} />, ); expect(screen.getByText('潮雾列岛·回潮版')).toBeTruthy(); expect(screen.getByText('世界总卡和角色网已经继续长出了新的支线。')).toBeTruthy(); expect(screen.getByText('角色 5')).toBeTruthy(); expect(screen.getByText('地点 6')).toBeTruthy(); }); test('creation hub mixes puzzle works into the same grid and uses puzzle tag to distinguish', () => { render( {}} onCreateType={noopCreateType} onOpenDraft={() => {}} onEnterPublished={() => {}} onOpenPuzzleDetail={() => {}} />, ); expect(screen.getByText('潮雾列岛')).toBeTruthy(); expect(screen.getByText('沉钟拼图')).toBeTruthy(); expect(screen.getAllByText('拼图').length).toBeGreaterThan(0); expect(screen.queryByText('我的拼图作品')).toBeNull(); }); test('creation hub shows delete action for persisted rpg drafts', () => { render( {}} onCreateType={noopCreateType} onOpenDraft={() => {}} onEnterPublished={() => {}} onDeletePublished={() => {}} />, ); expect(screen.getByRole('button', { name: '删除' })).toBeTruthy(); });