@@ -134,6 +134,74 @@ describe('.toBeVisible', () => {
134134      } ) 
135135    } ) 
136136
137+     describe ( 'when the <details /> inner text does not have an enclosing element' ,  ( )  =>  { 
138+       describe ( 'when the details is not opened' ,  ( )  =>  { 
139+         beforeEach ( ( )  =>  { 
140+           subject  =  render ( ` 
141+               <details> 
142+                 <summary>Title of hidden innerText</summary> 
143+                 hidden innerText 
144+               </details> 
145+             ` ) 
146+         } ) 
147+ 
148+         it ( 'returns false to the details content' ,  ( )  =>  { 
149+           expect ( subject . container . querySelector ( 'details' ) ) . not . toBeVisible ( ) 
150+         } ) 
151+ 
152+         it ( 'returns true to the details summary' ,  ( )  =>  { 
153+           expect ( subject . container . querySelector ( 'summary' ) ) . toBeVisible ( ) 
154+         } ) 
155+ 
156+         describe ( 'when the user clicks on the summary' ,  ( )  =>  { 
157+           beforeEach ( ( )  =>  subject . container . querySelector ( 'summary' ) . click ( ) ) 
158+ 
159+           it ( 'returns true to the details content' ,  ( )  =>  { 
160+             expect ( subject . container . querySelector ( 'details' ) ) . toBeVisible ( ) 
161+           } ) 
162+ 
163+           it ( 'returns true to the details summary' ,  ( )  =>  { 
164+             expect ( subject . container . querySelector ( 'summary' ) ) . toBeVisible ( ) 
165+           } ) 
166+         } ) 
167+       } ) 
168+ 
169+       describe ( 'when the details is opened' ,  ( )  =>  { 
170+         beforeEach ( ( )  =>  { 
171+           subject  =  render ( ` 
172+               <details open> 
173+                 <summary>Title of visible innerText</summary> 
174+                 visible <small>innerText</small> 
175+               </details> 
176+             ` ) 
177+         } ) 
178+ 
179+         it ( 'returns true to the details content' ,  ( )  =>  { 
180+           expect ( subject . container . querySelector ( 'details' ) ) . toBeVisible ( ) 
181+         } ) 
182+ 
183+         it ( 'returns true to inner small content' ,  ( )  =>  { 
184+           expect ( subject . container . querySelector ( 'small' ) ) . toBeVisible ( ) 
185+         } ) 
186+ 
187+         describe ( 'when the user clicks on the summary' ,  ( )  =>  { 
188+           beforeEach ( ( )  =>  subject . container . querySelector ( 'summary' ) . click ( ) ) 
189+ 
190+           it ( 'returns false to the details content' ,  ( )  =>  { 
191+             expect ( subject . container . querySelector ( 'details' ) ) . not . toBeVisible ( ) 
192+           } ) 
193+ 
194+           it ( 'returns false to the inner small content' ,  ( )  =>  { 
195+             expect ( subject . container . querySelector ( 'small' ) ) . not . toBeVisible ( ) 
196+           } ) 
197+ 
198+           it ( 'returns true to the details summary' ,  ( )  =>  { 
199+             expect ( subject . container . querySelector ( 'summary' ) ) . toBeVisible ( ) 
200+           } ) 
201+         } ) 
202+       } ) 
203+     } ) 
204+ 
137205    describe ( 'with a nested <details /> element' ,  ( )  =>  { 
138206      describe ( 'when the nested <details /> is opened' ,  ( )  =>  { 
139207        beforeEach ( ( )  =>  { 
@@ -247,6 +315,113 @@ describe('.toBeVisible', () => {
247315          ) . toBeVisible ( ) 
248316        } ) 
249317      } ) 
318+ 
319+       describe ( 'with nested details (unenclosed outer, enclosed inner)' ,  ( )  =>  { 
320+         describe ( 'when both outer and inner are opened' ,  ( )  =>  { 
321+           beforeEach ( ( )  =>  { 
322+             subject  =  render ( ` 
323+               <details open> 
324+                 <summary>Title of outer unenclosed</summary> 
325+                 Unenclosed innerText 
326+                 <details open> 
327+                   <summary>Title of inner enclosed</summary> 
328+                   <div>Enclosed innerText</div> 
329+                 </details> 
330+               </details> 
331+             ` ) 
332+           } ) 
333+ 
334+           it ( 'returns true to outer unenclosed innerText' ,  ( )  =>  { 
335+             expect ( subject . container . querySelector ( 'details' ) ) . toBeVisible ( ) 
336+           } ) 
337+ 
338+           it ( 'returns true to outer summary' ,  ( )  =>  { 
339+             expect ( subject . container . querySelector ( 'summary' ) ) . toBeVisible ( ) 
340+           } ) 
341+ 
342+           it ( 'returns true to inner enclosed innerText' ,  ( )  =>  { 
343+             expect ( 
344+               subject . container . querySelector ( 'details > details > div' ) , 
345+             ) . toBeVisible ( ) 
346+           } ) 
347+ 
348+           it ( 'returns true to inner summary' ,  ( )  =>  { 
349+             expect ( 
350+               subject . container . querySelector ( 'details > details > summary' ) , 
351+             ) . toBeVisible ( ) 
352+           } ) 
353+         } ) 
354+ 
355+         describe ( 'when outer is opened and inner is not opened' ,  ( )  =>  { 
356+           beforeEach ( ( )  =>  { 
357+             subject  =  render ( ` 
358+               <details open> 
359+                 <summary>Title of outer unenclosed</summary> 
360+                 Unenclosed innerText 
361+                 <details> 
362+                   <summary>Title of inner enclosed</summary> 
363+                   <div>Enclosed innerText</div> 
364+                 </details> 
365+               </details> 
366+             ` ) 
367+           } ) 
368+ 
369+           it ( 'returns true to outer unenclosed innerText' ,  ( )  =>  { 
370+             expect ( subject . container . querySelector ( 'details' ) ) . toBeVisible ( ) 
371+           } ) 
372+ 
373+           it ( 'returns true to outer summary' ,  ( )  =>  { 
374+             expect ( subject . container . querySelector ( 'summary' ) ) . toBeVisible ( ) 
375+           } ) 
376+ 
377+           it ( 'returns false to inner enclosed innerText' ,  ( )  =>  { 
378+             expect ( 
379+               subject . container . querySelector ( 'details > details > div' ) , 
380+             ) . not . toBeVisible ( ) 
381+           } ) 
382+ 
383+           it ( 'returns true to inner summary' ,  ( )  =>  { 
384+             expect ( 
385+               subject . container . querySelector ( 'details > details > summary' ) , 
386+             ) . toBeVisible ( ) 
387+           } ) 
388+         } ) 
389+ 
390+         describe ( 'when outer is not opened and inner is opened' ,  ( )  =>  { 
391+           beforeEach ( ( )  =>  { 
392+             subject  =  render ( ` 
393+               <details> 
394+                 <summary>Title of outer unenclosed</summary> 
395+                 Unenclosed innerText 
396+                 <details open> 
397+                   <summary>Title of inner enclosed</summary> 
398+                   <div>Enclosed innerText</div> 
399+                 </details> 
400+               </details> 
401+             ` ) 
402+           } ) 
403+ 
404+           it ( 'returns true to outer unenclosed innerText' ,  ( )  =>  { 
405+             expect ( subject . container . querySelector ( 'details' ) ) . not . toBeVisible ( ) 
406+           } ) 
407+ 
408+           it ( 'returns true to outer summary' ,  ( )  =>  { 
409+             expect ( subject . container . querySelector ( 'summary' ) ) . toBeVisible ( ) 
410+           } ) 
411+ 
412+           it ( 'returns false to inner enclosed innerText' ,  ( )  =>  { 
413+             expect ( 
414+               subject . container . querySelector ( 'details > details > div' ) , 
415+             ) . not . toBeVisible ( ) 
416+           } ) 
417+ 
418+           it ( 'returns true to inner summary' ,  ( )  =>  { 
419+             expect ( 
420+               subject . container . querySelector ( 'details > details > summary' ) , 
421+             ) . not . toBeVisible ( ) 
422+           } ) 
423+         } ) 
424+       } ) 
250425    } ) 
251426  } ) 
252427} ) 
0 commit comments