feat: prepare Zhinian desktop pilot
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import { act, render, screen } from '@testing-library/react';
|
||||
import { MemoryRouter } from 'react-router-dom';
|
||||
import { Today } from '@/pages/Today';
|
||||
import { useYinianStore } from '@/stores/yinian';
|
||||
import { useYinianSkillsStore } from '@/stores/yinian-skills';
|
||||
import { useSkillsStore } from '@/stores/skills';
|
||||
import { useChatStore } from '@/stores/chat';
|
||||
import { useGatewayStore } from '@/stores/gateway';
|
||||
import i18n from '@/i18n';
|
||||
import type { YinianConfigSnapshot, YinianLocalSkill } from '../../shared/yinian';
|
||||
|
||||
const hotelHangzhou = {
|
||||
@@ -53,9 +57,18 @@ function createLocalSkill(overrides: Partial<YinianLocalSkill>): YinianLocalSkil
|
||||
};
|
||||
}
|
||||
|
||||
function renderToday() {
|
||||
return render(
|
||||
<MemoryRouter>
|
||||
<Today />
|
||||
</MemoryRouter>,
|
||||
);
|
||||
}
|
||||
|
||||
describe('Today page', () => {
|
||||
beforeEach(() => {
|
||||
beforeEach(async () => {
|
||||
vi.clearAllMocks();
|
||||
await i18n.changeLanguage('zh');
|
||||
useYinianStore.setState({
|
||||
status: 'authenticated',
|
||||
session: {
|
||||
@@ -79,22 +92,36 @@ describe('Today page', () => {
|
||||
loading: false,
|
||||
error: null,
|
||||
});
|
||||
useChatStore.setState({
|
||||
sessions: [],
|
||||
sessionLabels: {},
|
||||
sessionLastActivity: {},
|
||||
});
|
||||
useGatewayStore.setState({
|
||||
status: {
|
||||
state: 'stopped',
|
||||
port: 18789,
|
||||
gatewayReady: false,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('shows quick actions and plain status cards when workspace has no entitlements', () => {
|
||||
render(<Today />);
|
||||
it('shows work entry, pinned apps, and quick tools when workspace has no entitlements', () => {
|
||||
renderToday();
|
||||
|
||||
expect(screen.getAllByText('智念企业组织空间').length).toBeGreaterThan(0);
|
||||
expect(screen.getByText('开始对话')).toBeInTheDocument();
|
||||
expect(screen.getByText('管理知识库')).toBeInTheDocument();
|
||||
expect(screen.getByText('管理应用')).toBeInTheDocument();
|
||||
expect(screen.getByText('今天想先做什么?')).toBeInTheDocument();
|
||||
expect(screen.getByText('开始工作')).toBeInTheDocument();
|
||||
expect(screen.getByText('常用应用')).toBeInTheDocument();
|
||||
expect(screen.getByText('智念视频助手')).toBeInTheDocument();
|
||||
expect(screen.getByText('定时任务')).toBeInTheDocument();
|
||||
expect(screen.getByText('知识库')).toBeInTheDocument();
|
||||
expect(screen.queryByText('0/0')).not.toBeInTheDocument();
|
||||
expect(screen.getAllByText('0 个').length).toBeGreaterThan(0);
|
||||
expect(screen.queryByText('需要关注')).not.toBeInTheDocument();
|
||||
expect(screen.queryByText('最近会话')).not.toBeInTheDocument();
|
||||
expect(screen.getByText('最近对话')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('summarizes entitlements with local registry readiness', () => {
|
||||
it('shows recent conversations before generic empty history', () => {
|
||||
useYinianStore.setState({
|
||||
config: createConfig({
|
||||
entitlements: [
|
||||
@@ -162,44 +189,66 @@ describe('Today page', () => {
|
||||
},
|
||||
],
|
||||
});
|
||||
useChatStore.setState({
|
||||
sessions: [
|
||||
{ key: 'agent:main:session-a', updatedAt: Date.now() - 2 * 60_000 },
|
||||
{ key: 'agent:main:session-b', updatedAt: Date.now() - 60 * 60_000 },
|
||||
],
|
||||
sessionLabels: {
|
||||
'agent:main:session-a': '整理本周门店内容',
|
||||
'agent:main:session-b': '又见乌江宣传片',
|
||||
},
|
||||
sessionLastActivity: {
|
||||
'agent:main:session-a': Date.now() - 2 * 60_000,
|
||||
'agent:main:session-b': Date.now() - 60 * 60_000,
|
||||
},
|
||||
});
|
||||
|
||||
render(<Today />);
|
||||
renderToday();
|
||||
|
||||
expect(screen.getByText('管理应用')).toBeInTheDocument();
|
||||
expect(screen.queryByText('2/2')).not.toBeInTheDocument();
|
||||
expect(screen.queryByText('下发 2 个 · 本地 2 个')).not.toBeInTheDocument();
|
||||
expect(screen.getAllByText('2 个').length).toBeGreaterThanOrEqual(2);
|
||||
expect(screen.queryByText(/待处理 1 个/)).not.toBeInTheDocument();
|
||||
expect(screen.getAllByText(/日报生成助手/).length).toBeGreaterThan(0);
|
||||
expect(screen.getByText('整理本周门店内容')).toBeInTheDocument();
|
||||
expect(screen.getByText('又见乌江宣传片')).toBeInTheDocument();
|
||||
expect(screen.queryByText('数据检查助手 有新版本')).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('updates displayed workspace and counters after hotel switch refreshes config', () => {
|
||||
const { rerender } = render(<Today />);
|
||||
const { rerender } = render(
|
||||
<MemoryRouter>
|
||||
<Today />
|
||||
</MemoryRouter>,
|
||||
);
|
||||
expect(screen.getAllByText('智念企业组织空间').length).toBeGreaterThan(0);
|
||||
|
||||
useYinianStore.setState({
|
||||
config: createConfig({
|
||||
hotel: hotelShanghai,
|
||||
entitlements: [
|
||||
{
|
||||
skillId: 'customer-reply-helper',
|
||||
name: '客户回复助手',
|
||||
version: '0.9.0',
|
||||
enabled: true,
|
||||
category: 'guest-comm',
|
||||
triggers: ['manual'],
|
||||
},
|
||||
],
|
||||
}),
|
||||
act(() => {
|
||||
useYinianStore.setState({
|
||||
config: createConfig({
|
||||
hotel: hotelShanghai,
|
||||
entitlements: [
|
||||
{
|
||||
skillId: 'customer-reply-helper',
|
||||
name: '客户回复助手',
|
||||
version: '0.9.0',
|
||||
enabled: true,
|
||||
category: 'guest-comm',
|
||||
triggers: ['manual'],
|
||||
},
|
||||
],
|
||||
}),
|
||||
});
|
||||
useYinianSkillsStore.setState({ localSkills: [] });
|
||||
});
|
||||
useYinianSkillsStore.setState({ localSkills: [] });
|
||||
|
||||
rerender(<Today />);
|
||||
rerender(
|
||||
<MemoryRouter>
|
||||
<Today />
|
||||
</MemoryRouter>,
|
||||
);
|
||||
|
||||
expect(screen.getAllByText('智念增长组织空间').length).toBeGreaterThan(0);
|
||||
expect(screen.queryByText('1/0')).not.toBeInTheDocument();
|
||||
expect(screen.getByText('客户回复助手')).toBeInTheDocument();
|
||||
expect(screen.queryByText(/待处理 1 个/)).not.toBeInTheDocument();
|
||||
expect(screen.queryByText('智念企业组织空间')).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user