@@ -10,7 +10,7 @@ describe("pat close-panel", function () {
1010        document . body . innerHTML  =  "" ; 
1111    } ) ; 
1212
13-     it ( "Closes a modal's panel." ,  async  function  ( )  { 
13+     it ( "1 -  Closes a modal's panel." ,  async  function  ( )  { 
1414        document . body . innerHTML  =  ` 
1515              <div id="pat-modal" class="pat-modal"> 
1616                <button id="close-modal" class="close-panel">close</button> 
@@ -42,7 +42,7 @@ describe("pat close-panel", function () {
4242        expect ( document . querySelectorAll ( ".pat-modal" ) . length ) . toBe ( 0 ) ; 
4343    } ) ; 
4444
45-     it ( "Closes a dialog's panel." ,  async  function  ( )  { 
45+     it ( "2 -  Closes a dialog's panel." ,  async  function  ( )  { 
4646        document . body . innerHTML  =  ` 
4747              <dialog open> 
4848                <button class="close-panel">close</button> 
@@ -61,32 +61,98 @@ describe("pat close-panel", function () {
6161        expect ( dialog . open ) . toBe ( false ) ; 
6262    } ) ; 
6363
64-     it ( "Prevents closing a panel with an invalid form when submitting but allow to cancel and close." ,  async  function  ( )  { 
65-         const  spy_destroy_modal  =  jest . spyOn ( pat_modal . prototype ,  "destroy" ) ; 
64+     describe ( "3 - Prevents closing a panel with an invalid form when submitting but allow to cancel and close." ,  function  ( )  { 
65+         it ( "3.1 - ... when the cancel button is not a submit button" ,  async  function  ( )  { 
66+             const  spy_destroy_modal  =  jest . spyOn ( pat_modal . prototype ,  "destroy" ) ; 
67+ 
68+             document . body . innerHTML  =  ` 
69+               <div class="pat-modal"> 
70+                 <form action="." class="pat-validation"> 
71+                   <input name="ok" required /> 
72+                   <button class="close-panel submit">submit</button> 
73+                   <button class="close-panel cancel" type="button">cancel</button> 
74+                 </form> 
75+               </div> 
76+             ` ; 
77+             const  el  =  document . querySelector ( "form" ) ; 
6678
67-         document . body . innerHTML  =  ` 
68-           <div class="pat-modal"> 
69-             <form action="." class="pat-validation"> 
70-               <input name="ok" required /> 
71-               <button class="close-panel submit">submit</button> 
72-               <button class="close-panel cancel" type="button">cancel</button> 
73-             </form> 
74-           </div> 
75-         ` ; 
76-         const  el  =  document . querySelector ( "form" ) ; 
79+             registry . scan ( document . body ) ; 
80+             await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
81+ 
82+             el . querySelector ( "button.submit" ) . click ( ) ; 
83+             await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
84+ 
85+             expect ( spy_destroy_modal ) . not . toHaveBeenCalled ( ) ; 
86+ 
87+             // A non-submit close-panel button does not check for validity. 
88+             el . querySelector ( "button.cancel" ) . click ( ) ; 
89+             await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
90+ 
91+             expect ( spy_destroy_modal ) . toHaveBeenCalled ( ) ; 
92+ 
93+             spy_destroy_modal . mockRestore ( ) ; 
94+         } ) ; 
95+ 
96+         it ( "3.2 - ... when the cancel button is a submit button but has the formnovalidate attribute set" ,  async  function  ( )  { 
97+             const  spy_destroy_modal  =  jest . spyOn ( pat_modal . prototype ,  "destroy" ) ; 
98+ 
99+             document . body . innerHTML  =  ` 
100+               <div class="pat-modal"> 
101+                 <form action="." class="pat-validation"> 
102+                   <input name="ok" required /> 
103+                   <button class="close-panel submit">submit</button> 
104+                   <button class="close-panel cancel" formnovalidate>cancel</button> 
105+                 </form> 
106+               </div> 
107+             ` ; 
108+             const  el  =  document . querySelector ( "form" ) ; 
109+ 
110+             registry . scan ( document . body ) ; 
111+             await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
112+ 
113+             el . querySelector ( "button.submit" ) . click ( ) ; 
114+             await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
115+ 
116+             expect ( spy_destroy_modal ) . not . toHaveBeenCalled ( ) ; 
117+ 
118+             // A non-submit close-panel button does not check for validity. 
119+             el . querySelector ( "button.cancel" ) . click ( ) ; 
120+             await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
121+ 
122+             expect ( spy_destroy_modal ) . toHaveBeenCalled ( ) ; 
123+ 
124+             spy_destroy_modal . mockRestore ( ) ; 
125+         } ) ; 
126+ 
127+         it ( "3.3 - ... when the cancel button is a submit input but has the formnovalidate attribute set" ,  async  function  ( )  { 
128+             const  spy_destroy_modal  =  jest . spyOn ( pat_modal . prototype ,  "destroy" ) ; 
129+ 
130+             document . body . innerHTML  =  ` 
131+               <div class="pat-modal"> 
132+                 <form action="." class="pat-validation"> 
133+                   <input name="ok" required /> 
134+                   <button class="close-panel submit">submit</button> 
135+                   <input type="submit" value="cancel" class="close-panel cancel" formnovalidate /> 
136+                 </form> 
137+               </div> 
138+             ` ; 
139+             const  el  =  document . querySelector ( "form" ) ; 
140+ 
141+             registry . scan ( document . body ) ; 
142+             await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
77143
78-         registry . scan ( document . body ) ; 
79-         await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
144+              el . querySelector ( "button.submit" ) . click ( ) ; 
145+              await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
80146
81-         el . querySelector ( "button.submit" ) . click ( ) ; 
82-         await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
147+             expect ( spy_destroy_modal ) . not . toHaveBeenCalled ( ) ; 
83148
84-         expect ( spy_destroy_modal ) . not . toHaveBeenCalled ( ) ; 
149+             // A non-submit close-panel button does not check for validity. 
150+             el . querySelector ( "input.cancel" ) . click ( ) ; 
151+             await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
85152
86-         // A non-submit close-panel button does not check for validity. 
87-         el . querySelector ( "button.cancel" ) . click ( ) ; 
88-         await  utils . timeout ( 1 ) ;  // wait a tick for async to settle. 
153+             expect ( spy_destroy_modal ) . toHaveBeenCalled ( ) ; 
89154
90-         expect ( spy_destroy_modal ) . toHaveBeenCalled ( ) ; 
155+             spy_destroy_modal . mockRestore ( ) ; 
156+         } ) ; 
91157    } ) ; 
92158} ) ; 
0 commit comments