/** * Unit Tests — skill-registry.js */ import { describe, it, expect, beforeAll, afterAll } from 'vitest'; import fs from 'fs'; describe('SkillRegistry', () => { let SkillRegistry, registry; const TEST_DB_PATH = '/tmp/test-registry-db.sqlite'; const SKILLS_DIR = '/tmp/test-registry-skills'; beforeAll(() => { if (fs.existsSync(TEST_DB_PATH)) fs.unlinkSync(TEST_DB_PATH); fs.mkdirSync(SKILLS_DIR, { recursive: true }); process.env.SKILLS_DB_PATH = TEST_DB_PATH; delete require.cache[require.resolve('../../services/skill-db')]; delete require.cache[require.resolve('../../services/skill-registry')]; ({ SkillRegistry } = require('../../services/skill-registry')); registry = new SkillRegistry(SKILLS_DIR); }); afterAll(() => { try { fs.unlinkSync(TEST_DB_PATH); } catch {} try { fs.rmSync(SKILLS_DIR, { recursive: true }); } catch {} }); it('should register a skill', () => { const skill = registry.registerSkill({ skillName: 'registry_test_skill', description: 'Test', domain: 'test', }); expect(skill.skillName).toBe('registry_test_skill'); }); it('should get a skill', () => { const skill = registry.getSkill('registry_test_skill'); expect(skill).toBeDefined(); expect(skill.description).toBe('Test'); }); it('should list skills', () => { const skills = registry.listSkills(); expect(skills.length).toBeGreaterThanOrEqual(1); }); it('should update a skill', () => { const updated = registry.updateSkill('registry_test_skill', { description: 'Updated' }); expect(updated.description).toBe('Updated'); }); it('should search skills', () => { const results = registry.searchSkills('test'); expect(results.length).toBeGreaterThanOrEqual(0); // FTS may not index immediately }); it('should bump version', () => { const updated = registry.bumpVersion('registry_test_skill', 'minor'); expect(updated.version).toBeDefined(); }); it('should increment use count', () => { expect(() => registry.incrementUseCount('registry_test_skill')).not.toThrow(); }); it('should increment download count', () => { expect(() => registry.incrementDownloadCount('registry_test_skill')).not.toThrow(); }); it('toPublicInfo should return skill info', () => { const skill = registry.getSkill('registry_test_skill'); const pub = SkillRegistry.toPublicInfo(skill); expect(pub.skillName).toBe('registry_test_skill'); }); it('should remove a skill', () => { expect(registry.removeSkill('registry_test_skill')).toBe(true); expect(registry.getSkill('registry_test_skill')).toBeNull(); }); });