50 lines
2.1 KiB
TypeScript
50 lines
2.1 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
import { parseDevicePackageIndex } from '@/lib/device-packages';
|
|
import { createDevicePackageStore } from '@/stores/device-packages';
|
|
|
|
const installed = {
|
|
schemaVersion: 1 as const,
|
|
packageId: 'pi-web-search',
|
|
displayName: 'Pi Web Search',
|
|
resolvedVersion: '1.2.3',
|
|
source: { kind: 'npm' as const, requested: 'npm:pi-web-search', resolved: 'npm:pi-web-search@1.2.3' },
|
|
kind: 'mixed' as const,
|
|
skillEntries: [{ id: 'pi-web-search', entryPath: 'skills/pi-web-search/SKILL.md' }],
|
|
extensionEntries: ['extensions/web-search.ts'],
|
|
enabled: true,
|
|
confirmedExecutableCode: true,
|
|
installedAt: '2026-09-02T00:00:00.000Z',
|
|
};
|
|
|
|
describe('device package Renderer boundary', () => {
|
|
it('parses only the bounded device package projection', () => {
|
|
expect(parseDevicePackageIndex({
|
|
schemaVersion: 1, generation: 3, packages: [installed],
|
|
})).toEqual({ schemaVersion: 1, generation: 3, packages: [installed] });
|
|
expect(() => parseDevicePackageIndex({
|
|
schemaVersion: 1, generation: 3, packages: [{ ...installed, packageRoot: 'C:\\private' }],
|
|
})).toThrow('device package');
|
|
});
|
|
|
|
it('does not let an older refresh overwrite a later device mutation', async () => {
|
|
let resolveRead!: (value: unknown) => void;
|
|
const read = vi.fn(() => new Promise<unknown>((resolve) => { resolveRead = resolve; }));
|
|
const setEnabled = vi.fn().mockResolvedValue({
|
|
schemaVersion: 1, generation: 4, packages: [{ ...installed, enabled: false }],
|
|
});
|
|
const store = createDevicePackageStore({
|
|
read: async () => parseDevicePackageIndex(await read()),
|
|
setEnabled: async () => parseDevicePackageIndex(await setEnabled()),
|
|
uninstall: vi.fn(),
|
|
});
|
|
const staleRead = store.getState().load();
|
|
await store.getState().setEnabled('pi-web-search', false);
|
|
resolveRead({ schemaVersion: 1, generation: 3, packages: [installed] });
|
|
await staleRead;
|
|
|
|
expect(store.getState().index).toMatchObject({
|
|
generation: 4, packages: [{ packageId: 'pi-web-search', enabled: false }],
|
|
});
|
|
});
|
|
});
|