Files
rea/src/application/environment/environmentInputSnapshot.test.ts
T

73 lines
2.8 KiB
TypeScript

import { readFile } from "node:fs/promises";
import { expect, it } from "vitest";
import {
environmentServeFixture,
writeEnvironmentServeFiles,
} from "../../../tests/fixtures/environmentServe.js";
import { createTestTempDirectory } from "../../../tests/fixtures/temporaryDirectory.js";
import {
immutableJsonSnapshotMember,
isImmutableJsonSnapshot,
} from "../../domain/immutableJson.js";
import { webNetworkCaptureSchema } from "../../domain/webNetworkCapture.js";
import { readEnvironmentExportInputs } from "./environmentExport.js";
import { loadEnvironmentSource } from "./environmentSource.js";
const member = (value: unknown, key: string): unknown => {
if (typeof value !== "object" || value === null)
throw new Error("Missing fixture object");
return Reflect.get(value, key);
};
it("seals privately parsed files and shares reported trees across both Evidence schema boundaries", async () => {
const root = await createTestTempDirectory("rea-environment-owned-input-");
const files = await writeEnvironmentServeFiles(root);
const inputs = await readEnvironmentExportInputs(
files.manifestPath,
files.capturePath,
);
if (!inputs.ok) throw inputs.error;
expect(isImmutableJsonSnapshot(inputs.value.evidence.value)).toBe(true);
const loaded = loadEnvironmentSource(
inputs.value.manifest.value,
inputs.value.evidence.value,
);
if (!loaded.ok) throw loaded.error;
const normalized = member(inputs.value.evidence.value, "normalized_result");
const records = member(normalized, "records");
if (!Array.isArray(records)) throw new Error("Missing fixture records");
const reported = member(records[0], "reported");
expect(isImmutableJsonSnapshot(reported)).toBe(true);
expect(Object.isFrozen(reported)).toBe(true);
expect(webNetworkCaptureSchema.parse(normalized).records[0]?.reported).toBe(
reported,
);
expect(
Buffer.compare(
inputs.value.evidence.bytes,
await readFile(files.capturePath),
),
).toBe(0);
expect(
immutableJsonSnapshotMember(
inputs.value.evidence.value,
"normalized_result",
),
).toBe(normalized);
});
it("authenticates mutable caller data without freezing caller-owned trees", () => {
const fixture = structuredClone(environmentServeFixture());
const normalized = member(fixture.capture, "normalized_result");
const records = member(normalized, "records");
if (!Array.isArray(records)) throw new Error("Missing fixture records");
const reported = member(records[0], "reported");
const loaded = loadEnvironmentSource(fixture.manifest, fixture.capture);
if (!loaded.ok) throw loaded.error;
expect(Object.isFrozen(fixture.capture)).toBe(false);
expect(Object.isFrozen(normalized)).toBe(false);
expect(Object.isFrozen(reported)).toBe(false);
expect(isImmutableJsonSnapshot(reported)).toBe(false);
});