test.build/core/plugins/server.plugin.test.ts

test.build/core/plugins/server.plugin.test.ts is a file in Codebase Testing. 34 lines of code and 0 definitions.

import { describe, expect, it, vi } from "vitest";
import { devPortPlugin } from "@banes-lab/build-scripts/core/plugins/server.plugin.ts";

const vault = vi.hoisted(() => ({ reads: 0 }));

vi.mock("@ssot/secrets", () => ({
    portOf: () => {
        vault.reads += 1;
        return 4202;
    },
}));

vi.mock("@banes-lab/build-scripts/core/factories/certificate.factory.ts", () => ({
    devCertificate: async () => {
        await Promise.resolve();
        return { cert: "c", key: "k" };
    },
}));

const configOf = async function configOf(command: "build" | "serve"): Promise<unknown> {
    const { config } = devPortPlugin("SITE_DEV_PORT");
    if (typeof config !== "function") {
        throw new TypeError("the plugin declares no config hook");
    }
    const held: unknown = await Reflect.apply(config, undefined, [{}, { command, mode: "development" }]);
    return held;
};

describe("devPortPlugin", () => {
    it("reads the dev port only when a server starts, so a build or a config load never opens the vault", async () => {
        vault.reads = 0;
        await expect(configOf("build")).resolves.toBeNull();
        expect(vault.reads).toBe(0);
        await expect(configOf("serve")).resolves.toStrictEqual({
            server: { https: { cert: "c", key: "k" }, port: 4202, strictPort: true },
        });
        expect(vault.reads).toBe(1);
    });
});