Unify CAD conveyor on / and /details, add RealSense D435i + contact paddle physics, keep items moving through scan, lock 7×10 drop validation, and ship Stage 2 artifacts with production on :3100 (permanent HTTPS still blocked). Co-authored-by: Cursor <cursoragent@cursor.com>
32 lines
1.3 KiB
TypeScript
32 lines
1.3 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { ensureRunning, expectPlaybackControl } from './helpers';
|
|
|
|
test.describe('smoke', () => {
|
|
test('home opens, canvas loads, play works', async ({ page }) => {
|
|
const pageErrors: Error[] = [];
|
|
page.on('pageerror', (err) => pageErrors.push(err));
|
|
|
|
await page.goto('/');
|
|
|
|
const loading = page.locator('.three-loading');
|
|
const canvas = page.locator('canvas');
|
|
await expect(loading.or(canvas).first()).toBeVisible({ timeout: 30_000 });
|
|
await expect(canvas).toBeVisible({ timeout: 60_000 });
|
|
|
|
await expect(page.getByTestId('demo-hud')).toBeVisible();
|
|
// Stage 2B: demo autostarts — Pause is present immediately; Play after pause.
|
|
await expectPlaybackControl(page);
|
|
await ensureRunning(page);
|
|
await expect(page.getByTestId('demo-status')).not.toHaveText('FINISHED');
|
|
|
|
const finished = page.getByTestId('demo-finished');
|
|
if (await finished.isVisible().catch(() => false)) {
|
|
await page.getByTestId('demo-play').click();
|
|
await expect(finished).toBeHidden({ timeout: 10_000 });
|
|
await expect(page.getByTestId('demo-pause')).toBeVisible({ timeout: 10_000 });
|
|
}
|
|
|
|
expect(pageErrors, `pageerrors: ${pageErrors.map((e) => e.message).join('; ')}`).toEqual([]);
|
|
});
|
|
});
|