litellm/tests/e2e/ui/tests/migration
ryan-crabbe-berri 0fcaadf11c
test(e2e): move Admin UI Playwright suite to tests/e2e/ui (#34196)
Relocates ui/litellm-dashboard/e2e_tests to tests/e2e/ui so all end to end
suites live under tests/e2e. The suite stays in TypeScript and becomes a
self-contained npm package with its own package.json, lockfile and tsconfig
instead of leaning on the dashboard's toolchain; the dashboard drops its
@playwright/test dependency, e2e scripts and knip/vitest/tsconfig carve-outs.

CI paths follow the move: both CircleCI jobs (main e2e and the
SERVER_ROOT_PATH migration smoke) and the test_server_root_path workflow now
install and run Playwright from tests/e2e/ui, with the node cache keyed on
both lockfiles. classify_changes.sh treats tests/e2e/ui as client so spec
edits keep skipping backend jobs. The suite's mock LLM fixture is excluded
from the e2e basedpyright zero-error gate in pyrightconfig.json since it
belongs to the TS suite, not the typed Python harness.
2026-07-22 19:43:10 +00:00
..
migratedPages.spec.ts test(e2e): move Admin UI Playwright suite to tests/e2e/ui (#34196) 2026-07-22 19:43:10 +00:00
README.md test(e2e): move Admin UI Playwright suite to tests/e2e/ui (#34196) 2026-07-22 19:43:10 +00:00

App Router migration smoke

A growing E2E smoke for pages migrated from the legacy ?page= switch to App Router path routes. For each migrated page it clicks the page's sidebar link, checks the URL is the path route and the page renders, reloads it, then clicks off to a legacy page and back to confirm navigation still works. It runs in two situations: the default mount and a non-root SERVER_ROOT_PATH mount.

Adding a page

When a page's migration merges, add its route segment to tests/e2e/ui/fixtures/migratedPages.ts (keep it in lockstep with MIGRATED_PAGES in ui/litellm-dashboard/src/utils/migratedPages.ts). Both suites pick it up automatically.

Running

Build the UI into the proxy and start the proxy first (the suite runs against http://localhost:4000).

Default mount:

npm run e2e:migration

Non-root mount (build and boot the proxy with the same root path, e.g. /litellm):

SERVER_ROOT_PATH=/litellm npm run e2e:migration:root

globalSetup logs in once per role; the admin storage state is reused for these tests. Under a non-root mount it logs in at ${SERVER_ROOT_PATH}/ui/login.