import { describe, it, expect, vi, beforeEach } from 'vitest' // Mock hermes-cli vi.mock('../../packages/server/src/services/hermes/hermes-cli', () => ({ listProfiles: vi.fn(), getProfile: vi.fn(), createProfile: vi.fn(), deleteProfile: vi.fn(), renameProfile: vi.fn(), useProfile: vi.fn(), stopGateway: vi.fn(), startGateway: vi.fn(), startGatewayBackground: vi.fn(), setupReset: vi.fn(), exportProfile: vi.fn(), importProfile: vi.fn(), })) import * as hermesCli from '../../packages/server/src/services/hermes/hermes-cli' describe('Profile Routes', () => { beforeEach(() => { vi.clearAllMocks() }) describe('ensureApiServerConfig (via active profile switch)', () => { it('should inject api_server config when missing', async () => { // This tests the logic that profiles.ts ensures api_server config exists // We test the ensureApiServerConfig behavior indirectly through the module const { existsSync, readFileSync, writeFileSync } = await import('fs') vi.mock('fs', () => ({ existsSync: vi.fn().mockReturnValue(true), readFileSync: vi.fn().mockReturnValue('platforms: {}'), writeFileSync: vi.fn(), createReadStream: vi.fn(), unlinkSync: vi.fn(), mkdirSync: vi.fn(), copyFileSync: vi.fn(), mkdir: vi.fn(), writeFile: vi.fn(), })) }) }) describe('hermes-cli wrapper', () => { it('listProfiles returns array', async () => { const mockProfiles = [{ name: 'default', active: true }] vi.mocked(hermesCli.listProfiles).mockResolvedValue(mockProfiles as any) const result = await hermesCli.listProfiles() expect(result).toEqual(mockProfiles) }) it('getProfile returns profile detail', async () => { const mockDetail = { name: 'default', path: '/tmp/default' } vi.mocked(hermesCli.getProfile).mockResolvedValue(mockDetail as any) const result = await hermesCli.getProfile('default') expect(result).toEqual(mockDetail) expect(hermesCli.getProfile).toHaveBeenCalledWith('default') }) it('createProfile calls CLI with name and clone flag', async () => { vi.mocked(hermesCli.createProfile).mockResolvedValue('Profile created') await hermesCli.createProfile('test', true) expect(hermesCli.createProfile).toHaveBeenCalledWith('test', true) }) it('deleteProfile calls CLI with name', async () => { vi.mocked(hermesCli.deleteProfile).mockResolvedValue(true) await hermesCli.deleteProfile('test') expect(hermesCli.deleteProfile).toHaveBeenCalledWith('test') }) it('renameProfile calls CLI with old and new name', async () => { vi.mocked(hermesCli.renameProfile).mockResolvedValue(true) await hermesCli.renameProfile('old', 'new') expect(hermesCli.renameProfile).toHaveBeenCalledWith('old', 'new') }) }) })