25315299a5
- 新增 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
56 lines
1.8 KiB
TypeScript
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();
|
|
});
|
|
});
|