litellm/tests/e2e/ui/tests
tin-berri ff1f21aea9
fix(ui): paginate request logs by session groups server-side (#39257)
* fix(ui): paginate request logs by session groups server-side

The logs table server-paginated raw spend logs and then collapsed
multi-call sessions client-side, so a page could render 3 rows while
the footer claimed 25 and sessions straddled pages. Adds an opt-in
group_by_session param to /spend/logs/ui that pages and counts one
representative row per session (DISTINCT ON, newest non-MCP call),
keeps the bounded count contract, enriches whole-session llm/agent
composition counts, and deletes the client-side collapse pipeline.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QxT89fiygmzz2ALcjpu7Ve

* feat(ui): add a 10 rows-per-page option and default request logs to it

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QxT89fiygmzz2ALcjpu7Ve

* fix(ui): key session aggregates per api key in the logs enrichment

Grouped pagination splits a reused session id into one row per api key,
but the enrichment still aggregated by session_id alone, so both rows
showed combined spend and counts. The aggregate query now groups by
(session_id, api_key), the count folds into it (the separate group_by
query is deleted), and each row reads its own key's totals.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QxT89fiygmzz2ALcjpu7Ve

* fix(ui): treat an empty api_key as a real session group value

The spend-log schema defaults api_key to an empty string; truthiness
guards in the enrichment treated it as missing, so keyless multi-call
sessions lost their count and spend. Only None means missing now.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QxT89fiygmzz2ALcjpu7Ve

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 17:54:17 -07:00
..
auth fix(e2e/ui): resolve dashboard base URL from env instead of hardcoding localhost (#34739) 2026-07-27 10:19:32 -07:00
budgets test(e2e/ui): cover the Budgets page create, edit and delete flows (#39052) 2026-09-01 12:17:02 -07:00
guardrails test(e2e/ui): cover creating, testing and deleting a guardrail (#39053) 2026-09-01 12:21:45 -07:00
internal-user test(e2e/ui): give the seeded users passwords that pass the default password policy 2026-09-02 16:58:53 -07:00
internal-viewer test(e2e): assert user-observable behavior instead of DOM structure 2026-08-31 14:04:15 -07:00
login fix(e2e/ui): resolve dashboard base URL from env instead of hardcoding localhost (#34739) 2026-07-27 10:19:32 -07:00
logs fix(ui): paginate request logs by session groups server-side (#39257) 2026-09-02 17:54:17 -07:00
mcp test(e2e): assert user-observable behavior instead of DOM structure 2026-08-31 14:04:15 -07:00
migration fix(e2e): assert sidebar expansion without a self-resolving locator 2026-08-31 14:45:11 -07:00
modelHub test(e2e-ui): assert user-observable behavior instead of DOM structure in audit fixes 2026-08-31 18:15:18 -07:00
modelsPage test(e2e/ui): stop the suite failing on things that are not regressions (#39063) 2026-09-01 12:34:57 -07:00
navigation test(e2e): move Admin UI Playwright suite to tests/e2e/ui (#34196) 2026-07-22 19:43:10 +00:00
playground test(e2e/ui): address the migrated dashboard controls by role, not antd classes 2026-08-15 15:37:09 -07:00
proxy-admin test(e2e/ui): give the seeded users passwords that pass the default password policy 2026-09-02 16:58:53 -07:00
settings test(e2e): drop redundant SCIM key cleanup, the throwaway db is the teardown 2026-08-31 15:36:35 -07:00
team-admin test(e2e/ui): stop the suite failing on things that are not regressions (#39063) 2026-09-01 12:34:57 -07:00
usage test(e2e/ui): cover the Usage page activity tabs (#39061) 2026-09-01 12:36:17 -07:00
users fix(e2e): assert the users table's own empty-state copy 2026-08-31 15:57:49 -07:00