dashboard-logs-time-range-utils.test.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { describe, expect, test } from "vitest";
  2. import {
  3. dateStringWithClockToTimestamp,
  4. formatClockFromTimestamp,
  5. inclusiveEndTimestampFromExclusive,
  6. parseClockString,
  7. } from "@/app/[locale]/dashboard/logs/_utils/time-range";
  8. describe("dashboard logs time range utils", () => {
  9. test("parseClockString supports HH:MM and defaults seconds to 0", () => {
  10. expect(parseClockString("01:02")).toEqual({ hours: 1, minutes: 2, seconds: 0 });
  11. });
  12. test("parseClockString falls back to 0 for invalid numbers", () => {
  13. expect(parseClockString("xx:yy:zz")).toEqual({ hours: 0, minutes: 0, seconds: 0 });
  14. expect(parseClockString("01:02:xx")).toEqual({ hours: 1, minutes: 2, seconds: 0 });
  15. });
  16. test("dateStringWithClockToTimestamp combines local date + clock", () => {
  17. const ts = dateStringWithClockToTimestamp("2026-01-01", "01:02:03");
  18. const expected = new Date(2026, 0, 1, 1, 2, 3, 0).getTime();
  19. expect(ts).toBe(expected);
  20. });
  21. test("dateStringWithClockToTimestamp returns undefined for invalid date", () => {
  22. expect(dateStringWithClockToTimestamp("not-a-date", "01:02:03")).toBeUndefined();
  23. expect(dateStringWithClockToTimestamp("2026-13-40", "01:02:03")).toBeUndefined();
  24. });
  25. test("exclusive end time round-trips to inclusive end time (+/-1s)", () => {
  26. const inclusive = dateStringWithClockToTimestamp("2026-01-02", "04:05:06");
  27. expect(inclusive).toBeDefined();
  28. const exclusive = inclusive! + 1000;
  29. expect(inclusiveEndTimestampFromExclusive(exclusive)).toBe(inclusive);
  30. });
  31. test("inclusiveEndTimestampFromExclusive clamps at 0", () => {
  32. expect(inclusiveEndTimestampFromExclusive(0)).toBe(0);
  33. expect(inclusiveEndTimestampFromExclusive(500)).toBe(0);
  34. });
  35. test("formatClockFromTimestamp uses HH:MM:SS", () => {
  36. const ts = new Date(2026, 0, 1, 1, 2, 3, 0).getTime();
  37. expect(formatClockFromTimestamp(ts)).toBe("01:02:03");
  38. });
  39. });