Files
EvoBGP/apps/web/e2e/smoke.spec.ts
T
DenozordecandCursor 6c6e76fca3
CI / changes (push) Successful in 7s
CI / openapi (push) Failing after 40s
CI / web (push) Successful in 56s
CI / commitlint (push) Skipped
CI / go (push) Failing after 34s
CI / bird2 (push) Skipped
CI / release (push) Skipped
feat(ops): protect metrics, rate-limit auth, agent secret timing, e2e smoke
Bearer для /metrics (EVOBGP_METRICS_TOKEN); rate limit /v1/auth/config; constant-time agent secret; OTel stub; Playwright smoke; HTTP_PROXY note; checklist обновлён.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-31 12:29:00 +07:00

33 lines
1.1 KiB
TypeScript

import { test, expect } from '@playwright/test'
/**
* Smoke against local API (+ optional UI). Profile: compose microvps-full.
*
* Env:
* - EVOBGP_E2E_API_URL (default http://127.0.0.1:8080)
* - EVOBGP_E2E_BASE_URL (default http://127.0.0.1:5173)
* - EVOBGP_E2E_TOKEN (default dev)
*/
const apiBase = process.env.EVOBGP_E2E_API_URL ?? 'http://127.0.0.1:8080'
const uiBase = process.env.EVOBGP_E2E_BASE_URL ?? 'http://127.0.0.1:5173'
const token = process.env.EVOBGP_E2E_TOKEN ?? 'dev'
test.describe('EvoBGP smoke', () => {
test('API health and modules list', async ({ request }) => {
const health = await request.get(`${apiBase}/v1/health`)
expect(health.ok()).toBeTruthy()
const mods = await request.get(`${apiBase}/v1/modules?limit=10`, {
headers: { Authorization: `Bearer ${token}` },
})
expect([200, 401]).toContain(mods.status())
})
test('UI loads when available', async ({ page }) => {
test.skip(!process.env.EVOBGP_E2E_UI, 'set EVOBGP_E2E_UI=1 to enable UI smoke')
await page.goto(uiBase)
await page.waitForLoadState('domcontentloaded')
await expect(page.locator('body')).toBeVisible()
})
})