import { describe, it, expect, vi, beforeEach } from 'vitest';
import { whoami } from '../../src/tools/whoami.js';
import { createTestConfig } from '../../src/config/index.js';
import type { RegistryApiClient } from '../../src/client/api.js';
import { testAgent1, testAgent1Config, testKeyPair1 } from '../fixtures/keys.js';
describe('tools/whoami', () => {
let mockClient: RegistryApiClient;
const config = createTestConfig(testAgent1Config);
beforeEach(() => {
mockClient = {
whoami: vi.fn(),
} as unknown as RegistryApiClient;
});
it('should return local identity info even when registry fails', async () => {
vi.mocked(mockClient.whoami).mockRejectedValue(new Error('Network error'));
const result = await whoami({}, config, mockClient);
expect(result.origin).toBe(testAgent1Config.origin);
expect(result.keyId).toBe(testAgent1Config.pubkeyId);
expect(result.publicKey).toBeDefined();
expect(result.registryConnected).toBe(false);
expect(result.error).toContain('Failed to connect to registry');
});
it('should return agent info when registry is available', async () => {
vi.mocked(mockClient.whoami).mockResolvedValue({
agent: testAgent1,
key: testAgent1.keys[0]!,
origin: testAgent1.domain!,
});
const result = await whoami({}, config, mockClient);
expect(result.origin).toBe(testAgent1Config.origin);
expect(result.keyId).toBe(testAgent1Config.pubkeyId);
expect(result.registryConnected).toBe(true);
expect(result.agent).toBeDefined();
expect(result.agent?.name).toBe(testAgent1.name);
expect(result.agent?.id).toBe(testAgent1.id);
expect(result.error).toBeUndefined();
});
it('should derive correct public key from private key', async () => {
vi.mocked(mockClient.whoami).mockRejectedValue(new Error('Network error'));
const result = await whoami({}, config, mockClient);
expect(result.publicKey).toBe(testKeyPair1.publicKey);
});
});