2
2
* Copyright (c) OpenLens Authors. All rights reserved.
3
3
* Licensed under MIT License. See LICENSE in root directory for more information.
4
4
*/
5
- import type { DiContainer } from "@ogre-tools/injectable" ;
6
- import { getInjectable } from "@ogre-tools/injectable" ;
5
+
7
6
import type { RenderResult } from "@testing-library/react" ;
8
7
import React from "react" ;
9
8
import { KubernetesCluster } from "../../../../common/catalog-entities" ;
@@ -13,13 +12,18 @@ import { renderFor } from "../../test-utils/renderFor";
13
12
import { ClusterIconSetting } from "../icon-settings" ;
14
13
import { screen } from "@testing-library/react" ;
15
14
import userEvent from "@testing-library/user-event" ;
16
- import { clusterIconSettingsMenuInjectionToken } from "../cluster-settings-menu-injection-token" ;
15
+ import type { ClusterIconSettingComponentProps } from "@k8slens/cluster-settings" ;
16
+ import { clusterIconSettingsComponentInjectionToken , clusterIconSettingsMenuInjectionToken } from "@k8slens/cluster-settings" ;
17
17
import { runInAction } from "mobx" ;
18
+ import { getInjectable , type DiContainer } from "@ogre-tools/injectable" ;
18
19
19
20
const cluster = new Cluster ( {
20
21
contextName : "some-context" ,
21
22
id : "some-id" ,
22
23
kubeConfigPath : "/some/path/to/kubeconfig" ,
24
+ preferences : {
25
+ clusterName : "some-cluster-name" ,
26
+ } ,
23
27
} , {
24
28
clusterServerUrl : "https://localhost:9999" ,
25
29
} ) ;
@@ -53,6 +57,29 @@ const newMenuItem = getInjectable({
53
57
injectionToken : clusterIconSettingsMenuInjectionToken ,
54
58
} ) ;
55
59
60
+ function CustomSettingsComponent ( props : ClusterIconSettingComponentProps ) {
61
+ return (
62
+ < div data-testid = "my-react-component" >
63
+ < span > Test React Component</ span >
64
+ < span >
65
+ Cluster
66
+ { props . preferences . clusterName }
67
+ </ span >
68
+ </ div >
69
+ ) ;
70
+ }
71
+
72
+ const newSettingsReactComponent = getInjectable ( {
73
+ id : "cluster-icon-settings-react-component" ,
74
+
75
+ instantiate : ( ) => ( {
76
+ id : "test-react-component" ,
77
+ Component : CustomSettingsComponent ,
78
+ } ) ,
79
+
80
+ injectionToken : clusterIconSettingsComponentInjectionToken ,
81
+ } ) ;
82
+
56
83
describe ( "Icon settings" , ( ) => {
57
84
let rendered : RenderResult ;
58
85
let di : DiContainer ;
@@ -98,4 +125,30 @@ describe("Icon settings", () => {
98
125
expect ( rendered . getByText ( "Hello World" ) ) . toBeInTheDocument ( ) ;
99
126
} ) ;
100
127
} ) ;
128
+
129
+ describe ( "given no registrations for cluster settings component injection token" , ( ) => {
130
+ it ( "renders" , ( ) => {
131
+ expect ( rendered . baseElement ) . toMatchSnapshot ( ) ;
132
+ } ) ;
133
+
134
+ it ( "does not have any external components" , async ( ) => {
135
+ expect ( rendered . queryByTestId ( "test-react-component" ) ) . not . toBeInTheDocument ( ) ;
136
+ } ) ;
137
+ } ) ;
138
+
139
+ describe ( "given registration for cluster settings component injection token" , ( ) => {
140
+ beforeEach ( ( ) => {
141
+ runInAction ( ( ) => {
142
+ di . register ( newSettingsReactComponent ) ;
143
+ } ) ;
144
+ } ) ;
145
+
146
+ it ( "renders external component" , async ( ) => {
147
+ expect ( rendered . queryByTestId ( "my-react-component" ) ) . toBeInTheDocument ( ) ;
148
+ } ) ;
149
+
150
+ it ( "external component has cluster preferences in props" , async ( ) => {
151
+ expect ( rendered . getByText ( / s o m e - c l u s t e r - n a m e / ) ) . toBeInTheDocument ( ) ;
152
+ } ) ;
153
+ } ) ;
101
154
} ) ;
0 commit comments