mission-control/tests/docs-knowledge.spec.ts

62 lines
2.0 KiB
TypeScript

import { test, expect } from '@playwright/test'
import { API_KEY_HEADER } from './helpers'
test.describe('Docs Knowledge API', () => {
test('tree/search/content flows for markdown knowledge docs', async ({ request }) => {
const stamp = Date.now()
const path = `knowledge-base/e2e-kb-${stamp}.md`
const content = `# E2E Knowledge ${stamp}\n\nDeployment runbook token: kb-search-${stamp}`
const create = await request.post('/api/memory', {
headers: API_KEY_HEADER,
data: {
action: 'create',
path,
content,
},
})
expect(create.status()).toBe(200)
const tree = await request.get('/api/docs/tree', { headers: API_KEY_HEADER })
expect(tree.status()).toBe(200)
const treeBody = await tree.json()
expect(Array.isArray(treeBody.tree)).toBe(true)
const search = await request.get(`/api/docs/search?q=${encodeURIComponent(`kb-search-${stamp}`)}`, {
headers: API_KEY_HEADER,
})
expect(search.status()).toBe(200)
const searchBody = await search.json()
const found = searchBody.results.find((r: any) => r.path === path)
expect(found).toBeTruthy()
const doc = await request.get(`/api/docs/content?path=${encodeURIComponent(path)}`, {
headers: API_KEY_HEADER,
})
expect(doc.status()).toBe(200)
const docBody = await doc.json()
expect(docBody.path).toBe(path)
expect(docBody.content).toContain(`kb-search-${stamp}`)
const cleanup = await request.delete('/api/memory', {
headers: API_KEY_HEADER,
data: {
action: 'delete',
path,
},
})
expect(cleanup.status()).toBe(200)
})
test('docs APIs require auth', async ({ request }) => {
const tree = await request.get('/api/docs/tree')
expect(tree.status()).toBe(401)
const search = await request.get('/api/docs/search?q=deployment')
expect(search.status()).toBe(401)
const content = await request.get('/api/docs/content?path=knowledge-base/example.md')
expect(content.status()).toBe(401)
})
})