import { beforeEach, describe, expect, it, vi } from 'vitest' import { useProtocolTemplates } from '../../composables/useProtocolTemplates' const STORAGE_KEY = 'mint-custom-protocol-templates' function installLocalStorage() { const storage: Record = {} vi.stubGlobal('localStorage', { get length() { return Object.keys(storage).length }, key: vi.fn((index: number) => Object.keys(storage)[index] ?? null), getItem: vi.fn((key: string) => storage[key] ?? null), setItem: vi.fn((key: string, value: string) => { storage[key] = value }), removeItem: vi.fn((key: string) => { delete storage[key] }), clear: vi.fn(() => { for (const key of Object.keys(storage)) delete storage[key] }), } as unknown as Storage) } describe('useProtocolTemplates', () => { beforeEach(() => { vi.restoreAllMocks() vi.unstubAllGlobals() installLocalStorage() }) it('ignores corrupted custom template storage', () => { localStorage.setItem(STORAGE_KEY, JSON.stringify({ invalid: true })) const templates = useProtocolTemplates() expect(templates.customTemplates.value).toEqual([]) expect(templates.allTemplates.value.length).toBeGreaterThan(0) }) it('filters invalid custom template entries', () => { localStorage.setItem(STORAGE_KEY, JSON.stringify([ { id: 'bad', name: 'Missing parameters', type: 'custom' }, { id: 'custom-valid', name: 'Valid custom step', type: 'custom', parameters: [], }, ])) const templates = useProtocolTemplates() expect(templates.customTemplates.value).toEqual([ { id: 'custom-valid', name: 'Valid custom step', type: 'custom', parameters: [], }, ]) }) })