mirror of
https://github.com/gethomepage/homepage.git
synced 2026-04-13 21:51:22 -07:00
Chore: homepage tests (#6278)
This commit is contained in:
108
src/utils/config/kubernetes.test.js
Normal file
108
src/utils/config/kubernetes.test.js
Normal file
@@ -0,0 +1,108 @@
|
||||
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();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user