8d00f9cba1
- Create packages/store/ with log-store, log-archive, blob-store (~900 LOC) - daemon depends on @uncaged/nerve-store (workspace:*) - CLI depends on @uncaged/nerve-store, delete daemon-types.ts - Move store-related tests to packages/store/src/__tests__/ - All store tests pass (73/73), no new regressions
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
assertValidUtcDay,
|
|
compareIsoDays,
|
|
lastArchivableUtcDay,
|
|
nextUtcDay,
|
|
prevUtcDay,
|
|
utcDateStringFromMs,
|
|
utcDayEndExclusiveMs,
|
|
utcDayStartMs,
|
|
} from "../log-archive.js";
|
|
|
|
describe("log-archive UTC helpers", () => {
|
|
it("lastArchivableUtcDay matches RFC-style boundary (exclusive end of day ≤ boundary)", () => {
|
|
const boundary = Date.UTC(2026, 1, 2, 12, 0, 0); // 2026-02-02 12:00 UTC
|
|
expect(lastArchivableUtcDay(boundary)).toBe("2026-02-01");
|
|
});
|
|
|
|
it("round-trips UTC day bounds", () => {
|
|
expect(utcDayStartMs("2026-02-01")).toBe(Date.UTC(2026, 1, 1));
|
|
expect(utcDayEndExclusiveMs("2026-02-01")).toBe(Date.UTC(2026, 1, 2));
|
|
expect(utcDateStringFromMs(Date.UTC(2026, 1, 1, 23, 59))).toBe("2026-02-01");
|
|
});
|
|
|
|
it("nextUtcDay / prevUtcDay", () => {
|
|
expect(nextUtcDay("2026-02-01")).toBe("2026-02-02");
|
|
expect(prevUtcDay("2026-02-01")).toBe("2026-01-31");
|
|
});
|
|
|
|
it("compareIsoDays sorts lexicographically for YYYY-MM-DD", () => {
|
|
expect(compareIsoDays("2026-01-01", "2026-02-01")).toBeLessThan(0);
|
|
expect(compareIsoDays("2026-02-01", "2026-02-01")).toBe(0);
|
|
});
|
|
|
|
it("assertValidUtcDay rejects invalid calendars", () => {
|
|
expect(() => assertValidUtcDay("2026-02-31")).toThrow();
|
|
expect(() => assertValidUtcDay("bad")).toThrow();
|
|
});
|
|
});
|