| import { beforeEach, describe, expect, it, vi } from 'vitest' |
| import { usePluginStore } from './pluginStore' |
| import { pluginsApi } from '../api/plugins' |
|
|
| vi.mock('../api/plugins', () => ({ |
| pluginsApi: { |
| list: vi.fn(), |
| detail: vi.fn(), |
| enable: vi.fn(), |
| disable: vi.fn(), |
| update: vi.fn(), |
| uninstall: vi.fn(), |
| reload: vi.fn(), |
| }, |
| })) |
|
|
| const mockedPluginsApi = vi.mocked(pluginsApi) |
|
|
| describe('pluginStore', () => { |
| beforeEach(() => { |
| vi.clearAllMocks() |
| mockedPluginsApi.list.mockResolvedValue({ |
| plugins: [], |
| marketplaces: [], |
| summary: { total: 0, enabled: 0, errorCount: 0, marketplaceCount: 0 }, |
| }) |
| mockedPluginsApi.reload.mockResolvedValue({ |
| ok: true, |
| summary: { |
| enabled: 1, |
| disabled: 0, |
| skills: 1, |
| agents: 0, |
| hooks: 0, |
| mcpServers: 0, |
| lspServers: 0, |
| errors: 0, |
| }, |
| session: { |
| applied: true, |
| commands: 1, |
| agents: 0, |
| plugins: 1, |
| mcpServers: 0, |
| errors: 0, |
| }, |
| }) |
| usePluginStore.setState({ |
| plugins: [], |
| marketplaces: [], |
| summary: null, |
| selectedPlugin: null, |
| lastReloadSummary: null, |
| isLoading: false, |
| isDetailLoading: false, |
| isApplying: false, |
| error: null, |
| }) |
| }) |
|
|
| it('reloads the active CLI session after enabling a plugin', async () => { |
| mockedPluginsApi.enable.mockResolvedValue({ |
| ok: true, |
| message: 'enabled', |
| }) |
|
|
| const message = await usePluginStore |
| .getState() |
| .enablePlugin('draw@test', 'user', '/workspace/project', 'session-1') |
|
|
| expect(message).toBe('enabled') |
| expect(mockedPluginsApi.enable).toHaveBeenCalledWith({ |
| id: 'draw@test', |
| scope: 'user', |
| }) |
| expect(mockedPluginsApi.reload).toHaveBeenCalledWith( |
| '/workspace/project', |
| 'session-1', |
| ) |
| expect(usePluginStore.getState().lastReloadSummary).toEqual({ |
| enabled: 1, |
| disabled: 0, |
| skills: 1, |
| agents: 0, |
| hooks: 0, |
| mcpServers: 0, |
| lspServers: 0, |
| errors: 0, |
| }) |
| }) |
| }) |
|
|