1- import { GUID } from "mendix" ;
2- import { isValidElement , ReactElement , ReactNode } from "react" ;
1+ import "@testing-library/jest-dom" ;
32import { render , screen } from "@testing-library/react" ;
43import userEvent from "@testing-library/user-event" ;
54import { UserEvent } from "@testing-library/user-event/setup/setup" ;
6- import "@testing-library/jest-dom ";
7- import { TreeNode , TreeNodeProps , TreeNodeState } from "../TreeNode " ;
5+ import { GUID } from "mendix ";
6+ import { isValidElement , ReactElement , ReactNode } from "react " ;
87import { renderTreeNodeHeaderIcon } from "../HeaderIcon" ;
8+ import { TreeNode , TreeNodeProps , TreeNodeState } from "../TreeNode" ;
99
1010jest . mock ( "../../assets/loading-circle.svg" , ( ) => "loading-logo.svg" ) ;
1111
1212interface TreeNodeItem {
1313 id : GUID ;
1414 headerContent : string ;
15+ isUserDefinedLeafNode : boolean ;
1516 bodyContent : ReactElement ;
1617}
1718
1819const items : TreeNodeItem [ ] = [
19- { id : "11" as GUID , headerContent : "First header" , bodyContent : < div > First content</ div > } ,
20- { id : "22" as GUID , headerContent : "Second header" , bodyContent : < div > Second content</ div > } ,
21- { id : "33" as GUID , headerContent : "Third header" , bodyContent : < div > Third content</ div > }
20+ {
21+ id : "11" as GUID ,
22+ headerContent : "First header" ,
23+ isUserDefinedLeafNode : false ,
24+ bodyContent : < div > First content</ div >
25+ } ,
26+ {
27+ id : "22" as GUID ,
28+ headerContent : "Second header" ,
29+ isUserDefinedLeafNode : false ,
30+ bodyContent : < div > Second content</ div >
31+ } ,
32+ {
33+ id : "33" as GUID ,
34+ headerContent : "Third header" ,
35+ isUserDefinedLeafNode : false ,
36+ bodyContent : < div > Third content</ div >
37+ }
2238] ;
2339
2440const defaultProps : TreeNodeProps = {
2541 class : "" ,
2642 items : [ ] ,
27- isUserDefinedLeafNode : false ,
2843 startExpanded : false ,
2944 showCustomIcon : false ,
3045 iconPlacement : "right" ,
@@ -59,7 +74,7 @@ describe("TreeNode", () => {
5974 } ) ;
6075
6176 it ( "shows all headers and contents when starting expanded" , ( ) => {
62- renderTreeNode ( { items, isUserDefinedLeafNode : false , startExpanded : true } ) ;
77+ renderTreeNode ( { items, startExpanded : true } ) ;
6378 items . forEach ( item => {
6479 expect ( screen . getByText ( item . headerContent as string ) ) . toBeInTheDocument ( ) ;
6580 const texts = getTextFromElement ( item . bodyContent ) ;
@@ -68,7 +83,7 @@ describe("TreeNode", () => {
6883 } ) ;
6984
7085 it ( "does not show item content when not starting expanded" , ( ) => {
71- renderTreeNode ( { items, isUserDefinedLeafNode : false , startExpanded : false } ) ;
86+ renderTreeNode ( { items, startExpanded : false } ) ;
7287 items . forEach ( item => {
7388 expect ( screen . getByText ( item . headerContent as string ) ) . toBeInTheDocument ( ) ;
7489 const texts = getTextFromElement ( item . bodyContent ) ;
@@ -82,16 +97,17 @@ describe("TreeNode", () => {
8297 {
8398 id : "44" as GUID ,
8499 headerContent : < div > This is the 44 header</ div > ,
100+ isUserDefinedLeafNode : false ,
85101 bodyContent : < div > Fourth content</ div >
86102 }
87103 ] ;
88- renderTreeNode ( { items : newItems , isUserDefinedLeafNode : false , startExpanded : true } ) ;
104+ renderTreeNode ( { items : newItems , startExpanded : true } ) ;
89105 expect ( screen . getByText ( "This is the 44 header" ) ) . toBeInTheDocument ( ) ;
90106 expect ( screen . getByText ( "Fourth content" ) ) . toBeInTheDocument ( ) ;
91107 } ) ;
92108
93109 it ( "shows the tree node headers in the correct order as a treeitem when not defined as a leaf node" , ( ) => {
94- renderTreeNode ( { items, isUserDefinedLeafNode : false , startExpanded : false } ) ;
110+ renderTreeNode ( { items, startExpanded : false } ) ;
95111 const treeNodeHeaders = screen . getAllByRole ( "treeitem" ) ;
96112 expect ( treeNodeHeaders ) . toHaveLength ( items . length ) ;
97113 items . forEach ( item => {
@@ -100,7 +116,7 @@ describe("TreeNode", () => {
100116 } ) ;
101117
102118 it ( "correctly collapses and expands the tree node branch content when clicking on the header" , async ( ) => {
103- renderTreeNode ( { items, isUserDefinedLeafNode : false , startExpanded : false } ) ;
119+ renderTreeNode ( { items, startExpanded : false } ) ;
104120
105121 const treeNodeItems = screen . getAllByRole ( "treeitem" ) ;
106122
@@ -122,7 +138,6 @@ describe("TreeNode", () => {
122138 expandedIcon : { type : "glyph" , iconClass : "expanded-icon" } ,
123139 collapsedIcon : { type : "image" , iconUrl : "image.png" } ,
124140 items,
125- isUserDefinedLeafNode : false ,
126141 startExpanded : false
127142 } ) ;
128143 expect ( screen . getByText ( "First header" ) ) . toBeInTheDocument ( ) ;
@@ -134,7 +149,6 @@ describe("TreeNode", () => {
134149 expandedIcon : { type : "glyph" , iconClass : "expanded-icon" } ,
135150 collapsedIcon : { type : "image" , iconUrl : "image.png" } ,
136151 items,
137- isUserDefinedLeafNode : false ,
138152 startExpanded : true
139153 } ) ;
140154 expect ( screen . getByText ( "First header" ) ) . toBeInTheDocument ( ) ;
@@ -143,17 +157,15 @@ describe("TreeNode", () => {
143157 {
144158 id : "11" as GUID ,
145159 headerContent : "Parent treeview with a nested treeview that is empty" ,
146- bodyContent : (
147- < TreeNode { ...defaultProps } items = { [ ] } isUserDefinedLeafNode = { false } startExpanded = { false } />
148- )
160+ isUserDefinedLeafNode : false ,
161+ bodyContent : < TreeNode { ...defaultProps } items = { [ ] } startExpanded = { false } />
149162 }
150163 ] ;
151164 renderTreeNode ( {
152165 showCustomIcon : true ,
153166 expandedIcon : { type : "glyph" , iconClass : "expanded-icon" } ,
154167 collapsedIcon : { type : "image" , iconUrl : "image.png" } ,
155168 items : nestedItems ,
156- isUserDefinedLeafNode : false ,
157169 startExpanded : true
158170 } ) ;
159171 expect ( screen . getByText ( "Parent treeview with a nested treeview that is empty" ) ) . toBeInTheDocument ( ) ;
@@ -164,17 +176,15 @@ describe("TreeNode", () => {
164176 {
165177 id : "11" as GUID ,
166178 headerContent : "Parent treeview with a nested treeview that is empty" ,
167- bodyContent : (
168- < TreeNode { ...defaultProps } items = { [ ] } isUserDefinedLeafNode = { false } startExpanded = { false } />
169- )
179+ isUserDefinedLeafNode : false ,
180+ bodyContent : < TreeNode { ...defaultProps } items = { [ ] } startExpanded = { false } />
170181 }
171182 ] ;
172183 renderTreeNode ( {
173184 showCustomIcon : true ,
174185 expandedIcon : { type : "glyph" , iconClass : "expanded-icon" } ,
175186 collapsedIcon : { type : "image" , iconUrl : "image.png" } ,
176187 items : nestedItems ,
177- isUserDefinedLeafNode : false ,
178188 startExpanded : true
179189 } ) ;
180190 expect ( screen . getByText ( "Parent treeview with a nested treeview that is empty" ) ) . toBeInTheDocument ( ) ;
@@ -187,9 +197,10 @@ describe("TreeNode", () => {
187197 id : "11" as GUID ,
188198 headerContent :
189199 "Parent treeview with a nested treeview that is empty and wrapped with a random other widget" ,
200+ isUserDefinedLeafNode : false ,
190201 bodyContent : (
191202 < RandomOtherWidget >
192- < TreeNode { ...defaultProps } items = { [ ] } isUserDefinedLeafNode = { false } startExpanded = { false } />
203+ < TreeNode { ...defaultProps } items = { [ ] } startExpanded = { false } />
193204 </ RandomOtherWidget >
194205 )
195206 }
@@ -199,7 +210,6 @@ describe("TreeNode", () => {
199210 expandedIcon : { type : "glyph" , iconClass : "expanded-icon" } ,
200211 collapsedIcon : { type : "image" , iconUrl : "image.png" } ,
201212 items : nestedItems ,
202- isUserDefinedLeafNode : false ,
203213 startExpanded : true
204214 } ) ;
205215 expect (
@@ -214,8 +224,14 @@ describe("TreeNode", () => {
214224 showCustomIcon : true ,
215225 expandedIcon : { type : "glyph" , iconClass : "expanded-icon" } ,
216226 collapsedIcon : { type : "image" , iconUrl : "image.png" } ,
217- items : [ { id : "11" as GUID , headerContent : "First header" , bodyContent : undefined } ] ,
218- isUserDefinedLeafNode : false ,
227+ items : [
228+ {
229+ id : "11" as GUID ,
230+ headerContent : "First header" ,
231+ isUserDefinedLeafNode : false ,
232+ bodyContent : undefined
233+ }
234+ ] ,
219235 startExpanded : true
220236 } ) ;
221237 expect ( screen . getByText ( "First header" ) ) . toBeInTheDocument ( ) ;
@@ -224,7 +240,6 @@ describe("TreeNode", () => {
224240 it ( "adds a CSS class for the header when the icon animates on toggle" , ( ) => {
225241 renderTreeNode ( {
226242 items,
227- isUserDefinedLeafNode : false ,
228243 startExpanded : true ,
229244 animateIcon : true
230245 } ) ;
@@ -241,8 +256,18 @@ describe("TreeNode", () => {
241256 return < TreeNode { ...props } /> ;
242257 } ;
243258 const testItems : TreeNodeProps [ "items" ] = [
244- { id : "1" as GUID , headerContent : "Header 1" , bodyContent : < div > Content 1</ div > } ,
245- { id : "2" as GUID , headerContent : "Header 2" , bodyContent : < div > Content 2</ div > }
259+ {
260+ id : "1" as GUID ,
261+ headerContent : "Header 1" ,
262+ isUserDefinedLeafNode : false ,
263+ bodyContent : < div > Content 1</ div >
264+ } ,
265+ {
266+ id : "2" as GUID ,
267+ headerContent : "Header 2" ,
268+ isUserDefinedLeafNode : false ,
269+ bodyContent : < div > Content 2</ div >
270+ }
246271 ] ;
247272 render ( < TestBranch { ...defaultProps } items = { testItems } /> ) ;
248273 expect ( renderSpy ) . toHaveBeenCalledTimes ( 1 ) ;
@@ -260,10 +285,16 @@ describe("TreeNode", () => {
260285 describe ( "when interacting through the keyboard" , ( ) => {
261286 beforeEach ( ( ) => {
262287 const treeNodeItems = [
263- { id : "1" as GUID , headerContent : "First header" , bodyContent : < div > First content</ div > } ,
288+ {
289+ id : "1" as GUID ,
290+ headerContent : "First header" ,
291+ isUserDefinedLeafNode : false ,
292+ bodyContent : < div > First content</ div >
293+ } ,
264294 {
265295 id : "2" as GUID ,
266296 headerContent : "Second header" ,
297+ isUserDefinedLeafNode : false ,
267298 bodyContent : (
268299 < TreeNode
269300 { ...defaultProps }
@@ -272,48 +303,43 @@ describe("TreeNode", () => {
272303 {
273304 id : "21" as GUID ,
274305 headerContent : "Second First header" ,
306+ isUserDefinedLeafNode : false ,
275307 bodyContent : < div > Second First content</ div >
276308 } ,
277309 {
278310 id : "22" as GUID ,
279311 headerContent : "Second Second header" ,
312+ isUserDefinedLeafNode : false ,
280313 bodyContent : < div > Second Second content</ div >
281314 } ,
282315 {
283316 id : "23" as GUID ,
284317 headerContent : "Second Third header" ,
318+ isUserDefinedLeafNode : false ,
285319 bodyContent : < div > Second Third content</ div >
286320 }
287321 ] }
288- isUserDefinedLeafNode = { false }
289322 startExpanded = { false }
290323 />
291324 )
292325 } ,
293326 {
294327 id : "3" as GUID ,
295328 headerContent : "Third header" ,
296- bodyContent : (
297- < TreeNode
298- { ...defaultProps }
299- class = ""
300- items = { [ ] }
301- isUserDefinedLeafNode = { false }
302- startExpanded = { false }
303- />
304- )
329+ isUserDefinedLeafNode : false ,
330+ bodyContent : < TreeNode { ...defaultProps } class = "" items = { [ ] } startExpanded = { false } />
305331 } ,
306332 {
307333 id : "4" as GUID ,
308334 headerContent : "Fourth header" ,
335+ isUserDefinedLeafNode : false ,
309336 bodyContent : < div > Fourth content</ div >
310337 }
311338 ] ;
312339
313340 renderTreeNode ( {
314341 class : "" ,
315342 items : treeNodeItems ,
316- isUserDefinedLeafNode : false ,
317343 startExpanded : false
318344 } ) ;
319345 } ) ;
0 commit comments