Files
homepage/src/utils/config/kubernetes.test.js
2026-02-04 19:58:39 -08:00

109 lines
2.8 KiB
JavaScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const { fs, yaml, config, checkAndCopyConfig, kube, apiExt } = vi.hoisted(() => {
const apiExt = {
readCustomResourceDefinitionStatus: vi.fn(),
};
const kube = {
loadFromCluster: vi.fn(),
loadFromDefault: vi.fn(),
makeApiClient: vi.fn(() => apiExt),
};
return {
fs: {
readFileSync: vi.fn(() => "kube-yaml"),
},
yaml: {
load: vi.fn(),
},
config: {
CONF_DIR: "/conf",
substituteEnvironmentVars: vi.fn((s) => s),
},
checkAndCopyConfig: vi.fn(),
kube,
apiExt,
};
});
vi.mock("fs", () => ({
readFileSync: fs.readFileSync,
}));
vi.mock("js-yaml", () => ({
default: yaml,
...yaml,
}));
vi.mock("utils/config/config", () => ({
default: checkAndCopyConfig,
...config,
}));
vi.mock("@kubernetes/client-node", () => ({
ApiextensionsV1Api: class ApiextensionsV1Api {},
KubeConfig: class KubeConfig {
loadFromCluster() {
return kube.loadFromCluster();
}
loadFromDefault() {
return kube.loadFromDefault();
}
makeApiClient() {
return kube.makeApiClient();
}
},
}));
import { checkCRD, getKubeConfig, getKubernetes } from "./kubernetes";
describe("utils/config/kubernetes", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("getKubernetes loads and parses kubernetes.yaml", () => {
yaml.load.mockReturnValueOnce({ mode: "disabled" });
expect(getKubernetes()).toEqual({ mode: "disabled" });
expect(checkAndCopyConfig).toHaveBeenCalledWith("kubernetes.yaml");
});
it("getKubeConfig returns null when disabled", () => {
yaml.load.mockReturnValueOnce({ mode: "disabled" });
expect(getKubeConfig()).toBeNull();
});
it("getKubeConfig loads from cluster/default based on mode", () => {
yaml.load.mockReturnValueOnce({ mode: "cluster" });
const kc1 = getKubeConfig();
expect(kube.loadFromCluster).toHaveBeenCalled();
expect(kc1).not.toBeNull();
yaml.load.mockReturnValueOnce({ mode: "default" });
const kc2 = getKubeConfig();
expect(kube.loadFromDefault).toHaveBeenCalled();
expect(kc2).not.toBeNull();
});
it("checkCRD returns true when the CRD exists", async () => {
apiExt.readCustomResourceDefinitionStatus.mockResolvedValueOnce({ ok: true });
const logger = { error: vi.fn() };
await expect(checkCRD("x.example", kube, logger)).resolves.toBe(true);
});
it("checkCRD returns false and logs on 403", async () => {
apiExt.readCustomResourceDefinitionStatus.mockRejectedValueOnce({
statusCode: 403,
body: { message: "nope" },
});
const logger = { error: vi.fn() };
await expect(checkCRD("x.example", kube, logger)).resolves.toBe(false);
expect(logger.error).toHaveBeenCalled();
});
});