1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/packages/core/src/main/cluster/update-entity-metadata.test.ts
Juho Heikka 7648d79454 Copy detected metadata from cluster to catalog cluster (#7316)
* Copy detected metadata from cluster to catalog cluster

Signed-off-by: Juho Heikka <juho.heikka@gmail.com>

* Remove duplicate copyright comment

Signed-off-by: Juho Heikka <juho.heikka@gmail.com>

* Lint fixes

Signed-off-by: Juho Heikka <juho.heikka@gmail.com>

* Typescript fix

Signed-off-by: Juho Heikka <juho.heikka@gmail.com>

---------

Signed-off-by: Juho Heikka <juho.heikka@gmail.com>
2023-03-09 12:02:11 +02:00

161 lines
6.1 KiB
TypeScript

/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import type { AppPaths } from "../../common/app-paths/app-path-injection-token";
import appPathsStateInjectable from "../../common/app-paths/app-paths-state.injectable";
import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import { KubernetesCluster } from "../../common/catalog-entities";
import { ClusterMetadataKey } from "../../common/cluster-types";
import type { Cluster } from "../../common/cluster/cluster";
import { createClusterInjectionToken } from "../../common/cluster/create-cluster-injection-token";
import { getDiForUnitTesting } from "../getDiForUnitTesting";
import type { UpdateEntityMetadata } from "./update-entity-metadata.injectable";
import updateEntityMetadataInjectable from "./update-entity-metadata.injectable";
describe("update-entity-metadata", () => {
let cluster: Cluster;
let entity: KubernetesCluster;
let updateEntityMetadata: UpdateEntityMetadata;
let detectedMetadata: Record<ClusterMetadataKey, any>;
beforeEach(() => {
const di = getDiForUnitTesting();
di.override(directoryForUserDataInjectable, () => "/some-user-store-path");
di.override(appPathsStateInjectable, () => ({
get: () => ({} as AppPaths),
set: () => {},
}));
const createCluster = di.inject(createClusterInjectionToken);
updateEntityMetadata = di.inject(updateEntityMetadataInjectable);
cluster = createCluster({
id: "some-id",
contextName: "some-context",
kubeConfigPath: "minikube-config.yml",
}, {
clusterServerUrl: "foo",
});
detectedMetadata = {
[ClusterMetadataKey.CLUSTER_ID]: "some-cluster-id",
[ClusterMetadataKey.DISTRIBUTION]: "some-distribution",
[ClusterMetadataKey.VERSION]: "some-version",
[ClusterMetadataKey.LAST_SEEN]: "some-date",
[ClusterMetadataKey.NODES_COUNT]: 42,
[ClusterMetadataKey.PROMETHEUS]: {
"some-parameter": "some-value",
},
};
cluster.metadata = {
...cluster.metadata,
};
entity = new KubernetesCluster({
metadata: {
uid: "some-uid",
name: "some-name",
labels: {},
},
spec: {
kubeconfigContext: "some-context",
kubeconfigPath: "/some/path/to/kubeconfig",
},
status: {
phase: "connecting",
},
});
});
it("given cluster metadata has no some last seen timestamp, does not update entity metadata with last seen timestamp", () => {
updateEntityMetadata(entity, cluster);
expect(entity.metadata.lastSeen).toEqual(undefined);
});
it("given cluster metadata has some last seen timestamp, updates entity metadata with last seen timestamp", () => {
cluster.metadata[ClusterMetadataKey.LAST_SEEN] = detectedMetadata[ClusterMetadataKey.LAST_SEEN];
updateEntityMetadata(entity, cluster);
expect(entity.metadata.lastSeen).toEqual("some-date");
});
it("given cluster metadata has some version, updates entity metadata with version", () => {
cluster.metadata[ClusterMetadataKey.VERSION] = detectedMetadata[ClusterMetadataKey.VERSION];
updateEntityMetadata(entity, cluster);
expect(entity.metadata.version).toEqual("some-version");
});
it("given cluster metadata has nodes count, updates entity metadata with node count", () => {
cluster.metadata[ClusterMetadataKey.NODES_COUNT] = detectedMetadata[ClusterMetadataKey.NODES_COUNT];
updateEntityMetadata(entity, cluster);
expect(entity.metadata.nodes).toEqual(42);
});
it("given cluster metadata has prometheus data, updates entity metadata with prometheus data", () => {
cluster.metadata[ClusterMetadataKey.PROMETHEUS] = detectedMetadata[ClusterMetadataKey.PROMETHEUS];
updateEntityMetadata(entity, cluster);
expect(entity.metadata.prometheus).toEqual({
"some-parameter": "some-value",
});
});
it("given cluster metadata has distribution, updates entity metadata with distribution", () => {
cluster.metadata[ClusterMetadataKey.DISTRIBUTION] = detectedMetadata[ClusterMetadataKey.DISTRIBUTION];
updateEntityMetadata(entity, cluster);
expect(entity.metadata.distribution).toEqual("some-distribution");
});
it("given cluster metadata has cluster id, updates entity metadata with cluster id", () => {
cluster.metadata[ClusterMetadataKey.CLUSTER_ID] = detectedMetadata[ClusterMetadataKey.CLUSTER_ID];
updateEntityMetadata(entity, cluster);
expect(entity.metadata.id).toEqual("some-cluster-id");
});
it("given cluster metadata has no kubernetes version, updates entity metadata with 'unknown' kubernetes version", () => {
updateEntityMetadata(entity, cluster);
expect(entity.metadata.kubeVersion).toEqual("unknown");
});
it("given cluster metadata has kubernetes version, updates entity metadata with kubernetes version", () => {
cluster.metadata.version = "some-kubernetes-version";
updateEntityMetadata(entity, cluster);
expect(entity.metadata.kubeVersion).toEqual("some-kubernetes-version");
});
it("given cluster has labels, updates entity metadata with labels", () => {
cluster.labels = {
"some-label": "some-value",
};
entity.metadata.labels = {
"some-other-label": "some-other-value",
};
updateEntityMetadata(entity, cluster);
expect(entity.metadata.labels).toEqual({
"some-label": "some-value",
"some-other-label": "some-other-value",
});
});
it("given cluster has labels, overwrites entity metadata with cluster labels", () => {
cluster.labels = {
"some-label": "some-cluster-value",
};
entity.metadata.labels = {
"some-label": "some-entity-value",
};
updateEntityMetadata(entity, cluster);
expect(entity.metadata.labels).toEqual({
"some-label": "some-cluster-value",
});
});
it("give cluster preferences has name, updates entity metadata with name", () => {
cluster.preferences.clusterName = "some-cluster-name";
updateEntityMetadata(entity, cluster);
expect(entity.metadata.name).toEqual("some-cluster-name");
});
});