mirror of
https://github.com/azaion/ui.git
synced 2026-06-21 14:41:10 +00:00
6d03643c2c
ci/woodpecker/push/build-arm Pipeline was successful
- AZ-461 sync image detect URL canary (FT-P-11) PASS;
async-video QUARANTINE (FT-P-12) + X-Refresh-Token drift
(FT-P-13) recorded as it.fails() with controls.
- AZ-464 bulk-validate URL + UI sync (≤2 s) PASS;
body shape drift {annotationIds,status} vs contract
{ids,targetStatus:30} captured as it.fails().
- AZ-470 panel-width debounce + rehydration: entire task
is Phase-B target (useResizablePanel has no PUT writer
/ no rehydration); 3 ACs as it.fails() with controls.
- AZ-472 DetectionClasses load + click + fallback PASS;
hotkey arithmetic P=0 PASS, P=20/P=40 it.fails() for
classes[idx+P]-against-dense-array drift.
Code review: PASS (0 findings). Fast: 18/18 files,
102 passed / 13 skipped. Static: 21/21 PASS.
Co-authored-by: Cursor <cursoragent@cursor.com>
36 lines
1.4 KiB
TypeScript
36 lines
1.4 KiB
TypeScript
import { test, expect } from '@playwright/test'
|
|
|
|
// AZ-472 — e2e companion for FT-P-44 (DetectionClasses load contract).
|
|
//
|
|
// The fast suite covers all four ACs (load + hotkeys + click + fallback);
|
|
// the e2e companion exists so the load path is observed end-to-end against
|
|
// the real `annotations/` service. Hotkey and click paths are not duplicated
|
|
// here — they're already deterministic in JSDOM.
|
|
|
|
test.describe('AZ-472 — DetectionClasses (e2e companion)', () => {
|
|
test('AC-1 (FT-P-44) — GET /api/annotations/classes observed at mount', async ({ page }) => {
|
|
const gets: { url: string }[] = []
|
|
await page.route('**/api/annotations/classes', async (route) => {
|
|
if (route.request().method() === 'GET') {
|
|
gets.push({ url: route.request().url() })
|
|
}
|
|
await route.continue()
|
|
})
|
|
|
|
await page.goto('/annotations')
|
|
|
|
// The DetectionClasses panel renders inside the left sidebar of
|
|
// <AnnotationsPage>. Wait for it to be visible by its localized title.
|
|
const heading = page.getByText(/Classes/i).first()
|
|
if (!(await heading.isVisible({ timeout: 5000 }).catch(() => false))) {
|
|
test.skip(true, 'DetectionClasses panel not rendered (auth gate?)')
|
|
}
|
|
|
|
expect(gets.length).toBeGreaterThan(0)
|
|
for (const g of gets) {
|
|
const path = new URL(g.url).pathname
|
|
expect(path).toBe('/api/annotations/classes')
|
|
}
|
|
})
|
|
})
|