Files
iofficeai--aionui/tests/unit/settings/AssistantSelectionArea.dom.test.tsx
2026-07-13 13:20:22 +08:00

149 lines
4.0 KiB
TypeScript

/**
* @license
* Copyright 2025 AionUi (aionui.com)
* SPDX-License-Identifier: Apache-2.0
*/
import React from 'react';
import { describe, it, expect, vi } from 'vitest';
import { fireEvent, render, screen } from '@testing-library/react';
import { ConfigProvider } from '@arco-design/web-react';
import type { Assistant } from '@/common/types/agent/assistantTypes';
import AssistantSelectionArea from '@/renderer/pages/guid/components/AssistantSelectionArea';
vi.mock('react-i18next', () => ({
useTranslation: () => ({
t: (_key: string, options?: { defaultValue?: string }) => options?.defaultValue || _key,
}),
}));
vi.mock('@/renderer/utils/platform', () => ({
resolveExtensionAssetUrl: vi.fn(() => null),
}));
describe('AssistantSelectionArea', () => {
it('returns the real assistant id when a pill is selected', () => {
const onSelectAssistant = vi.fn();
render(
<ConfigProvider>
<AssistantSelectionArea
selectedAssistantId='cowork'
assistants={assistants()}
localeKey='en-US'
onSelectAssistant={onSelectAssistant}
/>
</ConfigProvider>
);
fireEvent.click(screen.getByTestId('preset-pill-writer'));
expect(onSelectAssistant).toHaveBeenCalledWith('writer');
});
it('renders assistant pills in sort_order order', () => {
render(
<ConfigProvider>
<AssistantSelectionArea
selectedAssistantId='cowork'
assistants={assistants()}
localeKey='en-US'
onSelectAssistant={vi.fn()}
/>
</ConfigProvider>
);
const presetPills = screen
.getAllByTestId(/preset-pill-/)
.map((element) => element.getAttribute('data-testid')?.replace('preset-pill-', ''));
expect(presetPills).toEqual(['writer', 'cowork']);
});
it('prefers localized assistant names for the active locale', () => {
render(
<ConfigProvider>
<AssistantSelectionArea
selectedAssistantId='academic-paper'
assistants={[
{
id: 'academic-paper',
source: 'builtin',
name: 'Academic Paper',
name_i18n: {
'zh-CN': '学术论文助手',
},
description_i18n: {},
enabled: true,
sort_order: 1,
preset_agent_type: 'claude',
enabled_skills: [],
custom_skill_names: [],
disabled_builtin_skills: [],
context_i18n: {},
prompts: ['English prompt'],
prompts_i18n: {
'zh-CN': ['中文提示词'],
},
models: [],
agent_status: 'online',
team_selectable: true,
deletable: false,
},
]}
localeKey='zh-CN'
onSelectAssistant={vi.fn()}
/>
</ConfigProvider>
);
expect(screen.getByText('学术论文助手')).toBeInTheDocument();
expect(screen.queryByText('Academic Paper')).not.toBeInTheDocument();
});
});
function assistants(): Assistant[] {
return [
{
id: 'cowork',
source: 'builtin',
name: 'Cowork',
name_i18n: {},
description_i18n: {},
enabled: true,
sort_order: 20,
preset_agent_type: 'claude',
enabled_skills: [],
custom_skill_names: [],
disabled_builtin_skills: [],
context_i18n: {},
prompts: [],
prompts_i18n: {},
models: [],
agent_status: 'online',
team_selectable: true,
deletable: false,
},
{
id: 'writer',
source: 'user',
name: 'Writer',
name_i18n: {},
description_i18n: {},
enabled: true,
sort_order: 10,
preset_agent_type: 'claude',
enabled_skills: [],
custom_skill_names: [],
disabled_builtin_skills: [],
context_i18n: {},
prompts: [],
prompts_i18n: {},
models: [],
agent_status: 'online',
team_selectable: true,
deletable: true,
},
];
}