/** * @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('@arco-design/web-react'); return { ...actual, Message: { useMessage: () => [{ success: vi.fn(), error: vi.fn(), warning: vi.fn() },
], }, }; }); vi.mock('@/renderer/hooks/assistant', () => ({ useAssistantList: () => useAssistantListMock(), useAssistantEditor: (params: unknown) => useAssistantEditorMock(params), })); vi.mock('@/renderer/pages/settings/components/SettingsPageWrapper', () => ({ default: ({ children }: { children: React.ReactNode }) =>
{children}
, })); vi.mock('@/renderer/pages/settings/AssistantSettings/AssistantEditorPage', () => ({ default: () =>
, })); vi.mock('@/renderer/pages/settings/AssistantSettings/AssistantListPanel', () => ({ default: () =>
, })); 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( '@/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( ); expect(screen.getByTestId('assistant-editor-page')).toBeInTheDocument(); expect(screen.queryByTestId('assistant-list-panel')).not.toBeInTheDocument(); }); });