mirror of
https://github.com/azaion/ui.git
synced 2026-06-21 15:31:11 +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>
45 lines
1.9 KiB
TypeScript
45 lines
1.9 KiB
TypeScript
import { test, expect } from '@playwright/test'
|
|
|
|
// AZ-470 — e2e companion for panel-width rehydration on reload (FT-P-38).
|
|
//
|
|
// FT-P-38 is the e2e-only AC for AZ-470 (the fast tests cover the debounce
|
|
// and body-shape ACs). This test will skip until production wires the
|
|
// rehydration path; today it captures the drift via `test.fail`.
|
|
|
|
test.describe('AZ-470 — panel-width rehydration (e2e companion)', () => {
|
|
test.fail('AC-3 (FT-P-38) — rehydration on reload (drift — production has no writer)', async ({ page }) => {
|
|
await page.goto('/annotations')
|
|
const dividers = page.locator('div.cursor-col-resize')
|
|
if ((await dividers.count().catch(() => 0)) === 0) {
|
|
test.skip(true, 'No resizable divider rendered (annotations page not seeded?)')
|
|
}
|
|
// Capture initial widths (rendered defaults today).
|
|
const panels = page.locator('div.bg-az-panel.shrink-0')
|
|
const initialLeft = parseFloat(
|
|
(await panels.first().evaluate((el: HTMLElement) => el.style.width)) || '0',
|
|
)
|
|
|
|
// Drag the left divider by +50 px.
|
|
const divider = dividers.first()
|
|
const box = await divider.boundingBox()
|
|
if (!box) test.skip(true, 'Divider has no bounding box (display:none?)')
|
|
await page.mouse.move(box!.x + box!.width / 2, box!.y + box!.height / 2)
|
|
await page.mouse.down()
|
|
await page.mouse.move(box!.x + box!.width / 2 + 50, box!.y + box!.height / 2)
|
|
await page.mouse.up()
|
|
|
|
// Reload — production has no PUT, so the new width is forgotten.
|
|
await page.reload()
|
|
await page.waitForLoadState('domcontentloaded')
|
|
|
|
// Spec: rendered widths equal pre-reload widths within ± 1 px.
|
|
const reloadedLeft = parseFloat(
|
|
(await page.locator('div.bg-az-panel.shrink-0').first().evaluate(
|
|
(el: HTMLElement) => el.style.width,
|
|
)) || '0',
|
|
)
|
|
// Drift: reloadedLeft equals constructor default, NOT initialLeft+50.
|
|
expect(Math.abs(reloadedLeft - (initialLeft + 50))).toBeLessThanOrEqual(1)
|
|
})
|
|
})
|