Spaces:
Runtime error
Runtime error
| import { test, expect } from '@playwright/test' | |
| import { API_KEY_HEADER } from './helpers' | |
| test.describe('API Index / Discovery', () => { | |
| test('GET /api/index returns structured catalog', async ({ request }) => { | |
| const res = await request.get('/api/index', { headers: API_KEY_HEADER }) | |
| expect(res.status()).toBe(200) | |
| const body = await res.json() | |
| expect(body).toHaveProperty('version') | |
| expect(body).toHaveProperty('endpoints') | |
| expect(body).toHaveProperty('total_endpoints') | |
| expect(Array.isArray(body.endpoints)).toBe(true) | |
| expect(body.total_endpoints).toBe(body.endpoints.length) | |
| expect(body.total_endpoints).toBeGreaterThan(50) | |
| }) | |
| test('each endpoint has required fields', async ({ request }) => { | |
| const res = await request.get('/api/index', { headers: API_KEY_HEADER }) | |
| const body = await res.json() | |
| for (const ep of body.endpoints) { | |
| expect(ep).toHaveProperty('path') | |
| expect(ep).toHaveProperty('methods') | |
| expect(ep).toHaveProperty('tag') | |
| expect(ep).toHaveProperty('description') | |
| expect(ep).toHaveProperty('auth') | |
| expect(ep.path).toMatch(/^\/api\//) | |
| expect(Array.isArray(ep.methods)).toBe(true) | |
| expect(ep.methods.length).toBeGreaterThan(0) | |
| } | |
| }) | |
| test('known routes are present', async ({ request }) => { | |
| const res = await request.get('/api/index', { headers: API_KEY_HEADER }) | |
| const body = await res.json() | |
| const paths = body.endpoints.map((ep: any) => ep.path) | |
| expect(paths).toContain('/api/tasks') | |
| expect(paths).toContain('/api/agents') | |
| expect(paths).toContain('/api/projects') | |
| expect(paths).toContain('/api/status') | |
| expect(paths).toContain('/api/chat/messages') | |
| expect(paths).toContain('/api/webhooks') | |
| expect(paths).toContain('/api/index') | |
| }) | |
| test('event_stream metadata is present', async ({ request }) => { | |
| const res = await request.get('/api/index', { headers: API_KEY_HEADER }) | |
| const body = await res.json() | |
| expect(body).toHaveProperty('event_stream') | |
| expect(body.event_stream.path).toBe('/api/events') | |
| expect(body.event_stream.protocol).toBe('SSE') | |
| expect(typeof body.event_stream.description).toBe('string') | |
| }) | |
| test('docs metadata is present', async ({ request }) => { | |
| const res = await request.get('/api/index', { headers: API_KEY_HEADER }) | |
| const body = await res.json() | |
| expect(body).toHaveProperty('docs') | |
| expect(body.docs.openapi).toBe('/api/docs') | |
| }) | |
| test('tags are consistent strings', async ({ request }) => { | |
| const res = await request.get('/api/index', { headers: API_KEY_HEADER }) | |
| const body = await res.json() | |
| const tags = new Set(body.endpoints.map((ep: any) => ep.tag)) | |
| // Should have multiple distinct tags | |
| expect(tags.size).toBeGreaterThan(10) | |
| // Key tags exist | |
| expect(tags.has('Tasks')).toBe(true) | |
| expect(tags.has('Agents')).toBe(true) | |
| expect(tags.has('Projects')).toBe(true) | |
| expect(tags.has('Auth')).toBe(true) | |
| expect(tags.has('System')).toBe(true) | |
| }) | |
| }) | |