77 lines
2.4 KiB
TypeScript
77 lines
2.4 KiB
TypeScript
import { test, expect } from '@playwright/test'
|
|
import { API_KEY_HEADER, createTestAgent, deleteTestAgent } from './helpers'
|
|
|
|
test.describe('Agent Diagnostics API', () => {
|
|
const cleanup: number[] = []
|
|
|
|
test.afterEach(async ({ request }) => {
|
|
for (const id of cleanup) {
|
|
await deleteTestAgent(request, id).catch(() => {})
|
|
}
|
|
cleanup.length = 0
|
|
})
|
|
|
|
test('self access is allowed with x-agent-name', async ({ request }) => {
|
|
const { id, name } = await createTestAgent(request)
|
|
cleanup.push(id)
|
|
|
|
const res = await request.get(`/api/agents/${name}/diagnostics?section=summary`, {
|
|
headers: { ...API_KEY_HEADER, 'x-agent-name': name },
|
|
})
|
|
|
|
expect(res.status()).toBe(200)
|
|
const body = await res.json()
|
|
expect(body.agent.name).toBe(name)
|
|
expect(body.summary).toBeDefined()
|
|
})
|
|
|
|
test('cross-agent access is denied by default', async ({ request }) => {
|
|
const a = await createTestAgent(request)
|
|
const b = await createTestAgent(request)
|
|
cleanup.push(a.id, b.id)
|
|
|
|
const res = await request.get(`/api/agents/${a.name}/diagnostics?section=summary`, {
|
|
headers: { ...API_KEY_HEADER, 'x-agent-name': b.name },
|
|
})
|
|
|
|
expect(res.status()).toBe(403)
|
|
})
|
|
|
|
test('cross-agent access is allowed with privileged=1 for admin', async ({ request }) => {
|
|
const a = await createTestAgent(request)
|
|
const b = await createTestAgent(request)
|
|
cleanup.push(a.id, b.id)
|
|
|
|
const res = await request.get(`/api/agents/${a.name}/diagnostics?section=summary&privileged=1`, {
|
|
headers: { ...API_KEY_HEADER, 'x-agent-name': b.name },
|
|
})
|
|
|
|
expect(res.status()).toBe(200)
|
|
const body = await res.json()
|
|
expect(body.agent.name).toBe(a.name)
|
|
expect(body.summary).toBeDefined()
|
|
})
|
|
|
|
test('invalid section query is rejected', async ({ request }) => {
|
|
const { id, name } = await createTestAgent(request)
|
|
cleanup.push(id)
|
|
|
|
const res = await request.get(`/api/agents/${name}/diagnostics?section=summary,invalid`, {
|
|
headers: { ...API_KEY_HEADER, 'x-agent-name': name },
|
|
})
|
|
|
|
expect(res.status()).toBe(400)
|
|
})
|
|
|
|
test('invalid hours query is rejected', async ({ request }) => {
|
|
const { id, name } = await createTestAgent(request)
|
|
cleanup.push(id)
|
|
|
|
const res = await request.get(`/api/agents/${name}/diagnostics?hours=0`, {
|
|
headers: { ...API_KEY_HEADER, 'x-agent-name': name },
|
|
})
|
|
|
|
expect(res.status()).toBe(400)
|
|
})
|
|
})
|