tftsr-devops_investigation/tests/unit/kubernetesStore.test.ts

162 lines
5.7 KiB
TypeScript
Raw Normal View History

import { describe, it, expect, beforeEach } from "vitest";
import { useKubernetesStore } from "@/stores/kubernetesStore";
import type { ResourceInfo } from "@/lib/tauriCommands";
describe("Kubernetes Store", () => {
beforeEach(() => {
useKubernetesStore.getState().clusters.forEach((c) =>
useKubernetesStore.getState().removeCluster(c.id)
);
});
describe("Cluster Management", () => {
it("should add a cluster", () => {
const cluster = {
id: "cluster-1",
name: "Production",
context: "prod-context",
cluster_url: "https://k8s.example.com",
};
useKubernetesStore.getState().addCluster(cluster);
expect(useKubernetesStore.getState().clusters).toHaveLength(1);
expect(useKubernetesStore.getState().clusters[0].name).toBe("Production");
});
it("should remove a cluster", () => {
const cluster = {
id: "cluster-1",
name: "Production",
context: "prod-context",
cluster_url: "https://k8s.example.com",
};
useKubernetesStore.getState().addCluster(cluster);
useKubernetesStore.getState().removeCluster("cluster-1");
expect(useKubernetesStore.getState().clusters).toHaveLength(0);
});
it("should update a cluster", () => {
const cluster = {
id: "cluster-1",
name: "Production",
context: "prod-context",
cluster_url: "https://k8s.example.com",
};
useKubernetesStore.getState().addCluster(cluster);
useKubernetesStore.getState().updateCluster("cluster-1", { name: "Production New" });
expect(useKubernetesStore.getState().clusters[0].name).toBe("Production New");
});
it("should set selected cluster", () => {
const cluster = {
id: "cluster-1",
name: "Production",
context: "prod-context",
cluster_url: "https://k8s.example.com",
};
useKubernetesStore.getState().addCluster(cluster);
useKubernetesStore.getState().setSelectedCluster("cluster-1");
expect(useKubernetesStore.getState().selectedClusterId).toBe("cluster-1");
});
});
describe("Namespace Management", () => {
it("should set selected namespace", () => {
useKubernetesStore.getState().setSelectedNamespace("default");
expect(useKubernetesStore.getState().selectedNamespace).toBe("default");
});
it("should set namespaces for a cluster", () => {
useKubernetesStore.getState().setNamespaces("cluster-1", ["default", "kube-system", "production"]);
expect(useKubernetesStore.getState().namespaces["cluster-1"]).toEqual(["default", "kube-system", "production"]);
});
});
describe("Resource Loading", () => {
it("should mark resource as loaded", () => {
useKubernetesStore.getState().markResourceLoaded("pods");
expect(useKubernetesStore.getState().isResourceLoaded("pods")).toBe(true);
});
it("should mark resource as unloaded", () => {
useKubernetesStore.getState().markResourceLoaded("pods");
useKubernetesStore.getState().markResourceUnloaded("pods");
expect(useKubernetesStore.getState().isResourceLoaded("pods")).toBe(false);
});
});
describe("Terminal Sessions", () => {
it("should add a terminal session", () => {
const sessionId = useKubernetesStore.getState().addTerminalSession({
clusterId: "cluster-1",
namespace: "default",
pod: "nginx",
container: "nginx",
command: "bash",
});
expect(sessionId).toBe("terminal-1");
expect(useKubernetesStore.getState().terminalSessions[sessionId]).toBeDefined();
});
it("should remove a terminal session", () => {
const sessionId = useKubernetesStore.getState().addTerminalSession({
clusterId: "cluster-1",
namespace: "default",
pod: "nginx",
container: "nginx",
command: "bash",
});
useKubernetesStore.getState().removeTerminalSession(sessionId);
expect(useKubernetesStore.getState().terminalSessions[sessionId]).toBeUndefined();
});
});
describe("Search", () => {
it("should set global search query", () => {
useKubernetesStore.getState().setGlobalSearchQuery("nginx");
expect(useKubernetesStore.getState().globalSearchQuery).toBe("nginx");
});
it("should set search results", () => {
const results = [{ name: "nginx-1", namespace: "default" }];
useKubernetesStore.getState().setSearchResults("pods", results as ResourceInfo[]);
expect(useKubernetesStore.getState().searchResults.pods).toEqual(results);
});
});
describe("Bulk Selection", () => {
it("should add to bulk selection", () => {
useKubernetesStore.getState().addToBulkSelection("pods", "nginx-1");
expect(useKubernetesStore.getState().bulkSelection.pods).toContain("nginx-1");
});
it("should remove from bulk selection", () => {
useKubernetesStore.getState().addToBulkSelection("pods", "nginx-1");
useKubernetesStore.getState().removeFromBulkSelection("pods", "nginx-1");
expect(useKubernetesStore.getState().bulkSelection.pods).not.toContain("nginx-1");
});
it("should clear bulk selection", () => {
useKubernetesStore.getState().addToBulkSelection("pods", "nginx-1");
useKubernetesStore.getState().clearBulkSelection("pods");
expect(useKubernetesStore.getState().bulkSelection.pods).toEqual([]);
});
it("should get bulk selection count", () => {
useKubernetesStore.getState().addToBulkSelection("pods", "nginx-1");
useKubernetesStore.getState().addToBulkSelection("pods", "nginx-2");
expect(useKubernetesStore.getState().getBulkSelectionCount("pods")).toBe(2);
});
});
});