Skip to content

Commit 6f51aa6

Browse files
Fix e2e smoke tests for real leaderboard data
1 parent 6840ae0 commit 6f51aa6

3 files changed

Lines changed: 76 additions & 4 deletions

File tree

web/playwright.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export default defineConfig({
1212
fullyParallel: true,
1313
retries: process.env.CI ? 2 : 0,
1414
reporter: process.env.CI ? "github" : "list",
15+
globalSetup: "./tests/e2e/global-setup.ts",
1516
use: {
1617
baseURL: "http://127.0.0.1:3100",
1718
trace: "on-first-retry"
@@ -27,7 +28,7 @@ export default defineConfig({
2728
WMG_UPLOAD_TOKEN: "e2e-token",
2829
WMG_AUTO_MIGRATE: "true",
2930
WMG_ENABLE_METRICS: "false",
30-
WMG_SEED_DEMO_DATA: "true"
31+
WMG_SEED_DEMO_DATA: "false"
3132
},
3233
url: "http://127.0.0.1:8100/healthz",
3334
reuseExistingServer: !process.env.CI,

web/tests/e2e/global-setup.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import { execFileSync } from "node:child_process";
2+
import path from "node:path";
3+
4+
async function waitFor(url: string, timeoutMs: number): Promise<void> {
5+
const deadline = Date.now() + timeoutMs;
6+
7+
while (Date.now() < deadline) {
8+
try {
9+
const response = await fetch(url);
10+
if (response.ok) {
11+
return;
12+
}
13+
} catch {}
14+
await new Promise((resolve) => setTimeout(resolve, 1000));
15+
}
16+
17+
throw new Error(`Timed out waiting for ${url}`);
18+
}
19+
20+
export default async function globalSetup() {
21+
const repoRoot = path.resolve(__dirname, "../../..");
22+
const pythonExecutable = path.resolve(
23+
repoRoot,
24+
process.env.WMG_E2E_PYTHON ?? ".venv/bin/python",
25+
);
26+
const apiBase = process.env.WMG_E2E_API_BASE ?? "http://127.0.0.1:8100";
27+
const uploadToken = process.env.WMG_E2E_UPLOAD_TOKEN ?? "e2e-token";
28+
29+
await waitFor(`${apiBase}/healthz`, 120_000);
30+
31+
const uniqueSuffix = Date.now().toString(36);
32+
const runs = [
33+
{
34+
runId: `e2e_random_test_${uniqueSuffix}`,
35+
agent: "random",
36+
env: "memory_maze",
37+
track: "test",
38+
},
39+
{
40+
runId: `e2e_oracle_train_${uniqueSuffix}`,
41+
agent: "greedy_oracle",
42+
env: "switch_quest",
43+
track: "train",
44+
},
45+
];
46+
47+
for (const run of runs) {
48+
execFileSync(
49+
pythonExecutable,
50+
[
51+
"scripts/demo_run.py",
52+
"--api-base",
53+
apiBase,
54+
"--upload-token",
55+
uploadToken,
56+
"--agent",
57+
run.agent,
58+
"--env",
59+
run.env,
60+
"--track",
61+
run.track,
62+
"--run-id",
63+
run.runId,
64+
],
65+
{
66+
cwd: repoRoot,
67+
stdio: "pipe",
68+
},
69+
);
70+
}
71+
}

web/tests/e2e/leaderboard.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { expect, test } from "@playwright/test";
22

3-
test("homepage and seeded leaderboard feel populated", async ({ page }) => {
3+
test("homepage and leaderboard feel populated with uploaded runs", async ({ page }) => {
44
await page.goto("/");
55

66
await expect(
@@ -13,10 +13,10 @@ test("homepage and seeded leaderboard feel populated", async ({ page }) => {
1313
await expect(page).toHaveURL(/\/leaderboard/);
1414
await expect(page.getByText(/Track planning quality/i)).toBeVisible();
1515
await expect(page.locator("table tbody tr").first()).toBeVisible();
16-
await expect(page.getByText("demo-mpc")).toBeVisible();
16+
await expect(page.getByRole("cell", { name: "random" }).first()).toBeVisible();
1717

1818
await page.getByRole("button", { name: "train" }).click();
19-
await expect(page.getByText("demo-oracle")).toBeVisible();
19+
await expect(page.getByRole("cell", { name: "greedy_oracle" }).first()).toBeVisible();
2020
});
2121

2222
test("run detail pages resolve from leaderboard links", async ({ page }) => {

0 commit comments

Comments
 (0)