Spaces:
Runtime error
Runtime error
| import { expect, test } from '@playwright/test' | |
| import { API_KEY_HEADER, createTestAgent, deleteTestAgent } from './helpers' | |
| test.describe('Agent Attribution API', () => { | |
| const cleanup: number[] = [] | |
| test.afterEach(async ({ request }) => { | |
| for (const id of cleanup) { | |
| await deleteTestAgent(request, id).catch(() => {}) | |
| } | |
| cleanup.length = 0 | |
| }) | |
| test('allows self-scope access using x-agent-name attribution header', async ({ request }) => { | |
| const { id, name } = await createTestAgent(request) | |
| cleanup.push(id) | |
| const res = await request.get(`/api/agents/${id}/attribution`, { | |
| 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.access_scope).toBe('self') | |
| }) | |
| test('denies cross-agent attribution access by default', async ({ request }) => { | |
| const primary = await createTestAgent(request) | |
| const other = await createTestAgent(request) | |
| cleanup.push(primary.id, other.id) | |
| const res = await request.get(`/api/agents/${primary.id}/attribution`, { | |
| headers: { ...API_KEY_HEADER, 'x-agent-name': other.name }, | |
| }) | |
| expect(res.status()).toBe(403) | |
| }) | |
| test('allows privileged override for admin caller', async ({ request }) => { | |
| const primary = await createTestAgent(request) | |
| const other = await createTestAgent(request) | |
| cleanup.push(primary.id, other.id) | |
| const res = await request.get(`/api/agents/${primary.id}/attribution?privileged=1`, { | |
| headers: { ...API_KEY_HEADER, 'x-agent-name': other.name }, | |
| }) | |
| expect(res.status()).toBe(200) | |
| const body = await res.json() | |
| expect(body.access_scope).toBe('privileged') | |
| }) | |
| test('validates section parameter and timeframe hours', async ({ request }) => { | |
| const { id, name } = await createTestAgent(request) | |
| cleanup.push(id) | |
| const sectionRes = await request.get(`/api/agents/${id}/attribution?section=identity&hours=48`, { | |
| headers: { ...API_KEY_HEADER, 'x-agent-name': name }, | |
| }) | |
| expect(sectionRes.status()).toBe(200) | |
| const sectionBody = await sectionRes.json() | |
| expect(sectionBody.timeframe.hours).toBe(48) | |
| expect(sectionBody.identity).toBeDefined() | |
| expect(sectionBody.audit).toBeUndefined() | |
| expect(sectionBody.mutations).toBeUndefined() | |
| expect(sectionBody.cost).toBeUndefined() | |
| const invalidSection = await request.get(`/api/agents/${id}/attribution?section=unknown`, { | |
| headers: { ...API_KEY_HEADER, 'x-agent-name': name }, | |
| }) | |
| expect(invalidSection.status()).toBe(400) | |
| const invalidHours = await request.get(`/api/agents/${id}/attribution?hours=0`, { | |
| headers: { ...API_KEY_HEADER, 'x-agent-name': name }, | |
| }) | |
| expect(invalidHours.status()).toBe(400) | |
| }) | |
| }) | |