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-spec.test.ts
Alex Andreev 763816f71f
Respect cluster avatars entity background color (#7365)
* 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>
2023-03-17 13:50:30 +03:00

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");
});
});