154 lines
4.8 KiB
TypeScript
154 lines
4.8 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 AionUi (aionui.com)
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import React from 'react';
|
|
import { describe, expect, it, vi, beforeEach } from 'vitest';
|
|
import { render, screen } from '@testing-library/react';
|
|
import { ConfigProvider } from '@arco-design/web-react';
|
|
import { MemoryRouter } from 'react-router-dom';
|
|
import AssistantSettings from '@/renderer/pages/settings/AssistantSettings';
|
|
|
|
const useAssistantListMock = vi.fn();
|
|
const useAssistantEditorMock = vi.fn();
|
|
|
|
vi.mock('react-i18next', () => ({
|
|
useTranslation: () => ({
|
|
t: (_key: string, options?: { defaultValue?: string }) => options?.defaultValue || _key,
|
|
}),
|
|
}));
|
|
|
|
vi.mock('@arco-design/web-react', async () => {
|
|
const actual = await vi.importActual<typeof import('@arco-design/web-react')>('@arco-design/web-react');
|
|
return {
|
|
...actual,
|
|
Message: {
|
|
useMessage: () => [{ success: vi.fn(), error: vi.fn(), warning: vi.fn() }, <div key='message-context' />],
|
|
},
|
|
};
|
|
});
|
|
|
|
vi.mock('@/renderer/hooks/assistant', () => ({
|
|
useAssistantList: () => useAssistantListMock(),
|
|
useAssistantEditor: (params: unknown) => useAssistantEditorMock(params),
|
|
}));
|
|
|
|
vi.mock('@/renderer/pages/settings/components/SettingsPageWrapper', () => ({
|
|
default: ({ children }: { children: React.ReactNode }) => <div data-testid='settings-wrapper'>{children}</div>,
|
|
}));
|
|
|
|
vi.mock('@/renderer/pages/settings/AssistantSettings/AssistantEditorPage', () => ({
|
|
default: () => <div data-testid='assistant-editor-page' />,
|
|
}));
|
|
|
|
vi.mock('@/renderer/pages/settings/AssistantSettings/AssistantListPanel', () => ({
|
|
default: () => <div data-testid='assistant-list-panel' />,
|
|
}));
|
|
|
|
vi.mock('@/renderer/pages/settings/AssistantSettings/DeleteAssistantModal', () => ({
|
|
default: () => null,
|
|
}));
|
|
|
|
vi.mock('@/renderer/pages/settings/AssistantSettings/SkillConfirmModals', () => ({
|
|
default: () => null,
|
|
}));
|
|
|
|
vi.mock('@/renderer/pages/settings/AssistantSettings/assistantUtils', async () => {
|
|
const actual = await vi.importActual<typeof import('@/renderer/pages/settings/AssistantSettings/assistantUtils')>(
|
|
'@/renderer/pages/settings/AssistantSettings/assistantUtils'
|
|
);
|
|
|
|
return {
|
|
...actual,
|
|
resolveAvatarImageSrc: () => undefined,
|
|
};
|
|
});
|
|
|
|
describe('AssistantSettings', () => {
|
|
beforeEach(() => {
|
|
useAssistantListMock.mockReturnValue({
|
|
assistants: [],
|
|
activeAssistantId: 'assistant-1',
|
|
setActiveAssistantId: vi.fn(),
|
|
activeAssistant: null,
|
|
loadAssistants: vi.fn(),
|
|
reorderAssistants: vi.fn(),
|
|
localeKey: 'en-US',
|
|
});
|
|
|
|
useAssistantEditorMock.mockReturnValue({
|
|
editVisible: true,
|
|
isCreating: false,
|
|
editName: '',
|
|
setEditName: vi.fn(),
|
|
editDescription: '',
|
|
setEditDescription: vi.fn(),
|
|
editAvatar: '',
|
|
setEditAvatar: vi.fn(),
|
|
editAgent: 'claude',
|
|
setEditAgent: vi.fn(),
|
|
editRecommendedPromptsText: '',
|
|
setEditRecommendedPromptsText: vi.fn(),
|
|
defaultModelMode: 'auto',
|
|
setDefaultModelMode: vi.fn(),
|
|
defaultModelValue: '',
|
|
setDefaultModelValue: vi.fn(),
|
|
defaultPermissionMode: 'auto',
|
|
setDefaultPermissionMode: vi.fn(),
|
|
defaultPermissionValue: '',
|
|
setDefaultPermissionValue: vi.fn(),
|
|
defaultSkillsMode: 'fixed',
|
|
setDefaultSkillsMode: vi.fn(),
|
|
defaultMcpMode: 'auto',
|
|
setDefaultMcpMode: vi.fn(),
|
|
availableMcpServers: [],
|
|
selectedMcpIds: [],
|
|
setSelectedMcpIds: vi.fn(),
|
|
editContext: '',
|
|
setEditContext: vi.fn(),
|
|
promptViewMode: 'preview',
|
|
setPromptViewMode: vi.fn(),
|
|
availableSkills: [],
|
|
selectedSkills: [],
|
|
setSelectedSkills: vi.fn(),
|
|
pendingSkills: [],
|
|
setDeletePendingSkillName: vi.fn(),
|
|
setDeleteCustomSkillName: vi.fn(),
|
|
builtinAutoSkills: [],
|
|
disabledBuiltinSkills: [],
|
|
setDisabledBuiltinSkills: vi.fn(),
|
|
handleSave: vi.fn(),
|
|
handleDeleteClick: vi.fn(),
|
|
handleDuplicate: vi.fn(),
|
|
handleDeleteRequest: vi.fn(),
|
|
handleToggleEnabled: vi.fn(),
|
|
handleEdit: vi.fn(),
|
|
handleCreate: vi.fn(),
|
|
deleteConfirmVisible: false,
|
|
setDeleteConfirmVisible: vi.fn(),
|
|
deletePendingSkillName: null,
|
|
deleteCustomSkillName: null,
|
|
customSkills: [],
|
|
setCustomSkills: vi.fn(),
|
|
setPendingSkills: vi.fn(),
|
|
handleDeleteConfirm: vi.fn(),
|
|
setEditVisible: vi.fn(),
|
|
});
|
|
});
|
|
|
|
it('keeps the editor visible when an existing assistant session is open and activeAssistant is temporarily null', () => {
|
|
render(
|
|
<ConfigProvider>
|
|
<MemoryRouter>
|
|
<AssistantSettings />
|
|
</MemoryRouter>
|
|
</ConfigProvider>
|
|
);
|
|
|
|
expect(screen.getByTestId('assistant-editor-page')).toBeInTheDocument();
|
|
expect(screen.queryByTestId('assistant-list-panel')).not.toBeInTheDocument();
|
|
});
|
|
});
|