// @vitest-environment jsdom import { beforeEach, describe, expect, it, vi } from 'vitest' import { mount, flushPromises } from '@vue/test-utils' const routeState = vi.hoisted(() => ({ query: { profile: 'reviewer', file: 'config.yaml', } as Record, })) const routerPush = vi.hoisted(() => vi.fn()) const mockFilesStore = vi.hoisted(() => ({ currentPath: '', editingFile: null as null | Record, previewFile: null as null | Record, hasUnsavedChanges: false, fetchEntries: vi.fn(async () => {}), openEditor: vi.fn(async () => {}), closeEditor: vi.fn(), })) const mockProfilesStore = vi.hoisted(() => ({ activeProfileName: null as string | null, profiles: [] as Array<{ name: string }>, fetchProfiles: vi.fn(async () => {}), })) vi.mock('vue-router', async (importOriginal) => { const actual = await importOriginal() return { ...actual, useRoute: () => routeState, useRouter: () => ({ push: routerPush }), } }) vi.mock('vue-i18n', () => ({ useI18n: () => ({ t: (key: string) => key }), })) vi.mock('naive-ui', () => ({ useDialog: () => ({ warning: vi.fn() }), })) vi.mock('@/stores/hermes/files', () => ({ useFilesStore: () => mockFilesStore, })) vi.mock('@/stores/hermes/profiles', () => ({ useProfilesStore: () => mockProfilesStore, })) vi.mock('@/components/hermes/files/FileTree.vue', () => ({ default: { name: 'FileTreeStub', props: ['profile'], template: '
' } })) vi.mock('@/components/hermes/files/FileBreadcrumb.vue', () => ({ default: { name: 'FileBreadcrumbStub', template: '
' } })) vi.mock('@/components/hermes/files/FileToolbar.vue', () => ({ default: { name: 'FileToolbarStub', template: '
' } })) vi.mock('@/components/hermes/files/FileList.vue', () => ({ default: { name: 'FileListStub', template: '
' } })) vi.mock('@/components/hermes/files/FileContextMenu.vue', () => ({ default: { name: 'FileContextMenuStub', template: '
' } })) vi.mock('@/components/hermes/files/FileEditor.vue', () => ({ default: { name: 'FileEditorStub', props: ['customClose'], template: '