mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
fix statefulset.store.test.ts
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
d216b8915b
commit
1008d4e10b
@ -98,7 +98,7 @@ export type { PodStore as PodsStore } from "../../renderer/components/+workloads
|
||||
export type { NodesStore } from "../../renderer/components/+nodes/nodes.store";
|
||||
export type { DeploymentStore } from "../../renderer/components/+workloads-deployments/store";
|
||||
export type { DaemonSetStore } from "../../renderer/components/+workloads-daemonsets/store";
|
||||
export type { StatefulSetStore } from "../../renderer/components/+workloads-statefulsets/statefulset.store";
|
||||
export type { StatefulSetStore } from "../../renderer/components/+workloads-statefulsets/store";
|
||||
export type { JobStore } from "../../renderer/components/+workloads-jobs/store";
|
||||
export type { CronJobStore } from "../../renderer/components/+workloads-cronjobs/store";
|
||||
export type { ConfigMapStore as ConfigMapsStore } from "../../renderer/components/+config-maps/config-maps.store";
|
||||
|
||||
@ -9,7 +9,7 @@ import React from "react";
|
||||
import { disposeOnUnmount, observer } from "mobx-react";
|
||||
import { eventStore } from "../+events/event.store";
|
||||
import type { DeploymentStore } from "../+workloads-deployments/store";
|
||||
import { statefulSetStore } from "../+workloads-statefulsets/statefulset.store";
|
||||
import type { StatefulSetStore } from "../+workloads-statefulsets/store";
|
||||
import type { JobStore } from "../+workloads-jobs/store";
|
||||
import type { CronJobStore } from "../+workloads-cronjobs/store";
|
||||
import type { IComputedValue } from "mobx";
|
||||
@ -33,6 +33,7 @@ import replicaSetStoreInjectable from "../+workloads-replicasets/store.injectabl
|
||||
import cronJobStoreInjectable from "../+workloads-cronjobs/store.injectable";
|
||||
import deploymentStoreInjectable from "../+workloads-deployments/store.injectable";
|
||||
import jobStoreInjectable from "../+workloads-jobs/store.injectable";
|
||||
import statefulSetStoreInjectable from "../+workloads-statefulsets/store.injectable";
|
||||
|
||||
interface Dependencies {
|
||||
detailComponents: IComputedValue<React.ComponentType<{}>[]>;
|
||||
@ -44,6 +45,7 @@ interface Dependencies {
|
||||
deploymentStore: DeploymentStore;
|
||||
jobStore: JobStore;
|
||||
cronJobStore: CronJobStore;
|
||||
statefulSetStore: StatefulSetStore;
|
||||
}
|
||||
|
||||
@observer
|
||||
@ -65,7 +67,7 @@ class NonInjectedWorkloadsOverview extends React.Component<Dependencies> {
|
||||
this.props.jobStore,
|
||||
this.props.podStore,
|
||||
this.props.replicaSetStore,
|
||||
statefulSetStore,
|
||||
this.props.statefulSetStore,
|
||||
], {
|
||||
onLoadFailure: error => this.loadErrors.push(String(error)),
|
||||
}),
|
||||
@ -127,5 +129,6 @@ export const WorkloadsOverview = withInjectables<Dependencies>(NonInjectedWorklo
|
||||
cronJobStore: di.inject(cronJobStoreInjectable),
|
||||
deploymentStore: di.inject(deploymentStoreInjectable),
|
||||
jobStore: di.inject(jobStoreInjectable),
|
||||
statefulSetStore: di.inject(statefulSetStoreInjectable),
|
||||
}),
|
||||
});
|
||||
|
||||
@ -7,7 +7,7 @@ import { workloadInjectionToken } from "../workload-injection-token";
|
||||
import { ResourceNames } from "../../../../utils/rbac";
|
||||
import navigateToPodsInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/deployments/navigate-to-deployments.injectable";
|
||||
import namespaceStoreInjectable from "../../../+namespaces/namespace-store/namespace-store.injectable";
|
||||
import statefulsetsStoreInjectable from "../../../+workloads-statefulsets/statefulsets-store.injectable";
|
||||
import statefulsetsStoreInjectable from "../../../+workloads-statefulsets/store.injectable";
|
||||
import { computed } from "mobx";
|
||||
|
||||
const statefulsetsWorkloadInjectable = getInjectable({
|
||||
|
||||
@ -0,0 +1,12 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import { asLegacyGlobalForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
|
||||
import statefulSetStoreInjectable from "./store.injectable";
|
||||
|
||||
/**
|
||||
* @deprecated use `di.inject(statefulSetStoreInjectable)` instead
|
||||
*/
|
||||
export const statefulSetStore = asLegacyGlobalForExtensionApi(statefulSetStoreInjectable);
|
||||
@ -10,11 +10,11 @@ import { StatefulSet } from "../../../../common/k8s-api/endpoints";
|
||||
import { StatefulSetScaleDialog } from "./dialog";
|
||||
import { waitFor, fireEvent } from "@testing-library/react";
|
||||
import React from "react";
|
||||
import type { OpenStatefulSetScaleDialog } from "./open.injectable";
|
||||
import type { OpenStatefulSetScaleDialog } from "./open-dialog.injectable";
|
||||
import { getDiForUnitTesting } from "../../../getDiForUnitTesting";
|
||||
import statefulSetApiInjectable from "../../../../common/k8s-api/endpoints/stateful-set.api.injectable";
|
||||
import createStoresAndApisInjectable from "../../../create-stores-apis.injectable";
|
||||
import openStatefulSetScaleDialogInjectable from "./open.injectable";
|
||||
import openStatefulSetScaleDialogInjectable from "./open-dialog.injectable";
|
||||
import { type DiRender, renderFor } from "../../test-utils/renderFor";
|
||||
|
||||
const dummyStatefulSet = new StatefulSet({
|
||||
@ -19,7 +19,7 @@ import { Notifications } from "../../notifications";
|
||||
import { cssNames } from "../../../utils";
|
||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||
import statefulSetApiInjectable from "../../../../common/k8s-api/endpoints/stateful-set.api.injectable";
|
||||
import statefulSetDialogStateInjectable from "./state.injectable";
|
||||
import statefulSetDialogStateInjectable from "./dialog-state.injectable";
|
||||
|
||||
export interface StatefulSetScaleDialogProps extends Partial<DialogProps> {
|
||||
}
|
||||
@ -5,7 +5,7 @@
|
||||
|
||||
import type { StatefulSet } from "../../../../common/k8s-api/endpoints";
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import statefulSetDialogStateInjectable from "./state.injectable";
|
||||
import statefulSetDialogStateInjectable from "./dialog-state.injectable";
|
||||
|
||||
export type OpenStatefulSetScaleDialog = (obj: StatefulSet) => void;
|
||||
|
||||
@ -7,9 +7,9 @@ import type { KubeObjectMenuProps } from "../kube-object-menu";
|
||||
import type { StatefulSet } from "../../../common/k8s-api/endpoints";
|
||||
import { MenuItem } from "../menu";
|
||||
import { Icon } from "../icon";
|
||||
import type { OpenStatefulSetScaleDialog } from "./dialog/open.injectable";
|
||||
import type { OpenStatefulSetScaleDialog } from "./scale/open-dialog.injectable";
|
||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||
import openStatefulSetScaleDialogInjectable from "./dialog/open.injectable";
|
||||
import openStatefulSetScaleDialogInjectable from "./scale/open-dialog.injectable";
|
||||
|
||||
export interface StatefulSetMenuProps extends KubeObjectMenuProps<StatefulSet> {}
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ import { DrawerItem } from "../drawer";
|
||||
import { PodDetailsStatuses } from "../+workloads-pods/pod-details-statuses";
|
||||
import { PodDetailsTolerations } from "../+workloads-pods/pod-details-tolerations";
|
||||
import { PodDetailsAffinities } from "../+workloads-pods/pod-details-affinities";
|
||||
import { statefulSetStore } from "./statefulset.store";
|
||||
import type { StatefulSetStore } from "./store";
|
||||
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
||||
import type { PodMetricData } from "../../../common/k8s-api/endpoints";
|
||||
import { getMetricsForStatefulSets, StatefulSet } from "../../../common/k8s-api/endpoints";
|
||||
@ -29,6 +29,7 @@ import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||
import type { PodStore } from "../+workloads-pods/store";
|
||||
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||
import statefulSetStoreInjectable from "./store.injectable";
|
||||
|
||||
export interface StatefulSetDetailsProps extends KubeObjectDetailsProps<StatefulSet> {
|
||||
}
|
||||
@ -36,6 +37,7 @@ export interface StatefulSetDetailsProps extends KubeObjectDetailsProps<Stateful
|
||||
interface Dependencies {
|
||||
subscribeStores: SubscribeStores;
|
||||
podStore: PodStore;
|
||||
statefulSetStore: StatefulSetStore;
|
||||
}
|
||||
|
||||
@observer
|
||||
@ -66,7 +68,7 @@ class NonInjectedStatefulSetDetails extends React.Component<StatefulSetDetailsPr
|
||||
};
|
||||
|
||||
render() {
|
||||
const { object: statefulSet, podStore } = this.props;
|
||||
const { object: statefulSet, podStore, statefulSetStore } = this.props;
|
||||
|
||||
if (!statefulSet) {
|
||||
return null;
|
||||
@ -137,6 +139,7 @@ export const StatefulSetDetails = withInjectables<Dependencies, StatefulSetDetai
|
||||
...props,
|
||||
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||
podStore: di.inject(podStoreInjectable),
|
||||
statefulSetStore: di.inject(statefulSetStoreInjectable),
|
||||
}),
|
||||
});
|
||||
|
||||
|
||||
@ -1,14 +0,0 @@
|
||||
/**
|
||||
* 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 { statefulSetStore } from "./statefulset.store";
|
||||
|
||||
const statefulsetsStoreInjectable = getInjectable({
|
||||
id: "statefulset-store",
|
||||
instantiate: () => statefulSetStore,
|
||||
causesSideEffects: true,
|
||||
});
|
||||
|
||||
export default statefulsetsStoreInjectable;
|
||||
@ -9,7 +9,7 @@ import React from "react";
|
||||
import { observer } from "mobx-react";
|
||||
import type { StatefulSet } from "../../../common/k8s-api/endpoints";
|
||||
import { podStore } from "../+workloads-pods/legacy-store";
|
||||
import { statefulSetStore } from "./statefulset.store";
|
||||
import { statefulSetStore } from "./legacy-store";
|
||||
import { eventStore } from "../+events/event.store";
|
||||
import { KubeObjectListLayout } from "../kube-object-list-layout";
|
||||
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* 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 assert from "assert";
|
||||
import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||
import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable";
|
||||
import statefulSetApiInjectable from "../../../common/k8s-api/endpoints/stateful-set.api.injectable";
|
||||
import createStoresAndApisInjectable from "../../create-stores-apis.injectable";
|
||||
import { StatefulSetStore } from "./store";
|
||||
|
||||
const statefulSetStoreInjectable = getInjectable({
|
||||
id: "stateful-set-store",
|
||||
instantiate: (di) => {
|
||||
assert(di.inject(createStoresAndApisInjectable), "statefulSetStore is only available in certain environment");
|
||||
|
||||
const api = di.inject(statefulSetApiInjectable);
|
||||
const apiManager = di.inject(apiManagerInjectable);
|
||||
const store = new StatefulSetStore({
|
||||
getPodsByOwnerId: di.inject(getPodsByOwnerIdInjectable),
|
||||
}, api);
|
||||
|
||||
apiManager.registerStore(store);
|
||||
|
||||
return store;
|
||||
},
|
||||
});
|
||||
|
||||
export default statefulSetStoreInjectable;
|
||||
@ -3,16 +3,23 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import { podStore } from "../+workloads-pods/legacy-store";
|
||||
import { apiManager } from "../../../common/k8s-api/api-manager";
|
||||
import type { GetPodsByOwnerId } from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||
import type { StatefulSet, StatefulSetApi } from "../../../common/k8s-api/endpoints";
|
||||
import { PodStatusPhase, statefulSetApi } from "../../../common/k8s-api/endpoints";
|
||||
import { PodStatusPhase } from "../../../common/k8s-api/endpoints";
|
||||
import type { KubeObjectStoreOptions } from "../../../common/k8s-api/kube-object.store";
|
||||
import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
|
||||
import { isClusterPageContext } from "../../utils";
|
||||
|
||||
interface Dependencies {
|
||||
getPodsByOwnerId: GetPodsByOwnerId;
|
||||
}
|
||||
|
||||
export class StatefulSetStore extends KubeObjectStore<StatefulSet, StatefulSetApi> {
|
||||
constructor(protected readonly dependencies: Dependencies, api: StatefulSetApi, opts?: KubeObjectStoreOptions) {
|
||||
super(api, opts);
|
||||
}
|
||||
|
||||
getChildPods(statefulSet: StatefulSet) {
|
||||
return podStore.getPodsByOwnerId(statefulSet.getId());
|
||||
return this.dependencies.getPodsByOwnerId(statefulSet.getId());
|
||||
}
|
||||
|
||||
getStatuses(statefulSets: StatefulSet[]) {
|
||||
@ -33,11 +40,3 @@ export class StatefulSetStore extends KubeObjectStore<StatefulSet, StatefulSetAp
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
export const statefulSetStore = isClusterPageContext()
|
||||
? new StatefulSetStore(statefulSetApi)
|
||||
: undefined as never;
|
||||
|
||||
if (isClusterPageContext()) {
|
||||
apiManager.registerStore(statefulSetStore);
|
||||
}
|
||||
@ -4,9 +4,12 @@
|
||||
*/
|
||||
|
||||
import { observable } from "mobx";
|
||||
import { podStore } from "../+workloads-pods/legacy-store";
|
||||
import { statefulSetStore } from "../+workloads-statefulsets/statefulset.store";
|
||||
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
||||
import type { StatefulSetStore } from "../+workloads-statefulsets/store";
|
||||
import statefulSetStoreInjectable from "../+workloads-statefulsets/store.injectable";
|
||||
import { StatefulSet, Pod } from "../../../common/k8s-api/endpoints";
|
||||
import createStoresAndApisInjectable from "../../create-stores-apis.injectable";
|
||||
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
||||
|
||||
const runningStatefulSet = new StatefulSet({
|
||||
apiVersion: "foo",
|
||||
@ -128,7 +131,17 @@ const failedPod = new Pod({
|
||||
});
|
||||
|
||||
describe("StatefulSet Store tests", () => {
|
||||
beforeAll(() => {
|
||||
let statefulSetStore: StatefulSetStore;
|
||||
|
||||
beforeEach(() => {
|
||||
const di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||
|
||||
di.override(createStoresAndApisInjectable, () => true);
|
||||
|
||||
statefulSetStore = di.inject(statefulSetStoreInjectable);
|
||||
|
||||
const podStore = di.inject(podStoreInjectable);
|
||||
|
||||
// Add pods to pod store
|
||||
podStore.items = observable.array([
|
||||
runningPod,
|
||||
|
||||
@ -9,7 +9,7 @@ import { Redirect } from "react-router";
|
||||
import { ConfirmDialog } from "../../components/confirm-dialog";
|
||||
import { DeploymentScaleDialog } from "../../components/+workloads-deployments/scale/dialog";
|
||||
import { CronJobTriggerDialog } from "../../components/+workloads-cronjobs/cronjob-trigger-dialog";
|
||||
import { StatefulSetScaleDialog } from "../../components/+workloads-statefulsets/dialog/dialog";
|
||||
import { StatefulSetScaleDialog } from "../../components/+workloads-statefulsets/scale/dialog";
|
||||
import { ReplicaSetScaleDialog } from "../../components/+workloads-replicasets/scale-dialog/dialog";
|
||||
import { CommandContainer } from "../../components/command-palette/command-container";
|
||||
import { ErrorBoundary } from "../../components/error-boundary";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user