d650bf9b74
修复 DirectProject 提交时的项目快照空值类型错误 将运行中项目列表移入窗口标题栏并支持展开查看 增加项目内打开项目目录按钮 在账户资产条中直接显示兑换码入口并保留兑换弹窗 补充相关测试、类型检查与产品文档
90 lines
2.6 KiB
TypeScript
90 lines
2.6 KiB
TypeScript
// @vitest-environment jsdom
|
|
|
|
import { cleanup, fireEvent, render, screen } from '@testing-library/react';
|
|
import { afterEach, expect, it, vi } from 'vitest';
|
|
|
|
import { ActiveProjectRunsPanel } from '../src/features/app-shell/ActiveProjectRunsPanel';
|
|
|
|
afterEach(() => cleanup());
|
|
|
|
it('按开始时间展示正在运行的项目并支持进入项目', () => {
|
|
const onOpenProject = vi.fn();
|
|
render(
|
|
<ActiveProjectRunsPanel
|
|
activeTurns={[
|
|
{
|
|
projectPath: 'C:/projects/later',
|
|
projectName: '后开始',
|
|
turnId: 'turn-later',
|
|
startedAt: 200,
|
|
status: 'streaming',
|
|
updatedAt: 220,
|
|
sequence: 2,
|
|
},
|
|
{
|
|
projectPath: 'C:/projects/first',
|
|
projectName: '先开始',
|
|
turnId: 'turn-first',
|
|
startedAt: 100,
|
|
status: 'running',
|
|
updatedAt: 120,
|
|
sequence: 1,
|
|
},
|
|
]}
|
|
onOpenProject={onOpenProject}
|
|
/>,
|
|
);
|
|
|
|
const items = screen.getAllByRole('button');
|
|
expect(items.map((item) => item.textContent?.includes('先开始'))).toEqual([
|
|
true,
|
|
false,
|
|
]);
|
|
fireEvent.click(items[0]);
|
|
expect(onOpenProject).toHaveBeenCalledWith('C:/projects/first');
|
|
});
|
|
|
|
it('读取失败时保留明确的读取提示,不伪装成没有运行项目', () => {
|
|
render(<ActiveProjectRunsPanel activeTurns={[]} readFailed />);
|
|
|
|
expect(screen.getByRole('status').textContent).toBe('未能读取正在运行的项目');
|
|
});
|
|
|
|
it('标题栏入口只显示最后开始的项目,展开后列出全部项目', () => {
|
|
const onOpenProject = vi.fn();
|
|
render(
|
|
<ActiveProjectRunsPanel
|
|
placement="titlebar"
|
|
activeTurns={[
|
|
{
|
|
projectPath: 'C:/projects/first',
|
|
projectName: '先开始',
|
|
turnId: 'turn-first',
|
|
startedAt: 100,
|
|
status: 'running',
|
|
updatedAt: 120,
|
|
sequence: 1,
|
|
},
|
|
{
|
|
projectPath: 'C:/projects/later',
|
|
projectName: '后开始',
|
|
turnId: 'turn-later',
|
|
startedAt: 200,
|
|
status: 'streaming',
|
|
updatedAt: 220,
|
|
sequence: 2,
|
|
},
|
|
]}
|
|
onOpenProject={onOpenProject}
|
|
/>,
|
|
);
|
|
|
|
expect(screen.getByRole('button', { name: /后开始/ })).toBeTruthy();
|
|
expect(screen.queryByRole('menu')).toBeNull();
|
|
fireEvent.click(screen.getByRole('button', { name: /后开始/ }));
|
|
expect(screen.getByRole('menu')).toBeTruthy();
|
|
expect(screen.getAllByRole('menuitem')).toHaveLength(2);
|
|
fireEvent.click(screen.getByRole('menuitem', { name: /先开始/ }));
|
|
expect(onOpenProject).toHaveBeenCalledWith('C:/projects/first');
|
|
});
|