import { render, screen } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { ReactNode } from 'react' import { PluginConfigPage } from '../plugin-config' import * as pluginApi from '@/lib/plugin-api' const toastMock = vi.fn() vi.mock('@/hooks/use-toast', () => ({ useToast: () => ({ toast: toastMock }), })) vi.mock('@/lib/restart-context', () => ({ RestartProvider: ({ children }: { children: ReactNode }) => <>{children}, useRestart: () => ({ showRestartPrompt: false, markRestartRequired: vi.fn(), clearRestartRequired: vi.fn(), }), })) vi.mock('@/components/restart-overlay', () => ({ RestartOverlay: () => null, })) vi.mock('@/components', () => ({ CodeEditor: ({ value }: { value: string }) =>
{value}
, ListFieldEditor: () =>
list-field-editor
, })) vi.mock('@/lib/plugin-api', () => ({ getInstalledPlugins: vi.fn(), getPluginConfigSchema: vi.fn(), getPluginConfig: vi.fn(), getPluginConfigRaw: vi.fn(), updatePluginConfig: vi.fn(), updatePluginConfigRaw: vi.fn(), resetPluginConfig: vi.fn(), togglePlugin: vi.fn(), })) describe('PluginConfigPage', () => { beforeEach(() => { toastMock.mockReset() vi.mocked(pluginApi.getInstalledPlugins).mockResolvedValue({ success: true, data: [ { id: 'test.emoji', path: '/plugins/test_emoji', manifest: { manifest_version: 2, name: 'Emoji Plugin', version: '1.0.0', description: 'emoji tools', author: { name: 'tester' }, license: 'MIT', host_application: { min_version: '1.0.0' }, }, }, ], }) vi.mocked(pluginApi.getPluginConfigSchema).mockResolvedValue({} as never) vi.mocked(pluginApi.getPluginConfig).mockResolvedValue({} as never) vi.mocked(pluginApi.getPluginConfigRaw).mockResolvedValue({} as never) vi.mocked(pluginApi.updatePluginConfig).mockResolvedValue({} as never) vi.mocked(pluginApi.updatePluginConfigRaw).mockResolvedValue({} as never) vi.mocked(pluginApi.resetPluginConfig).mockResolvedValue({} as never) vi.mocked(pluginApi.togglePlugin).mockResolvedValue({} as never) }) it('shows real plugins and no longer surfaces A_Memorix in plugin config list', async () => { render() expect(await screen.findByText('Emoji Plugin')).toBeInTheDocument() expect(screen.getByText('点击插件查看和编辑配置')).toBeInTheDocument() expect(screen.queryByText(/A_Memorix/i)).not.toBeInTheDocument() }) })