feat: Sprint 1 — Playwright e2e + sandbox orchestration (TDD)
Mirror to GitHub / mirror (push) Canceled after 0s

- e2e: Playwright chat-flow (sign up -> chat) with api/web webServer harness
- api: sandbox services subset/media-proxy/manifest/gc + DockerClient contract
- api: SandboxManager orchestrator (fake-Docker tested); /health route
- 53 unit tests green; Playwright e2e green
This commit is contained in:
SinachPat
2026-08-15 20:01:58 +01:00
parent 9733ba6e3c
commit a037b882e9
17 changed files with 376 additions and 0 deletions
+1
View File
@@ -8,6 +8,7 @@
"mirror:time": "tsx golden/src/run-mirror-timing.ts"
},
"devDependencies": {
"@playwright/test": "^1.62.1",
"tsx": "^4.20.3",
"typescript": "^5.9.2",
"vitest": "^3.2.4"
+22
View File
@@ -0,0 +1,22 @@
import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './tests',
fullyParallel: true,
retries: 0,
use: {
baseURL: 'http://localhost:5173',
},
webServer: [
{
command: 'pnpm --filter @wursor/api start',
url: 'http://localhost:3000/health',
reuseExistingServer: !process.env.CI,
},
{
command: 'pnpm --filter @wursor/web dev',
url: 'http://localhost:5173',
reuseExistingServer: !process.env.CI,
},
],
});
+12
View File
@@ -0,0 +1,12 @@
import { test, expect } from '@playwright/test';
test('user signs up and sees the chat interface', async ({ page }) => {
await page.goto('/');
await page.getByLabel('Email').fill(`e2e-${Date.now()}@example.com`);
await page.getByLabel('Password').fill('password123');
await page.getByRole('button', { name: 'Sign up' }).click();
await expect(page.locator('.wursor-chat-input')).toBeVisible();
await expect(page.locator('.wursor-welcome')).toContainText('Describe what you want');
});