litellm/tests/e2e/ui/tests/migration
devin-ai-integration[bot] 3090f4b23e
fix(ci): isolate integration workers and repair test fixtures (#45863)
* test(integration): wait for customer spend rows and use owned OpenRouter cost

* ci: isolate integration workers and clean up resources after crashes

* docs: describe isolated extensions workers and shard census

* fix(ci): restore integration service and fixture guarantees

* fix(integration): preserve replay IDs and native route fixtures

* fix(tests): scope integration harness imports to each unit case

* fix(ci): preserve fixtures and wait for owned workers

* fix(ci): isolate nested runs and telemetry cases

* fix(ci): make worker readiness and fault tests deterministic

* chore(ci): drop MCP fixture repair already covered by main

* chore(ci): keep the local catalog fix from main

---------

Co-authored-by: yuneng <yuneng@berri.ai>
2026-10-11 01:56:02 -07:00
..
migratedPages.spec.ts fix(ci): isolate integration workers and repair test fixtures (#45863) 2026-10-11 01:56:02 -07:00
README.md test(ui): assert navigation through accessible links and page content 2026-09-06 00:59:18 -07:00

App Router migration smoke

A growing E2E smoke for pages migrated from the legacy ?page= switch to App Router path routes. For each page it clicks the sidebar link by its accessible name, verifies the destination's content, reloads it, then visits Virtual Keys and returns. It runs at the default mount and a non-root SERVER_ROOT_PATH mount

Link selection does not depend on href formatting. URL assertions compare the origin and pathname, allowing a trailing slash, query string, and fragment while rejecting another route or mount. Reloads must return a successful document, and each journey must finish without uncaught browser errors

Adding a page

Add an entry to tests/e2e/ui/fixtures/migratedPages.ts, keyed by the legacy page ID. Specify its route segment, accessible link name, sidebar group if collapsed, and distinctive visible content such as a heading or tab. Keep expectations independent of the application's route table so an incorrect destination fails the test. Both navigation suites use this fixture

For a licensed-only page, unlicensedText describes the expected upgrade notice. The authenticated session's license claim determines which content must render

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

tests/navigation/sidebar.spec.ts also checks the navigation helpers against equivalent link formats on the live dashboard and a deep link containing a query string and fragment. The link-format cases change only the rendered href attribute to exercise the locator contract; destination pages and APIs remain live