From 7b8bd1e758a349633cc1cc8ba1110e8157ef9879 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Mon, 8 May 2023 12:48:33 +0300 Subject: [PATCH] chore: move kube-api related tests from core Signed-off-by: Jari Kolehmainen --- .../k8s-api/__tests__/deployment.api.test.ts | 51 ----------------- .../src/endpoints/deployment.api.test.ts | 53 +++++++++++++++++ .../src/endpoints}/stateful-set.api.test.ts | 57 ++++++++++--------- 3 files changed, 83 insertions(+), 78 deletions(-) delete mode 100644 packages/core/src/common/k8s-api/__tests__/deployment.api.test.ts create mode 100644 packages/utility-features/kube-api/src/endpoints/deployment.api.test.ts rename packages/{core/src/common/k8s-api/__tests__ => utility-features/kube-api/src/endpoints}/stateful-set.api.test.ts (52%) diff --git a/packages/core/src/common/k8s-api/__tests__/deployment.api.test.ts b/packages/core/src/common/k8s-api/__tests__/deployment.api.test.ts deleted file mode 100644 index af9dc386dd..0000000000 --- a/packages/core/src/common/k8s-api/__tests__/deployment.api.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting"; -import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable"; -import apiKubeInjectable from "../../../renderer/k8s/api-kube.injectable"; -import deploymentApiInjectable from "../endpoints/deployment.api.injectable"; -import type { KubeJsonApi, DeploymentApi } from "@k8slens/kube-api"; - -describe("DeploymentApi", () => { - let deploymentApi: DeploymentApi; - let kubeJsonApi: jest.Mocked; - - beforeEach(() => { - const di = getDiForUnitTesting(); - - di.override(storesAndApisCanBeCreatedInjectable, () => true); - kubeJsonApi = { - getResponse: jest.fn(), - get: jest.fn(), - post: jest.fn(), - put: jest.fn(), - patch: jest.fn(), - del: jest.fn(), - } as never; - di.override(apiKubeInjectable, () => kubeJsonApi); - - deploymentApi = di.inject(deploymentApiInjectable); - }); - - describe("scale", () => { - it("requests Kubernetes API with PATCH verb and correct amount of replicas", async () => { - await deploymentApi.scale({ namespace: "default", name: "deployment-1" }, 5); - - expect(kubeJsonApi.patch).toHaveBeenCalledWith("/apis/apps/v1/namespaces/default/deployments/deployment-1/scale", { - data: { - spec: { - replicas: 5, - }, - }, - }, - { - headers: { - "content-type": "application/merge-patch+json", - }, - }); - }); - }); -}); diff --git a/packages/utility-features/kube-api/src/endpoints/deployment.api.test.ts b/packages/utility-features/kube-api/src/endpoints/deployment.api.test.ts new file mode 100644 index 0000000000..801aea04e1 --- /dev/null +++ b/packages/utility-features/kube-api/src/endpoints/deployment.api.test.ts @@ -0,0 +1,53 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { KubeJsonApi, DeploymentApi } from "@k8slens/kube-api"; + +describe("DeploymentApi", () => { + let deploymentApi: DeploymentApi; + let kubeJsonApi: jest.Mocked; + + beforeEach(() => { + kubeJsonApi = { + getResponse: jest.fn(), + get: jest.fn(), + post: jest.fn(), + put: jest.fn(), + patch: jest.fn(), + del: jest.fn(), + } as never; + + deploymentApi = new DeploymentApi({ + logger: { + info: jest.fn(), + debug: jest.fn(), + error: jest.fn(), + } as any, + maybeKubeApi: kubeJsonApi, + }); + }); + + describe("scale", () => { + it("requests Kubernetes API with PATCH verb and correct amount of replicas", async () => { + await deploymentApi.scale({ namespace: "default", name: "deployment-1" }, 5); + + expect(kubeJsonApi.patch).toHaveBeenCalledWith( + "/apis/apps/v1/namespaces/default/deployments/deployment-1/scale", + { + data: { + spec: { + replicas: 5, + }, + }, + }, + { + headers: { + "content-type": "application/merge-patch+json", + }, + }, + ); + }); + }); +}); diff --git a/packages/core/src/common/k8s-api/__tests__/stateful-set.api.test.ts b/packages/utility-features/kube-api/src/endpoints/stateful-set.api.test.ts similarity index 52% rename from packages/core/src/common/k8s-api/__tests__/stateful-set.api.test.ts rename to packages/utility-features/kube-api/src/endpoints/stateful-set.api.test.ts index aa601a0006..9329fac904 100644 --- a/packages/core/src/common/k8s-api/__tests__/stateful-set.api.test.ts +++ b/packages/utility-features/kube-api/src/endpoints/stateful-set.api.test.ts @@ -3,32 +3,32 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable"; -import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting"; -import apiKubeInjectable from "../../../renderer/k8s/api-kube.injectable"; -import statefulSetApiInjectable from "../endpoints/stateful-set.api.injectable"; -import type { KubeJsonApi, StatefulSetApi } from "@k8slens/kube-api"; -import type { AsyncFnMock } from "@async-fn/jest"; -import asyncFn from "@async-fn/jest"; +import { KubeJsonApi, StatefulSetApi } from "@k8slens/kube-api"; import { flushPromises } from "@k8slens/test-utils"; +import asyncFn from "@async-fn/jest"; +import type { AsyncFnMock } from "@async-fn/jest"; describe("StatefulSetApi", () => { let statefulSetApi: StatefulSetApi; + let kubeJsonApi: KubeJsonApi; let kubeJsonApiPatchMock: AsyncFnMock; let kubeJsonApiGetMock: AsyncFnMock; beforeEach(() => { - const di = getDiForUnitTesting(); - - di.override(storesAndApisCanBeCreatedInjectable, () => true); - kubeJsonApiPatchMock = asyncFn(); - kubeJsonApiGetMock = asyncFn(); - di.override(apiKubeInjectable, () => ({ + kubeJsonApiGetMock = asyncFn(); + kubeJsonApiPatchMock = asyncFn(); + kubeJsonApi = { get: kubeJsonApiGetMock, patch: kubeJsonApiPatchMock, - } as Partial as KubeJsonApi)); - - statefulSetApi = di.inject(statefulSetApiInjectable); + } as Partial as KubeJsonApi; + statefulSetApi = new StatefulSetApi({ + logger: { + info: jest.fn(), + debug: jest.fn(), + error: jest.fn(), + } as any, + maybeKubeApi: kubeJsonApi, + }); }); describe("scale", () => { @@ -36,18 +36,21 @@ describe("StatefulSetApi", () => { const req = statefulSetApi.scale({ namespace: "default", name: "statefulset-1" }, 5); await flushPromises(); - expect(kubeJsonApiPatchMock).toHaveBeenCalledWith("/apis/apps/v1/namespaces/default/statefulsets/statefulset-1/scale", { - data: { - spec: { - replicas: 5, + expect(kubeJsonApiPatchMock).toHaveBeenCalledWith( + "/apis/apps/v1/namespaces/default/statefulsets/statefulset-1/scale", + { + data: { + spec: { + replicas: 5, + }, }, }, - }, - { - headers: { - "content-type": "application/merge-patch+json", + { + headers: { + "content-type": "application/merge-patch+json", + }, }, - }); + ); await kubeJsonApiPatchMock.resolve({}); await req; @@ -57,8 +60,8 @@ describe("StatefulSetApi", () => { const req = statefulSetApi.getReplicas({ namespace: "default", name: "statefulset-1" }); await flushPromises(); - expect(kubeJsonApiGetMock).toHaveBeenCalledWith("/apis/apps/v1/namespaces/default/statefulsets/statefulset-1/scale"); - await kubeJsonApiGetMock.resolve({ status: { replicas: 10 }}); + expect(kubeJsonApi.get).toHaveBeenCalledWith("/apis/apps/v1/namespaces/default/statefulsets/statefulset-1/scale"); + await kubeJsonApiGetMock.resolve({ status: { replicas: 10 } }); expect(await req).toBe(10); });