appleScriptDate.test.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132
  1. import { describe, it, expect } from "vitest";
  2. import { buildAppleScriptDate } from "@/services/appleMailManager.js";
  3. describe("buildAppleScriptDate", () => {
  4. // Regression for issue #15: the comparison date must be built from numeric
  5. // components, never coerced from a locale-formatted string like
  6. // `date "May 30, 2026"`, which throws on non-English system locales and
  7. // silently zeroes out date-filtered searches.
  8. it('never emits locale-dependent `date "..."` string coercion', () => {
  9. const script = buildAppleScriptDate("_dateFrom", new Date(2026, 4, 30));
  10. expect(script).not.toMatch(/date\s+"/);
  11. });
  12. it("assigns each component numerically with a 1-based month", () => {
  13. const script = buildAppleScriptDate("_dateFrom", new Date(2026, 4, 30, 9, 15, 45));
  14. expect(script).toContain("set _dateFrom to current date");
  15. expect(script).toContain("set year of _dateFrom to 2026");
  16. expect(script).toContain("set month of _dateFrom to 5"); // May -> 5, not 4
  17. expect(script).toContain("set day of _dateFrom to 30");
  18. expect(script).toContain("set hours of _dateFrom to 9");
  19. expect(script).toContain("set minutes of _dateFrom to 15");
  20. expect(script).toContain("set seconds of _dateFrom to 45");
  21. });
  22. it("resets day to 1 before setting month/year to avoid month overflow", () => {
  23. const script = buildAppleScriptDate("_d", new Date(2026, 1, 28));
  24. const firstDayReset = script.indexOf("set day of _d to 1");
  25. const monthAssign = script.indexOf("set month of _d to 2");
  26. expect(firstDayReset).toBeGreaterThanOrEqual(0);
  27. expect(monthAssign).toBeGreaterThan(firstDayReset);
  28. });
  29. });