litellm/ui/litellm-dashboard/e2e_tests/tests/migration
ryan-crabbe-berri d97b17b161
feat(ui): migrate models page to App Router path route (#30677)
* feat(ui): migrate models page to App Router path route

Cut the Models + Endpoints page over from the legacy ?page=models switch
in (dashboard)/page.tsx to a path route at (dashboard)/models-and-endpoints.
Adding the MIGRATED_PAGES entry repoints the sidebar link and redirects old
?page=models bookmarks to /ui/models-and-endpoints.

ModelsAndEndpointsView already sourced identity from useAuthorized() and its
own data via useModelsInfo(), so the token/keys/modelData/setModelData props
were dead; drop them from ModelDashboardProps (and the parent's now-unused
setModelData state) to sever the last of the shared-state coupling.

* test(ui): scope migration smoke's shell probe to the exact sidebar link

The migration smoke used a loose `locator("a", { hasText: "Virtual Keys" })`
to assert the dashboard shell rendered. The Models + Endpoints page content
itself links to the "Virtual Keys page", so on that route the substring filter
matched two anchors and tripped Playwright strict mode. Match the sidebar link
by its exact accessible name instead, which resolves to just the nav item.
2026-06-17 18:10:31 -07:00
..
migratedPages.spec.ts feat(ui): migrate models page to App Router path route (#30677) 2026-06-17 18:10:31 -07:00
README.md test(ui): data-driven App Router migration E2E smoke (default + server-root-path) (#29974) 2026-06-09 10:40:01 -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 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 e2e_tests/fixtures/migratedPages.ts (keep it in lockstep with MIGRATED_PAGES in 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.