Files
Genarrative/apps/ai-game-creator-shell/tests/directProjectChatHeader.test.tsx
T
k88936 25315299a5 AGC 发布入口迁到导出产物面板陶泥儿 tab
- 新增 useTaonierTab:接管试玩包导出、发布灰度、构建进度与阻断反馈、发布资料面板开关,状态挂在导出面板根上,切 tab 不丢
- usePanel 接入 taonier slice,TAB_PAGES 把 taonier state 交给 TaonierPage
- 重写 tabs/taonier/Page.tsx:渲染「发布到游戏广场」入口,并按 state 挂发布资料面板与进度/阻断弹窗
- useDirectProjectManifest 额外返回完整 manifest,供陶泥儿 tab 复用
- App.tsx 移除发布相关 state、灰度 effect、requestGamePublish、发布面板与两条弹窗的挂载,以及 export_local_project_package invoke
- 移除 DirectProjectChatHeader 的「发布到游戏广场」按钮,并删掉 DirectProjectChatView / DirectProjectChatBox 的 onRequestGamePublish 透传
- gamePublishFeedback 用例改为从导出面板陶泥儿 tab 进入发布;directProjectChatHeader 用例改为覆盖导出入口与「不再有发布入口」
- 同步权威合同文档:发布入口位置由聊天头改为导出产物面板陶泥儿 tab
2026-10-06 11:24:30 +08:00

56 lines
1.8 KiB
TypeScript

// @vitest-environment jsdom
/**
* DirectProject 聊天头的导出入口。
*
* 发布入口归导出产物面板的陶泥儿 tab,聊天头不再持有;这里只验证导出产物入口按回调渲染,
* 以及没有回调(例如策划聊天面)时不出现点不动的按钮。
*/
import { cleanup, fireEvent, render, screen } from '@testing-library/react';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { DirectProjectChatHeader } from '../src/view/project-development/chat/components/DirectProjectChatHeader/DirectProjectChatHeader';
afterEach(() => {
cleanup();
});
function renderHeader(
overrides: Partial<Parameters<typeof DirectProjectChatHeader>[0]> = {},
) {
const onOpenSettings = vi.fn();
const onRequestExport = vi.fn();
render(
<DirectProjectChatHeader
busy={false}
statusText="就绪"
onOpenSettings={onOpenSettings}
onRequestExport={onRequestExport}
{...overrides}
/>,
);
return { onOpenSettings, onRequestExport };
}
describe('DirectProjectChatHeader', () => {
it('传入导出回调时渲染导出入口并可触发', () => {
const { onRequestExport } = renderHeader();
const exportButton = screen.getByRole('button', { name: '导出产物' });
fireEvent.click(exportButton);
expect(onRequestExport).toHaveBeenCalledTimes(1);
});
it('没有导出回调时不渲染导出入口', () => {
renderHeader({ onRequestExport: undefined });
expect(screen.queryByRole('button', { name: '导出产物' })).toBeNull();
expect(screen.getByRole('button', { name: '设置' })).not.toBeNull();
});
it('不再渲染发布入口', () => {
renderHeader();
expect(screen.queryByRole('button', { name: '发布到游戏广场' })).toBeNull();
});
});