import { useState } from 'react'; import { fireEvent, render, screen } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; import { describe, expect, it, vi } from 'vitest'; import { PluginServices } from '@/components/plugins/PluginServices'; import { getPluginServiceTab, type PluginServiceTab } from '@/lib/plugin-services'; vi.mock('@/pages/PluginMarketplace', () => ({ PluginMarketplaceCatalog: () =>
发现插件内容
, })); vi.mock('@/pages/MyPlugins', () => ({ MyPlugins: () =>
我的插件内容
, })); vi.mock('@/pages/ProjectPlugins', () => ({ ProjectPlugins: () =>
项目启用内容
, })); function Harness() { const [value, setValue] = useState('project'); return ; } describe('PluginServices', () => { it('keeps discovery, account/device management, and project enablement in one surface', () => { render(); expect(screen.getByRole('tab', { name: '项目启用' })).toHaveAttribute('aria-selected', 'true'); expect(screen.getByText('项目启用内容')).toBeVisible(); fireEvent.mouseDown(screen.getByRole('tab', { name: '发现插件' }), { button: 0, ctrlKey: false }); expect(screen.getByText('发现插件内容')).toBeVisible(); fireEvent.mouseDown(screen.getByRole('tab', { name: '我的插件' }), { button: 0, ctrlKey: false }); expect(screen.getByText('我的插件内容')).toBeVisible(); }); it('defaults invalid and missing deep-link values to project enablement', () => { expect(getPluginServiceTab(null)).toBe('project'); expect(getPluginServiceTab('unknown')).toBe('project'); expect(getPluginServiceTab('discover')).toBe('discover'); expect(getPluginServiceTab('mine')).toBe('mine'); }); });