mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Add iconBackgroundColor cluster preference type Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Set custom backround for hotbar entities Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Remove unused code from Catalog Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Update entity background if preferences background changes Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Set avatar backgrounds from entity Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Clean up Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Clean up in hotbar entity icon Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Fix setting up entity background Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Use single icon prop Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Cleaning up hotbar entity icon Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Fixing test to ensure icon has data:image Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Add more test cases Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> --------- Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
165 lines
5.1 KiB
TypeScript
165 lines
5.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 { Cluster } from "../../common/cluster/cluster";
|
|
import { getDiForUnitTesting } from "../getDiForUnitTesting";
|
|
import type { UpdateEntitySpec } from "./update-entity-spec.injectable";
|
|
import updateEntitySpecInjectable from "./update-entity-spec.injectable";
|
|
|
|
describe("update-entity-spec", () => {
|
|
let cluster: Cluster;
|
|
let entity: KubernetesCluster;
|
|
let updateEntitySpec: UpdateEntitySpec;
|
|
|
|
beforeEach(() => {
|
|
const di = getDiForUnitTesting();
|
|
|
|
di.override(directoryForUserDataInjectable, () => "/some-user-store-path");
|
|
di.override(appPathsStateInjectable, () => ({
|
|
get: () => ({} as AppPaths),
|
|
set: () => {},
|
|
}));
|
|
|
|
updateEntitySpec = di.inject(updateEntitySpecInjectable);
|
|
|
|
cluster = new Cluster({
|
|
id: "some-id",
|
|
contextName: "some-context",
|
|
kubeConfigPath: "minikube-config.yml",
|
|
}, {
|
|
clusterServerUrl: "foo",
|
|
});
|
|
|
|
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 has icon, updates entity spec with icon", () => {
|
|
cluster.preferences.icon = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/";
|
|
updateEntitySpec(entity, cluster);
|
|
expect(entity.spec.icon?.src).toEqual("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/");
|
|
});
|
|
|
|
it("given cluster has custom icon background color set, updates entity spec with icon", () => {
|
|
cluster.preferences.icon = "#ff0000";
|
|
updateEntitySpec(entity, cluster);
|
|
expect(entity.spec.icon?.background).toEqual("#ff0000");
|
|
});
|
|
|
|
it("given cluster has custom icon background color set, does not update entity icon src", () => {
|
|
cluster.preferences.icon = "#ff0000";
|
|
updateEntitySpec(entity, cluster);
|
|
expect(entity.spec.icon?.src).toBeUndefined();
|
|
});
|
|
|
|
it("given cluster icon is null, deletes icon from both", () => {
|
|
cluster.preferences.icon = null;
|
|
entity.spec.icon = { src : "some-icon" };
|
|
|
|
updateEntitySpec(entity, cluster);
|
|
expect(entity.spec.icon).toBeUndefined();
|
|
expect(cluster.preferences.icon).toBeUndefined();
|
|
});
|
|
|
|
it("given entity has no metrics, adds source as local", () => {
|
|
updateEntitySpec(entity, cluster);
|
|
expect(entity.spec.metrics?.source).toEqual("local");
|
|
});
|
|
|
|
it("given entity has metrics, does not change source", () => {
|
|
entity.spec.metrics = { source: "some-source" };
|
|
entity.spec.metrics.prometheus = {
|
|
address: {
|
|
namespace: "some-namespace",
|
|
port: 42,
|
|
service: "some-service",
|
|
prefix: "some-prefix",
|
|
},
|
|
};
|
|
|
|
cluster.preferences.prometheus = {
|
|
namespace: "some-other-namespace",
|
|
port: 666,
|
|
service: "some-other-service",
|
|
prefix: "some-other-prefix",
|
|
};
|
|
|
|
updateEntitySpec(entity, cluster);
|
|
|
|
expect(entity.spec.metrics?.source).toEqual("some-source");
|
|
expect(entity.spec.metrics?.prometheus?.address).toEqual({
|
|
namespace: "some-namespace",
|
|
port: 42,
|
|
service: "some-service",
|
|
prefix: "some-prefix",
|
|
});
|
|
});
|
|
|
|
it("given entity has local prometheus source, updates entity spec with prometheus provider", () => {
|
|
entity.spec.metrics = { source: "local" };
|
|
|
|
cluster.preferences.prometheusProvider = {
|
|
type: "some-prometheus-provider-type",
|
|
};
|
|
cluster.preferences.prometheus = {
|
|
namespace: "some-namespace",
|
|
port: 42,
|
|
service: "some-service",
|
|
prefix: "some-prefix",
|
|
};
|
|
|
|
updateEntitySpec(entity, cluster);
|
|
expect(entity.spec.metrics?.prometheus?.address).toEqual({
|
|
namespace: "some-namespace",
|
|
port: 42,
|
|
service: "some-service",
|
|
prefix: "some-prefix",
|
|
});
|
|
|
|
expect(entity.spec.metrics?.prometheus?.type).toEqual("some-prometheus-provider-type");
|
|
});
|
|
|
|
it("given entity has no metrics, updates entity spec with prometheus provider", () => {
|
|
expect(entity.spec.metrics).toBeUndefined();
|
|
|
|
cluster.preferences.prometheusProvider = {
|
|
type: "some-prometheus-provider-type",
|
|
};
|
|
cluster.preferences.prometheus = {
|
|
namespace: "some-namespace",
|
|
port: 42,
|
|
service: "some-service",
|
|
prefix: "some-prefix",
|
|
};
|
|
|
|
updateEntitySpec(entity, cluster);
|
|
|
|
expect(entity.spec.metrics?.prometheus?.address).toEqual({
|
|
namespace: "some-namespace",
|
|
port: 42,
|
|
service: "some-service",
|
|
prefix: "some-prefix",
|
|
});
|
|
|
|
expect(entity.spec.metrics?.prometheus?.type).toEqual("some-prometheus-provider-type");
|
|
});
|
|
|
|
});
|