mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-31 04:12:10 +03:00
* feat(homolog): scaffolding da suíte de homologação E2E (deps + npm run homolog) * feat(homolog): L0 avaliador de paridade de deploy (TDD) * feat(homolog): L1a ciclo de vida de API key efêmera (login admin -> create -> revoke) * feat(homolog): L1b suite httpYac de API (models, chat, auth de management, health) * feat(homolog): L1c checker SSE de streaming real (TDD no parser) * feat(homolog): L2 smoke de providers reais via promptfoo gerado do catálogo * feat(homolog): L4a Playwright homolog config + login storageState * feat(homolog): L4b smoke de todas as rotas do dashboard (descoberta via fs) * feat(homolog): L4c fluxo criar/revogar API key pela UI * fix(homolog): resiliencia real-environment — stream:false no smoke promptfoo, retry de socket keep-alive, key efemera com sufixo unico * feat(homolog): L5 orquestrador npm run homolog + relatorio CTRF unificado * docs(homolog): guia de operacao da suite + fragment de changelog + allowlist env-doc-sync * fix(homolog): paraleliza o sweep de rotas do dashboard (fullyParallel + 8 workers) * fix(homolog): isola outputs crus em homolog-report/raw para nao quebrar o ctrf merge * fix(homolog): outputDir absoluto do reporter CTRF da UI (path relativo escapava do worktree) * chore(quality): allowlist the 5 homolog-suite devDependencies (ctrf-io trio, httpyac, promptfoo) after registry verification * chore(quality): register the homolog Playwright suite as a test-discovery collector (run.mjs -> tests/homolog/ui)
42 lines
1.1 KiB
HTTP
42 lines
1.1 KiB
HTTP
### GET /v1/models autenticado retorna catálogo
|
|
GET {{baseUrl}}/v1/models
|
|
Authorization: Bearer {{apiKey}}
|
|
|
|
?? status == 200
|
|
?? js response.parsedBody.data.length > 0
|
|
|
|
### chat completions non-stream com modelo do tier crítico
|
|
POST {{baseUrl}}/v1/chat/completions
|
|
Authorization: Bearer {{apiKey}}
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"model": "{{smokeModel}}",
|
|
"messages": [{ "role": "user", "content": "Reply with exactly: OK" }],
|
|
"max_tokens": 5,
|
|
"stream": false
|
|
}
|
|
|
|
?? status == 200
|
|
?? js response.parsedBody.choices[0].message.content.length > 0
|
|
|
|
### management sem credencial é rejeitado (401)
|
|
# /v1/models pode ser público (REQUIRE_API_KEY off na VPS), então o teste de auth
|
|
# usa a superfície de management, que exige credencial sempre.
|
|
GET {{baseUrl}}/api/keys
|
|
|
|
?? status == 401
|
|
|
|
### management com bearer inválido é rejeitado (403)
|
|
GET {{baseUrl}}/api/keys
|
|
Authorization: Bearer or-invalid-key-homolog
|
|
|
|
?? status == 403
|
|
|
|
### health é público e saudável
|
|
# httpYac trata o lado direito de `==` como literal — sem aspas.
|
|
GET {{baseUrl}}/api/monitoring/health
|
|
|
|
?? status == 200
|
|
?? js response.parsedBody.status == healthy
|