mirror of
https://github.com/gethomepage/homepage.git
synced 2026-04-04 01:01:22 -07:00
109 lines
2.8 KiB
JavaScript
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();
|
|
});
|
|
});
|