test.deploy/core/converters/nginx.converter.test.ts
test.deploy/core/converters/nginx.converter.test.ts is a file in Codebase Testing. 44 lines of code and 0 definitions.
import { describe, expect, it } from "vitest";
import { errorLogOf, scriptNameOf, scriptTextOf } from "@banes-lab/deploy/core/converters/nginx.converter.ts";
import { ERROR_LOG_MISSING } from "@banes-lab/deploy/configuration/strings/deployment.strings.ts";
import { absolutePath } from "@ssot/paths";
import { join } from "node:path";
import { readFileSync } from "node:fs";
describe("scriptNameOf and scriptTextOf", () => {
it("ships a TypeScript njs script as JavaScript named for its subject, with its types stripped", () => {
expect(scriptNameOf("catalog.entrypoint.ts")).toBe("catalog.js");
const text = scriptTextOf(
"query.ts",
"interface A { readonly b: number }\nexport const c = (d: A): number => d.b;\n",
);
expect(text).not.toContain("interface");
expect(text).toContain("export const c = (d) => d.b;");
});
it("imports a built-in by the bare name njs registers, because njs has no node: protocol", () => {
const text = scriptTextOf("query.ts", 'import fs from "node:fs";\nexport const e = fs;\n');
expect(text).toContain('import fs from "fs";');
expect(text).not.toContain("node:");
});
it("leaves no node: specifier in the shipped query script", () => {
const name = "catalog.entrypoint.ts";
const source = readFileSync(join(absolutePath("app.nginxScripts"), name), "utf8");
expect(scriptTextOf(name, source)).not.toContain('"node:');
});
it("passes a file that is not TypeScript through unchanged", () => {
expect(scriptNameOf("rules.conf")).toBe("rules.conf");
expect(scriptTextOf("rules.conf", "a b;\n")).toBe("a b;\n");
});
});
describe("errorLogOf", () => {
it("reads the error log path from the first error_log directive, with or without a level", () => {
expect(errorLogOf("server {\n error_log /var/log/a.log warn;\n}\n")).toBe("/var/log/a.log");
expect(errorLogOf(" error_log /var/log/b.log;\n")).toBe("/var/log/b.log");
});
it("finds the error log the site file declares", () => {
const site = readFileSync(absolutePath("app.nginxSite"), "utf8");
expect(errorLogOf(site).length).toBeGreaterThan(0);
});
it("refuses a site file that declares no error log", () => {
expect(() => errorLogOf("server {\n access_log off;\n}\n")).toThrow(ERROR_LOG_MISSING);
});
});