chore: Update tests to use more business logic

- To have a higher confidence in the code, given that the old tests didn't save us
  from modifying the code before.

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton committed 2023-04-24 10:17:24 -04:00
1 parent bc149f0627
commit 5dc94f291b
9 files changed
+197 -866

No files matched your search

@@ -28,8 +28,8 @@ const editResourceModelInjectable = getInjectable({
const store = di.inject(editResourceTabStoreInjectable);
const model = new EditResourceModel({
callForResource: di.inject(requestKubeResourceInjectable),
callForPatchResource: di.inject(requestPatchKubeResourceInjectable),
requestKubeResource: di.inject(requestKubeResourceInjectable),
requestPatchKubeResource: di.inject(requestPatchKubeResourceInjectable),
showSuccessNotification: di.inject(showSuccessNotificationInjectable),
showErrorNotification: di.inject(showErrorNotificationInjectable),
store,
@@ -50,8 +50,8 @@ const editResourceModelInjectable = getInjectable({
export default editResourceModelInjectable;
interface Dependencies {
callForResource: RequestKubeResource;
callForPatchResource: RequestPatchKubeResource;
requestKubeResource: RequestKubeResource;
requestPatchKubeResource: RequestPatchKubeResource;
waitForEditingResource: () => Promise<EditingResource>;
showSuccessNotification: ShowNotification;
showErrorNotification: ShowNotification;
@@ -134,7 +134,7 @@ export class EditResourceModel {
load = async (): Promise<void> => {
await this.dependencies.waitForEditingResource();
let result = await this.dependencies.callForResource(this.selfLink);
let result = await this.dependencies.requestKubeResource(this.selfLink);
if (!result.callWasSuccessful) {
return void this.dependencies.showErrorNotification(`Loading resource failed: ${result.error}`);
@@ -149,7 +149,7 @@ export class EditResourceModel {
parsed.apiVersion = result.response.metadata.labels[EditResourceLabelName];
result = await this.dependencies.callForResource(createKubeApiURL(parsed));
result = await this.dependencies.requestKubeResource(createKubeApiURL(parsed));
}
if (!result.callWasSuccessful) {
@@ -205,7 +205,7 @@ export class EditResourceModel {
return null;
}
const result = await this.dependencies.callForPatchResource(selfLink, patches);
const result = await this.dependencies.requestPatchKubeResource(selfLink, patches);
if (!result.callWasSuccessful) {
this.dependencies.showErrorNotification((
@@ -1,8 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getGlobalOverrideForFunction } from "@k8slens/test-utils";
import requestKubeResourceInjectable from "./request-kube-resource.injectable";
export default getGlobalOverrideForFunction(requestKubeResourceInjectable);
@@ -7,10 +7,10 @@ import type { KubeObjectMetadata, KubeObjectScope } from "../../../../../common/
import { KubeObject } from "../../../../../common/k8s-api/kube-object";
import type { AsyncResult } from "@k8slens/utilities";
import { getErrorMessage } from "../../../../../common/utils/get-error-message";
import apiKubeInjectable from "../../../../k8s/api-kube.injectable";
import type { Writable } from "type-fest";
import type { KubeJsonApiData } from "../../../../../common/k8s-api/kube-json-api";
import { parseKubeApi } from "../../../../../common/k8s-api/kube-api-parse";
import apiKubeGetInjectable from "../../../../k8s/api-kube-get.injectable";
export type RequestKubeResource = (selfLink: string) => AsyncResult<KubeObject | undefined>;
@@ -18,7 +18,7 @@ const requestKubeResourceInjectable = getInjectable({
id: "request-kube-resource",
instantiate: (di): RequestKubeResource => {
const apiKube = di.inject(apiKubeInjectable);
const apiKubeGet = di.inject(apiKubeGetInjectable);
return async (selfLink) => {
const parsed = parseKubeApi(selfLink);
@@ -28,7 +28,7 @@ const requestKubeResourceInjectable = getInjectable({
}
try {
const rawData = await apiKube.get(selfLink) as KubeJsonApiData<KubeObjectMetadata<KubeObjectScope>, unknown, unknown>;
const rawData = await apiKubeGet(selfLink) as KubeJsonApiData<KubeObjectMetadata<KubeObjectScope>, unknown, unknown>;
(rawData.metadata as Writable<typeof rawData.metadata>).selfLink = selfLink;
@@ -41,8 +41,6 @@ const requestKubeResourceInjectable = getInjectable({
}
};
},
causesSideEffects: true,
});
export default requestKubeResourceInjectable;
@@ -1,8 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getGlobalOverrideForFunction } from "@k8slens/test-utils";
import requestPatchKubeResourceInjectable from "./request-patch-kube-resource.injectable";
export default getGlobalOverrideForFunction(requestPatchKubeResourceInjectable);
@@ -6,19 +6,19 @@ import { getInjectable } from "@ogre-tools/injectable";
import type { AsyncResult } from "@k8slens/utilities";
import type { JsonPatch } from "../../../../../common/k8s-api/kube-object.store";
import { getErrorMessage } from "../../../../../common/utils/get-error-message";
import apiKubeInjectable from "../../../../k8s/api-kube.injectable";
import { patchTypeHeaders } from "../../../../../common/k8s-api/kube-api";
import apiKubePatchInjectable from "../../../../k8s/api-kube-patch.injectable";
export type RequestPatchKubeResource = (selfLink: string, patch: JsonPatch) => AsyncResult<{ name: string; kind: string }>;
const requestPatchKubeResourceInjectable = getInjectable({
id: "request-patch-kube-resource",
instantiate: (di): RequestPatchKubeResource => {
const apiKube = di.inject(apiKubeInjectable);
const apiKubePatch = di.inject(apiKubePatchInjectable);
return async (selfLink, patch) => {
try {
const kubeObject = await apiKube.patch(selfLink, { data: patch }, {
const { metadata, kind } = await apiKubePatch(selfLink, { data: patch }, {
headers: {
"content-type": patchTypeHeaders.json,
},
@@ -26,7 +26,7 @@ const requestPatchKubeResourceInjectable = getInjectable({
return {
callWasSuccessful: true,
response: { name: kubeObject.metadata.name, kind: kubeObject.kind },
response: { name: metadata.name, kind },
};
} catch (e) {
return {
@@ -36,8 +36,6 @@ const requestPatchKubeResourceInjectable = getInjectable({
}
};
},
causesSideEffects: true,
});
export default requestPatchKubeResourceInjectable;
@@ -0,0 +1,20 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { KubeJsonApi } from "../../common/k8s-api/kube-json-api";
import apiKubeInjectable from "./api-kube.injectable";
export type ApiKubeGet = KubeJsonApi["get"];
const apiKubeGetInjectable = getInjectable({
id: "api-kube-get",
instantiate: (di): ApiKubeGet => {
const apiKube = di.inject(apiKubeInjectable);
return (...params) => apiKube.get(...params);
},
});
export default apiKubeGetInjectable;
@@ -0,0 +1,20 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { KubeJsonApi } from "../../common/k8s-api/kube-json-api";
import apiKubeInjectable from "./api-kube.injectable";
export type ApiKubePatch = KubeJsonApi["patch"];
const apiKubePatchInjectable = getInjectable({
id: "api-kube-patch",
instantiate: (di): ApiKubePatch => {
const apiKube = di.inject(apiKubeInjectable);
return (...params) => apiKube.patch(...params);
},
});
export default apiKubePatchInjectable;