Correspondents/__tests__/api/agents.test.ts

99 lines
3.2 KiB
TypeScript

import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
import { GET } from '@/app/api/agents/route'
import { NextRequest } from 'next/server'
describe('/api/agents', () => {
const originalEnv = { ...process.env }
beforeEach(() => {
// Clean environment before each test
delete process.env.AGENT_1_URL
delete process.env.AGENT_1_NAME
delete process.env.AGENT_1_DESCRIPTION
delete process.env.AGENT_2_URL
delete process.env.AGENT_2_NAME
delete process.env.AGENT_2_DESCRIPTION
})
afterEach(() => {
// Restore environment
process.env = { ...originalEnv }
})
it('returns empty array when no agents are configured', async () => {
const request = new NextRequest('http://localhost:3000/api/agents')
const response = await GET(request)
const data = await response.json()
expect(response.status).toBe(200)
expect(data.agents).toEqual([])
})
it('discovers single agent from environment variables', async () => {
process.env.AGENT_1_URL = 'https://example.com/webhook/1'
process.env.AGENT_1_NAME = 'Test Agent'
process.env.AGENT_1_DESCRIPTION = 'Test Description'
const request = new NextRequest('http://localhost:3000/api/agents')
const response = await GET(request)
const data = await response.json()
expect(response.status).toBe(200)
expect(data.agents).toHaveLength(1)
expect(data.agents[0]).toEqual({
id: 'agent-1',
name: 'Test Agent',
description: 'Test Description',
webhookUrl: 'https://example.com/webhook/1',
})
})
it('discovers multiple agents', async () => {
process.env.AGENT_1_URL = 'https://example.com/webhook/1'
process.env.AGENT_1_NAME = 'First Agent'
process.env.AGENT_1_DESCRIPTION = 'First Description'
process.env.AGENT_2_URL = 'https://example.com/webhook/2'
process.env.AGENT_2_NAME = 'Second Agent'
process.env.AGENT_2_DESCRIPTION = 'Second Description'
const request = new NextRequest('http://localhost:3000/api/agents')
const response = await GET(request)
const data = await response.json()
expect(response.status).toBe(200)
expect(data.agents).toHaveLength(2)
expect(data.agents[0].id).toBe('agent-1')
expect(data.agents[1].id).toBe('agent-2')
})
it('uses empty string for missing description', async () => {
process.env.AGENT_1_URL = 'https://example.com/webhook/1'
process.env.AGENT_1_NAME = 'Test Agent'
// No description set
const request = new NextRequest('http://localhost:3000/api/agents')
const response = await GET(request)
const data = await response.json()
expect(response.status).toBe(200)
expect(data.agents[0].description).toBe('')
})
it('skips agents without names', async () => {
process.env.AGENT_1_URL = 'https://example.com/webhook/1'
// No name set
process.env.AGENT_2_URL = 'https://example.com/webhook/2'
process.env.AGENT_2_NAME = 'Valid Agent'
const request = new NextRequest('http://localhost:3000/api/agents')
const response = await GET(request)
const data = await response.json()
expect(response.status).toBe(200)
expect(data.agents).toHaveLength(1)
expect(data.agents[0].id).toBe('agent-2')
})
})