Spaces:
Sleeping
Sleeping
| import assert from "node:assert/strict"; | |
| import { readFile } from "node:fs/promises"; | |
| import test from "node:test"; | |
| import { validateDeployEnv } from "./validate-deploy-env.mjs"; | |
| const validEnv = { | |
| VITE_API_BASE: "https://carepath.hf.space", | |
| VITE_CONSOLE_URL: "https://carepath.hf.space/phien-dich-y-khoa/", | |
| }; | |
| test("accepts one HTTPS Space origin", () => { | |
| assert.doesNotThrow(() => validateDeployEnv(validEnv)); | |
| }); | |
| test("requires both deployment URLs", () => { | |
| assert.throws( | |
| () => validateDeployEnv({}), | |
| /VITE_API_BASE is required[\s\S]*VITE_CONSOLE_URL is required/, | |
| ); | |
| }); | |
| test("rejects HTTP, split origins, and the wrong console path", () => { | |
| assert.throws( | |
| () => | |
| validateDeployEnv({ | |
| VITE_API_BASE: "http://api.example.test", | |
| VITE_CONSOLE_URL: "https://console.example.test/app/", | |
| }), | |
| /must use HTTPS[\s\S]*must share one origin[\s\S]*pathname must be \/phien-dich-y-khoa\//, | |
| ); | |
| }); | |
| test("rejects paths, queries, and fragments that would corrupt runtime URLs", () => { | |
| assert.throws( | |
| () => | |
| validateDeployEnv({ | |
| VITE_API_BASE: "https://carepath.hf.space/wrong?token=secret", | |
| VITE_CONSOLE_URL: "https://carepath.hf.space/phien-dich-y-khoa/#app", | |
| }), | |
| /VITE_API_BASE must not include a query or fragment[\s\S]*VITE_CONSOLE_URL must not include a query or fragment[\s\S]*VITE_API_BASE pathname must be \//, | |
| ); | |
| }); | |
| test("Vercel runs validation before the production build", async () => { | |
| const config = JSON.parse( | |
| await readFile(new URL("../vercel.json", import.meta.url), "utf8"), | |
| ); | |
| assert.equal(config.buildCommand, "npm run validate:deploy && npm run build"); | |
| assert.deepEqual(config.rewrites, [ | |
| { source: "/ghi-chep-lam-sang", destination: "/index.html" }, | |
| { source: "/ghi-chep-lam-sang/", destination: "/index.html" }, | |
| { source: "/ghi-chep-lam-sang/:path*", destination: "/index.html" }, | |
| ]); | |
| }); | |