@@ -15,6 +15,17 @@ describe('Tests the navbar and its components on various pages', () => {
15
15
16
16
const navLinks = await navbarPage . $ ( '.nav-links' ) ;
17
17
expect ( navLinks ) . toBeTruthy ( ) ;
18
+
19
+ const devFlag = await navbarPage . evaluate ( ( ) => {
20
+ return new URLSearchParams ( window . location . search ) . get ( 'dev' ) === 'true' ;
21
+ } ) ;
22
+
23
+ const chevronIcon = await navbarPage . $ ( '#chevron-down' ) ;
24
+ if ( devFlag ) {
25
+ expect ( chevronIcon ) . toBeTruthy ( ) ;
26
+ } else {
27
+ expect ( chevronIcon ) . toBeFalsy ( ) ;
28
+ }
18
29
} ;
19
30
20
31
beforeAll ( async ( ) => {
@@ -99,4 +110,49 @@ describe('Tests the navbar and its components on various pages', () => {
99
110
await page . goto ( `${ LOCAL_TEST_PAGE_URL } /feed/index.html` ) ;
100
111
await testNavbar ( page ) ;
101
112
} ) ;
113
+ it ( 'should close the dropdown by clicking outside the dropdown under dev feature flag' , async ( ) => {
114
+ await page . goto ( `${ LOCAL_TEST_PAGE_URL } ?dev=true` ) ;
115
+
116
+ const userInfoHandle = await page . $ ( '.user-info' ) ;
117
+ const dropdownHandle = await page . $ ( '#dropdown' ) ;
118
+
119
+ expect ( userInfoHandle ) . toBeTruthy ( ) ;
120
+ expect ( dropdownHandle ) . toBeTruthy ( ) ;
121
+
122
+ await page . evaluate ( ( ) => {
123
+ const userInfo = document . querySelector ( '.user-info' ) ;
124
+ if ( userInfo ) {
125
+ userInfo . click ( ) ;
126
+ }
127
+ } ) ;
128
+ await page . mouse . click ( 100 , 100 ) ;
129
+ const dropdownIsActive = await dropdownHandle . evaluate ( ( el ) =>
130
+ el . classList . contains ( 'active' ) ,
131
+ ) ;
132
+ expect ( dropdownIsActive ) . toBe ( false ) ;
133
+ } ) ;
134
+ it ( 'should keep the dropdown open when clicking outside when feature flag is off' , async ( ) => {
135
+ await page . goto ( `${ LOCAL_TEST_PAGE_URL } ?dev=false` ) ;
136
+ await page . waitForSelector ( '#dropdown' ) ;
137
+ await page . evaluate ( ( ) => {
138
+ const dropdown = document . getElementById ( 'dropdown' ) ;
139
+ if ( dropdown && ! dropdown . classList . contains ( 'active' ) ) {
140
+ dropdown . classList . add ( 'active' ) ;
141
+ }
142
+ } ) ;
143
+ let dropdownIsActive = await page . evaluate ( ( ) => {
144
+ const dropdown = document . getElementById ( 'dropdown' ) ;
145
+ return dropdown ?. classList . contains ( 'active' ) ?? false ;
146
+ } ) ;
147
+ expect ( dropdownIsActive ) . toBe ( true ) ;
148
+ await page . evaluate ( ( ) => {
149
+ document . body . click ( ) ;
150
+ } ) ;
151
+ await page . waitForTimeout ( 200 ) ;
152
+ const newDropdownHandle = await page . $ ( '#dropdown' ) ;
153
+ const newDropdownIsActive = await newDropdownHandle . evaluate ( ( el ) =>
154
+ el . classList . contains ( 'active' ) ,
155
+ ) ;
156
+ expect ( newDropdownIsActive ) . toBe ( true ) ;
157
+ } ) ;
102
158
} ) ;
0 commit comments