From 0c1c7b3996a7e1ba560454df05901922cea0e749 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 24 Feb 2023 08:56:51 -0500 Subject: [PATCH] Add failing unit test Signed-off-by: Sebastian Malton --- .../k8s-api/__tests__/api-manager.test.ts | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts b/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts index b83f52c3f0..2e7e545f76 100644 --- a/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts +++ b/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts @@ -19,6 +19,9 @@ import { KubeObject } from "../kube-object"; import { KubeObjectStore } from "../kube-object.store"; import maybeKubeApiInjectable from "../maybe-kube-api.injectable"; +// eslint-disable-next-line no-restricted-imports +import { KubeApi as ExternalKubeApi } from "../../../extensions/common-api/k8s-api"; + class TestApi extends KubeApi { protected async checkPreferredVersion() { return; @@ -54,7 +57,7 @@ describe("ApiManager", () => { }); describe("registerApi", () => { - it("re-register store if apiBase changed", async () => { + it("re-register store if apiBase changed", () => { const apiBase = "apis/v1/foo"; const fallbackApiBase = "/apis/extensions/v1beta1/foo"; const kubeApi = new TestApi({ @@ -72,21 +75,48 @@ describe("ApiManager", () => { logger: di.inject(loggerInjectable), }, kubeApi); - apiManager.registerApi(apiBase, kubeApi); + apiManager.registerApi(kubeApi); // Define to use test api for ingress store Object.defineProperty(kubeStore, "api", { value: kubeApi }); - apiManager.registerStore(kubeStore, [kubeApi]); + apiManager.registerStore(kubeStore); // Test that store is returned with original apiBase expect(apiManager.getStore(kubeApi)).toBe(kubeStore); // Change apiBase similar as checkPreferredVersion does Object.defineProperty(kubeApi, "apiBase", { value: fallbackApiBase }); - apiManager.registerApi(fallbackApiBase, kubeApi); + apiManager.registerApi(kubeApi); // Test that store is returned with new apiBase expect(apiManager.getStore(kubeApi)).toBe(kubeStore); }); }); + + describe("technical tests for autorun", () => { + it("given two extensions register apis with the same apibase, settle into using the second", () => { + const apiBase = "/apis/aquasecurity.github.io/v1alpha1/vulnerabilityreports"; + const firstApi = Object.assign(new ExternalKubeApi({ + objectConstructor: KubeObject, + apiBase, + kind: "VulnerabilityReport", + }), { + myField: 1, + }); + const secondApi = Object.assign(new ExternalKubeApi({ + objectConstructor: KubeObject, + apiBase, + kind: "VulnerabilityReport", + }), { + myField: 2, + }); + + void firstApi; + void secondApi; + + expect(apiManager.getApi(apiBase)).toMatchObject({ + myField: 2, + }); + }); + }); });