queryBuilder.test.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /* @vitest-environment node */
  2. import { describe, it, expect } from "vitest";
  3. import { buildQsirchQuery, sanitizeUserQuery } from "./queryBuilder.js";
  4. describe("lib/search/queryBuilder", () => {
  5. it("sanitizes user query (removes ':' and quotes)", () => {
  6. expect(sanitizeUserQuery('path:"/Public"')).toBe("path /Public");
  7. });
  8. it("builds branch-scoped query with date range", () => {
  9. const q = buildQsirchQuery({
  10. mode: "branch",
  11. branches: ["NL20"],
  12. q: "bridgestone",
  13. from: "2025-12-01",
  14. to: "2025-12-31",
  15. dateField: "modified",
  16. pathPrefix: "/Niederlassungen",
  17. });
  18. expect(q).toContain('path:"/Niederlassungen/NL20"');
  19. expect(q).toContain('extension:"pdf"');
  20. expect(q).toContain('modified:"2025-12-01..2025-12-31"');
  21. expect(q).toContain("bridgestone");
  22. });
  23. it("builds multi-branch query by replicating filters per branch", () => {
  24. const q = buildQsirchQuery({
  25. mode: "multi",
  26. branches: ["NL01", "NL02"],
  27. q: "invoice",
  28. from: "2025-01-01",
  29. to: "2025-01-31",
  30. dateField: "modified",
  31. pathPrefix: "/Niederlassungen",
  32. });
  33. // Both branch clauses must include the same constraints.
  34. expect(q).toContain('path:"/Niederlassungen/NL01"');
  35. expect(q).toContain('path:"/Niederlassungen/NL02"');
  36. expect(q).toContain(" OR ");
  37. expect(q).toContain('extension:"pdf"');
  38. });
  39. it("builds global query for all", () => {
  40. const q = buildQsirchQuery({
  41. mode: "all",
  42. branches: null,
  43. q: null,
  44. from: null,
  45. to: "2025-12-31",
  46. dateField: "modified",
  47. pathPrefix: "/Niederlassungen",
  48. });
  49. expect(q).toContain('path:"/Niederlassungen"');
  50. expect(q).toContain("modified:<=2025-12-31");
  51. });
  52. });