src/lib/db/find-work.test.ts
Linked repository file from this build.
import { expect, test } from "bun:test";
import { PgDialect } from "drizzle-orm/pg-core";
import { searchSchema, searchWhere } from "./search-store";
import { catalogScope } from "./catalog-store";
import { catalogQuerySchema, fiscalYear, queueStates } from "@/features/catalog/query";
import { demoActor } from "@/lib/auth/roster";
import { createSeed } from "@/programs/snap-negative/seed";
import { reviewSender } from "./review-projection";
const dialect = new PgDialect();
test("stacked filters keep independent terms and literal wildcard match modes", () => {
const filters = searchSchema.parse({
filters: JSON.stringify([
{ field: "reviewNumber", mode: "ends", term: "15" },
{ field: "clientName", mode: "starts", term: "Z" },
{ field: "sampleMonth", from: "2026-04", through: "2026-07" },
{ field: "caseNumber", mode: "contains", term: "50%_\\" },
{ field: "county", mode: "exact", term: "02" },
]),
});
const query = dialect.sqlToQuery(searchWhere(demoActor("examiner"), filters));
expect(query.params).toContain("%15");
expect(query.params).toContain("Z%");
expect(query.params).toContain("2026-04");
expect(query.params).toContain("2026-07");
expect(query.params).toContain("%50\\%\\_\\\\%");
expect(query.sql).toContain("regexp_replace");
expect(query.sql).toContain('"review_index"."examiner" in');
expect(query.sql.match(/ and /g)!.length).toBeGreaterThanOrEqual(6);
});
test("filter parsing rejects malformed, excessive, and reversed month rows", () => {
for (const filters of [
"not json",
JSON.stringify([{ field: "sampleMonth", from: "2026-13", through: "" }]),
JSON.stringify([{ field: "sampleMonth", from: "2026-08", through: "2026-04" }]),
JSON.stringify(
Array.from({ length: 101 }, () => ({ field: "clientName", mode: "contains", term: "x" })),
),
]) {
expect(searchSchema.safeParse({ filters }).success).toBe(false);
}
expect(searchSchema.safeParse({ offset: -1 }).success).toBe(false);
});
test("approval scope denies unauthorized roles and constrains PEC decisions", () => {
for (const role of ["examiner", "admin", "statistics"] as const)
expect(() => catalogScope(demoActor(role), true)).toThrow("Approval Queue");
expect(queueStates(demoActor("pec"))).toEqual(["awaiting_pec_approval"]);
const query = dialect.sqlToQuery(catalogScope(demoActor("supervisor"), true));
expect(query.params).toContain("awaiting_review");
expect(query.params).not.toContain("needs_changes");
expect(query.params).toContain("101");
expect(query.params).not.toContain("105");
expect(catalogQuerySchema.safeParse({ sort: "SQL", pageSize: 1000 }).success).toBe(false);
});
test("federal fiscal years change in October", () => {
expect(fiscalYear("2026-09")).toBe(2026);
expect(fiscalYear("2026-10")).toBe(2027);
expect(fiscalYear("2025-10")).toBe(2026);
});
test("sender remains workflow actor after incoming mail; save actor is the fallback", () => {
const stored = {
review: { ...createSeed(), examiner: "101" },
version: 0,
requestId: "test",
savedAt: "2026-09-09T00:00:00Z",
actor: demoActor("admin"),
};
expect(reviewSender(stored)).toBe("Avery Admin");
stored.review.state = "awaiting_review";
stored.review.activity.push({
id: "transition",
kind: "transition",
from: "new_active",
to: "awaiting_review",
actor: demoActor("supervisor"),
createdAt: stored.savedAt,
description: "Submitted",
});
stored.review.activity.push({
id: "mail",
kind: "document",
actor: demoActor("admin"),
createdAt: stored.savedAt,
description: "Mailed PDF",
});
expect(reviewSender(stored)).toBe("Sam Supervisor");
});
test("manager queue includes coverage, acceptance, and CAO response work", () => {
expect(queueStates(demoActor("program_manager"))).toEqual([
"awaiting_review",
"awaiting_manager",
"awaiting_cao_response",
]);
expect(queueStates(demoActor("supervisor"))).toEqual(["awaiting_review"]);
});