/*
Unit tests for RFC-0890 — parseCaptureXFilename, path resolvers, and schema validation for raw screenshot ingestion.
- Does not test full command handler — requires R2, sharp, bordbuch, and lock mocking.
- RFC-0890: established unit test coverage for parseCaptureXFilename and path resolvers.
*/
import { describe, it, expect } from "vitest";
import {
parseCaptureXFilename,
resolveNachweisRawScreenshotR2Path,
resolveNachweisRawScreenshotLocalPath,
} from "./nachweis-io.ts";
import path from "node:path";
describe("RFC-0890: parseCaptureXFilename", () => {
it("parses CaptureX filename with domain and extension", () => {
const result = parseCaptureXFilename("CaptureX_2026-08-20_134440_example.com.png");
expect(result).toEqual({ capturedAt: "2026-08-20T13:44:40Z" });
});
it("parses CaptureX filename with multi-part domain", () => {
const result = parseCaptureXFilename("CaptureX_2026-08-20_134440_www.example.co.uk.png");
expect(result).toEqual({ capturedAt: "2026-08-20T13:44:40Z" });
});
it("parses CaptureX filename with webp extension", () => {
const result = parseCaptureXFilename("CaptureX_2026-08-20_090000_my-domain.webp");
expect(result).toEqual({ capturedAt: "2026-08-20T09:00:00Z" });
});
it("returns null for non-matching filename", () => {
expect(parseCaptureXFilename("manual-screenshot.png")).toBeNull();
});
it("returns null for filename without CaptureX prefix", () => {
expect(parseCaptureXFilename("2026-08-20_134440_example.com.png")).toBeNull();
});
it("returns null for filename with wrong date format", () => {
expect(parseCaptureXFilename("CaptureX_2026-8-20_134440_example.com.png")).toBeNull();
});
it("returns null for empty string", () => {
expect(parseCaptureXFilename("")).toBeNull();
});
});
describe("RFC-0890: resolveNachweisRawScreenshotR2Path", () => {
it("builds R2 path with systemId, slug, and filename", () => {
const result = resolveNachweisRawScreenshotR2Path(
"warpgogol-com",
"client-xyz",
"CaptureX_2026-08-20_134440_example.com.png",
);
expect(result).toBe(
"warpgogol-com/screenshots/client-xyz/raw/CaptureX_2026-08-20_134440_example.com.png",
);
});
});
describe("RFC-0890: resolveNachweisRawScreenshotLocalPath", () => {
it("builds local path under trust/evidence/screenshots", () => {
const cachePath = "/cache/warpgogol-com";
const result = resolveNachweisRawScreenshotLocalPath(cachePath, "client-xyz", "screenshot.png");
expect(result).toBe(
path.join(
cachePath,
"trust",
"evidence",
"screenshots",
"client-xyz",
"raw",
"screenshot.png",
),
);
});
});