| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import { describe, expect, test } from "vitest";
- import {
- buildLogsUrlQuery,
- parseLogsUrlFilters,
- } from "@/app/[locale]/dashboard/logs/_utils/logs-query";
- describe("dashboard logs url query utils", () => {
- test("parses and trims sessionId", () => {
- const parsed = parseLogsUrlFilters({ sessionId: " abc " });
- expect(parsed.sessionId).toBe("abc");
- });
- test("array params use the first value", () => {
- const parsed = parseLogsUrlFilters({
- sessionId: [" abc ", "ignored"],
- userId: ["1", "2"],
- statusCode: ["!200", "200"],
- });
- expect(parsed.sessionId).toBe("abc");
- expect(parsed.userId).toBe(1);
- expect(parsed.excludeStatusCode200).toBe(true);
- });
- test("statusCode '!200' maps to excludeStatusCode200", () => {
- const parsed = parseLogsUrlFilters({ statusCode: "!200" });
- expect(parsed.excludeStatusCode200).toBe(true);
- expect(parsed.statusCode).toBeUndefined();
- });
- test("parseIntParam returns undefined for invalid numbers", () => {
- const parsed = parseLogsUrlFilters({ userId: "NaN", startTime: "bad" });
- expect(parsed.userId).toBeUndefined();
- expect(parsed.startTime).toBeUndefined();
- });
- test("buildLogsUrlQuery omits empty sessionId", () => {
- const query = buildLogsUrlQuery({ sessionId: " " });
- expect(query.get("sessionId")).toBeNull();
- });
- test("buildLogsUrlQuery includes sessionId and time range", () => {
- const query = buildLogsUrlQuery({ sessionId: "abc", startTime: 1, endTime: 2 });
- expect(query.get("sessionId")).toBe("abc");
- expect(query.get("startTime")).toBe("1");
- expect(query.get("endTime")).toBe("2");
- });
- test("buildLogsUrlQuery includes startTime/endTime even when 0", () => {
- const query = buildLogsUrlQuery({ startTime: 0, endTime: 0 });
- expect(query.get("startTime")).toBe("0");
- expect(query.get("endTime")).toBe("0");
- });
- test("parseLogsUrlFilters sanitizes invalid page (<1) to undefined", () => {
- expect(parseLogsUrlFilters({ page: "0" }).page).toBeUndefined();
- expect(parseLogsUrlFilters({ page: "-1" }).page).toBeUndefined();
- expect(parseLogsUrlFilters({ page: "1" }).page).toBe(1);
- });
- test("buildLogsUrlQuery only includes page when > 1", () => {
- expect(buildLogsUrlQuery({ page: 0 }).get("page")).toBeNull();
- expect(buildLogsUrlQuery({ page: 1 }).get("page")).toBeNull();
- expect(buildLogsUrlQuery({ page: 2 }).get("page")).toBe("2");
- });
- test("build + parse roundtrip preserves filters", () => {
- const original = {
- userId: 1,
- keyId: 2,
- providerId: 3,
- sessionId: "abc",
- startTime: 10,
- endTime: 20,
- statusCode: 500,
- excludeStatusCode200: false,
- model: "m",
- endpoint: "/v1/messages",
- minRetryCount: 2,
- };
- const query = buildLogsUrlQuery(original);
- const parsed = parseLogsUrlFilters(Object.fromEntries(query.entries()));
- expect(parsed).toEqual(expect.objectContaining(original));
- });
- test("buildLogsUrlQuery includes minRetryCount even when 0", () => {
- const query = buildLogsUrlQuery({ minRetryCount: 0 });
- expect(query.get("minRetry")).toBe("0");
- });
- });
|