import assert from "node:assert/strict"; import { describe, it } from "node:test"; import { applyExternalInitialImportSchema, planExternalInitialImportSchema, previewExternalCsvSchema, updateExternalCsvConfigurationSchema, } from "../src/shared/validation/external-csv.schemas.js"; import { createDefaultExternalCsvConfiguration } from "../src/external-model/csv/external-csv-contracts.js"; import { externalCsvTestColumns } from "./fixtures/revit-csv-fixtures.js"; describe("external CSV API contracts", () => { it("accepts strict update and preview request envelopes", () => { assert.equal( updateExternalCsvConfigurationSchema.safeParse({ expectedRevision: 4, configuration: createDefaultExternalCsvConfiguration(externalCsvTestColumns), }).success, true ); assert.equal( previewExternalCsvSchema.safeParse({ fileName: "revit.csv", contentBase64: "YWJj", }).success, true ); assert.equal( planExternalInitialImportSchema.safeParse({ fileName: "revit.csv", contentBase64: "YWJj", }).success, true ); assert.equal( applyExternalInitialImportSchema.safeParse({ expectedRevision: 5, expectedConfigurationVersion: 2, expectedSha256: "a".repeat(64), fileName: "revit.csv", contentBase64: "YWJj", sourceName: "Revit-Gesamtmodell", roomDecisions: [], familyProjectDeviceDecisions: [], }).success, true ); }); it("rejects stale-shaped, oversized and unknown request fields", () => { assert.equal( updateExternalCsvConfigurationSchema.safeParse({ expectedRevision: -1, configuration: {}, }).success, false ); assert.equal( previewExternalCsvSchema.safeParse({ fileName: "revit.csv", contentBase64: "YWJj", apply: true, }).success, false ); assert.equal( planExternalInitialImportSchema.safeParse({ fileName: "revit.csv", contentBase64: "YWJj", decisions: [], }).success, false ); assert.equal( previewExternalCsvSchema.safeParse({ fileName: "revit.csv", contentBase64: "a".repeat(24_000_001), }).success, false ); }); });