import assert from "node:assert/strict"; import { spawnSync } from "node:child_process"; import { it } from "vitest"; it("imports runtime validation without starting the CMS", () => { const result = spawnSync( process.execPath, [ "--input-type=module", "-e", "import {validateRuntime} from './scripts/docker-start.mjs';try{validateRuntime({});process.exit(1)}catch(error){if(!error.message.startsWith('Invalid runtime configuration'))throw error}", ], { encoding: "utf8" }, ); assert.equal(result.status, 0, result.stderr); }); it("rejects the local CrowdSec bouncer without a key", () => { const result = spawnSync( process.execPath, [ "--input-type=module", "-e", "import {validateRuntime} from './scripts/docker-start.mjs';try{validateRuntime({HOTEL_NAME:'x',AUTH_SECRET:'01234567890123456789012345678901',DATABASE_URL:'mysql://u:p@h/db',APP_URL:'http://h',CROWDSEC_LOCAL_ENABLED:'true'});process.exit(1)}catch(error){if(!String(error.message).includes('CROWDSEC_LAPI_API_KEY'))throw error}", ], { encoding: "utf8" }, ); assert.equal(result.status, 0, result.stderr); }); it("accepts a complete local CrowdSec configuration", () => { const result = spawnSync( process.execPath, [ "--input-type=module", "-e", "import {validateRuntime} from './scripts/docker-start.mjs';validateRuntime({HOTEL_NAME:'x',AUTH_SECRET:'01234567890123456789012345678901',DATABASE_URL:'mysql://u:p@h/db',APP_URL:'http://h',CROWDSEC_LOCAL_ENABLED:'true',CROWDSEC_LAPI_API_KEY:'fixture-key',CROWDSEC_LAPI_URL:'http://127.0.0.1:18080'})", ], { encoding: "utf8" }, ); assert.equal(result.status, 0, result.stderr); });