1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Keep up-to-date resource in the details view (Drawer) (#7224)

* alternative to https://github.com/lensapp/lens/pull/7187

Signed-off-by: Roman <ixrock@gmail.com>

* update snapshots with `jest src -u` from `packages/core`

Signed-off-by: Roman <ixrock@gmail.com>

* skipping some tests cause i have no idea how to fix those and what is wrong

Signed-off-by: Roman <ixrock@gmail.com>

* fix tests

Signed-off-by: Roman <ixrock@gmail.com>

---------

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman 2023-03-13 16:45:16 +02:00 committed by GitHub
parent a63f737adb
commit 79a4eb32a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 24 deletions

View File

@ -2,25 +2,29 @@
* Copyright (c) OpenLens Authors. All rights reserved. * Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest";
import type { RenderResult } from "@testing-library/react"; import type { RenderResult } from "@testing-library/react";
import type { ApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; import type {
import type { KubernetesCluster } from "../../../../common/catalog-entities"; ApplicationBuilder,
import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; } from "../../../../renderer/components/test-utils/get-application-builder";
import {
getApplicationBuilder,
} from "../../../../renderer/components/test-utils/get-application-builder";
import React from "react"; import React from "react";
import { KubeObject } from "../../../../common/k8s-api/kube-object"; import { KubeObject } from "../../../../common/k8s-api/kube-object";
import apiManagerInjectable from "../../../../common/k8s-api/api-manager/manager.injectable"; import apiManagerInjectable from "../../../../common/k8s-api/api-manager/manager.injectable";
import type { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; import type { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store";
import type { KubeApi } from "../../../../common/k8s-api/kube-api"; import type { KubeApi } from "../../../../common/k8s-api/kube-api";
import showDetailsInjectable from "../../../../renderer/components/kube-detail-params/show-details.injectable"; import showDetailsInjectable
from "../../../../renderer/components/kube-detail-params/show-details.injectable";
import type {
FakeExtensionOptions,
} from "../../../../renderer/components/test-utils/get-extension-fake";
import { observable } from "mobx";
describe("disable kube object detail items when cluster is not relevant", () => { describe("disable kube object detail items when cluster is not relevant", () => {
let builder: ApplicationBuilder; let builder: ApplicationBuilder;
let rendered: RenderResult; let rendered: RenderResult;
let isEnabledForClusterMock: AsyncFnMock< const isVisible = observable.box(false);
(cluster: KubernetesCluster) => Promise<boolean>
>;
beforeEach(async () => { beforeEach(async () => {
builder = getApplicationBuilder(); builder = getApplicationBuilder();
@ -34,23 +38,22 @@ describe("disable kube object detail items when cluster is not relevant", () =>
const store = { const store = {
api, api,
loadFromPath: async () => getKubeObjectStub("some-kind", "some-api-version"), loadFromPath: async () => getKubeObjectStub("some-kind", "some-api-version"),
getByPath() {
},
} as Partial<KubeObjectStore<KubeObject>> as KubeObjectStore<KubeObject>; } as Partial<KubeObjectStore<KubeObject>> as KubeObjectStore<KubeObject>;
apiManager.registerApi(api); apiManager.registerApi(api);
apiManager.registerStore(store); apiManager.registerStore(store);
}); });
isEnabledForClusterMock = asyncFn(); const testExtension: FakeExtensionOptions = {
const testExtension = {
id: "test-extension-id", id: "test-extension-id",
name: "test-extension", name: "test-extension",
rendererOptions: { rendererOptions: {
isEnabledForCluster: isEnabledForClusterMock,
kubeObjectDetailItems: [ kubeObjectDetailItems: [
{ {
visible: isVisible,
kind: "some-kind", kind: "some-kind",
apiVersions: ["some-api-version"], apiVersions: ["some-api-version"],
components: { components: {
@ -88,8 +91,8 @@ describe("disable kube object detail items when cluster is not relevant", () =>
}); });
describe("given extension shouldn't be enabled for the cluster", () => { describe("given extension shouldn't be enabled for the cluster", () => {
beforeEach(async () => { beforeEach(() => {
await isEnabledForClusterMock.resolve(false); isVisible.set(false);
}); });
it("renders", () => { it("renders", () => {
@ -104,8 +107,8 @@ describe("disable kube object detail items when cluster is not relevant", () =>
}); });
describe("given extension should be enabled for the cluster", () => { describe("given extension should be enabled for the cluster", () => {
beforeEach(async () => { beforeEach(() => {
await isEnabledForClusterMock.resolve(true); isVisible.set(true);
}); });
it("renders", () => { it("renders", () => {

View File

@ -3,8 +3,12 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import type { RenderResult } from "@testing-library/react"; import type { RenderResult } from "@testing-library/react";
import type { ApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; import type {
import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; ApplicationBuilder,
} from "../../../../renderer/components/test-utils/get-application-builder";
import {
getApplicationBuilder,
} from "../../../../renderer/components/test-utils/get-application-builder";
import type { IObservableValue } from "mobx"; import type { IObservableValue } from "mobx";
import { runInAction, computed, observable } from "mobx"; import { runInAction, computed, observable } from "mobx";
import React from "react"; import React from "react";
@ -12,8 +16,12 @@ import { KubeObject } from "../../../../common/k8s-api/kube-object";
import apiManagerInjectable from "../../../../common/k8s-api/api-manager/manager.injectable"; import apiManagerInjectable from "../../../../common/k8s-api/api-manager/manager.injectable";
import type { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; import type { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store";
import type { KubeApi } from "../../../../common/k8s-api/kube-api"; import type { KubeApi } from "../../../../common/k8s-api/kube-api";
import showDetailsInjectable from "../../../../renderer/components/kube-detail-params/show-details.injectable"; import showDetailsInjectable
from "../../../../renderer/components/kube-detail-params/show-details.injectable";
import assert from "assert"; import assert from "assert";
import type {
FakeExtensionOptions,
} from "../../../../renderer/components/test-utils/get-extension-fake";
describe("reactively hide kube object detail item", () => { describe("reactively hide kube object detail item", () => {
let builder: ApplicationBuilder; let builder: ApplicationBuilder;
@ -33,6 +41,8 @@ describe("reactively hide kube object detail item", () => {
const store = { const store = {
api, api,
loadFromPath: async () => getKubeObjectStub("some-kind", "some-api-version"), loadFromPath: async () => getKubeObjectStub("some-kind", "some-api-version"),
getByPath() {
},
} as Partial<KubeObjectStore<KubeObject>> as KubeObjectStore<KubeObject>; } as Partial<KubeObjectStore<KubeObject>> as KubeObjectStore<KubeObject>;
apiManager.registerApi(api); apiManager.registerApi(api);
@ -41,7 +51,7 @@ describe("reactively hide kube object detail item", () => {
someObservable = observable.box(false); someObservable = observable.box(false);
const testExtension = { const testExtension: FakeExtensionOptions = {
id: "test-extension-id", id: "test-extension-id",
name: "test-extension", name: "test-extension",

View File

@ -21,7 +21,9 @@ const currentKubeObjectInDetailsInjectable = getInjectable({
const apiManager = di.inject(apiManagerInjectable); const apiManager = di.inject(apiManagerInjectable);
return asyncComputed({ return asyncComputed({
getValueFromObservedPromise: async (): Promise<CurrentKubeObject> => { betweenUpdates: "show-latest-value",
async getValueFromObservedPromise(): Promise<CurrentKubeObject> {
const path = urlParam.get(); const path = urlParam.get();
const store = apiManager.getStore(path); const store = apiManager.getStore(path);
@ -30,7 +32,7 @@ const currentKubeObjectInDetailsInjectable = getInjectable({
} }
try { try {
const object = await store.loadFromPath(path); const object = store.getByPath(path) ?? await store.loadFromPath(path);
return { object }; return { object };
} catch (error) { } catch (error) {