| import { beforeEach, describe, expect, it, vi } from 'vitest' |
|
|
| const apiMocks = vi.hoisted(() => ({ |
| list: vi.fn(), |
| open: vi.fn(), |
| })) |
|
|
| vi.mock('../api/openTargets', () => ({ |
| openTargetsApi: apiMocks, |
| })) |
|
|
| describe('openTargetStore', () => { |
| beforeEach(async () => { |
| vi.resetModules() |
| apiMocks.list.mockReset() |
| apiMocks.open.mockReset() |
| }) |
|
|
| it('caches detected targets inside the TTL', async () => { |
| const { useOpenTargetStore } = await import('./openTargetStore') |
| apiMocks.list.mockResolvedValue({ |
| platform: 'darwin', |
| targets: [{ id: 'finder', kind: 'file_manager', label: 'Finder', icon: 'finder', platform: 'darwin' }], |
| primaryTargetId: 'finder', |
| cachedAt: 1, |
| ttlMs: 60_000, |
| }) |
|
|
| await useOpenTargetStore.getState().refreshTargets() |
| await useOpenTargetStore.getState().ensureTargets() |
|
|
| expect(apiMocks.list).toHaveBeenCalledTimes(1) |
| expect(useOpenTargetStore.getState().primaryTargetId).toBe('finder') |
| }) |
|
|
| it('remembers the last successful target for this runtime', async () => { |
| const { useOpenTargetStore } = await import('./openTargetStore') |
| apiMocks.list.mockResolvedValue({ |
| platform: 'darwin', |
| targets: [{ id: 'vscode', kind: 'ide', label: 'VS Code', icon: 'vscode', platform: 'darwin' }], |
| primaryTargetId: 'vscode', |
| cachedAt: 1, |
| ttlMs: 60_000, |
| }) |
| apiMocks.open.mockResolvedValue({ ok: true, targetId: 'vscode', path: '/repo' }) |
|
|
| await useOpenTargetStore.getState().refreshTargets() |
| await useOpenTargetStore.getState().openTarget('vscode', '/repo') |
|
|
| expect(useOpenTargetStore.getState().lastSuccessfulTargetId).toBe('vscode') |
| }) |
| }) |
|
|