@@ -43,7 +43,7 @@ test("map matches screenshot", async ({ page }) => {
4343
4444 await expect ( mapContainer . locator ( "canvas" ) . first ( ) ) . toHaveScreenshot (
4545 "meetups-map.png" ,
46- { timeout : 30_000 } ,
46+ { timeout : 30_000 , maxDiffPixelRatio : 0.015 } ,
4747 )
4848} )
4949
@@ -138,3 +138,83 @@ test("map tooltip appears on marker hover", async ({ page }) => {
138138 await expect ( tooltip ) . toHaveText ( "London GraphQL" , { timeout : 5000 } )
139139 await expect ( tooltip ) . toBeVisible ( )
140140} )
141+
142+ test ( "event type filters hide cards and lock the last active tag" , async ( {
143+ page,
144+ } ) => {
145+ const pastEventsSection = page
146+ . locator ( "section" )
147+ . filter ( {
148+ has : page . getByRole ( "heading" , {
149+ level : 2 ,
150+ name : / P a s t e v e n t s & m e e t u p s / i,
151+ } ) ,
152+ } )
153+ . first ( )
154+
155+ await pastEventsSection . scrollIntoViewIfNeeded ( )
156+
157+ const filterGroup = pastEventsSection . getByRole ( "group" , {
158+ name : "Event type" ,
159+ } )
160+ const conferenceFilter = filterGroup . getByRole ( "checkbox" , {
161+ name : / c o n f e r e n c e / i,
162+ } )
163+ const meetupFilter = filterGroup . getByRole ( "checkbox" , { name : / m e e t u p / i } )
164+ const workingGroupFilter = filterGroup . getByRole ( "checkbox" , {
165+ name : / w o r k i n g g r o u p / i,
166+ } )
167+ const conferenceChip = filterGroup
168+ . locator ( "label" )
169+ . filter ( { hasText : / c o n f e r e n c e / i } )
170+ . first ( )
171+ const meetupChip = filterGroup
172+ . locator ( "label" )
173+ . filter ( { hasText : / m e e t u p / i } )
174+ . first ( )
175+ const workingGroupChip = filterGroup
176+ . locator ( "label" )
177+ . filter ( { hasText : / w o r k i n g g r o u p / i } )
178+ . first ( )
179+
180+ const tagBadge = ( tag : RegExp ) =>
181+ pastEventsSection . locator ( "a span:has(.Tag--bg)" ) . filter ( { hasText : tag } )
182+
183+ const conferenceBadge = tagBadge ( / ^ c o n f e r e n c e $ / i)
184+ const meetupBadge = tagBadge ( / ^ m e e t u p $ / i)
185+ const workingGroupBadge = tagBadge ( / ^ w o r k i n g g r o u p $ / i)
186+
187+ await expect ( conferenceBadge . first ( ) ) . toBeVisible ( )
188+ await expect ( meetupBadge . first ( ) ) . toBeVisible ( )
189+ await expect ( workingGroupBadge . first ( ) ) . toBeVisible ( )
190+
191+ await conferenceChip . click ( )
192+ await expect ( conferenceFilter ) . not . toBeChecked ( )
193+ await expect ( conferenceBadge ) . toHaveCount ( 0 )
194+ await conferenceChip . click ( )
195+ await expect ( conferenceFilter ) . toBeChecked ( )
196+ await expect ( conferenceBadge . first ( ) ) . toBeVisible ( )
197+
198+ await meetupChip . click ( )
199+ await expect ( meetupFilter ) . not . toBeChecked ( )
200+ await expect ( meetupBadge ) . toHaveCount ( 0 )
201+ await meetupChip . click ( )
202+ await expect ( meetupFilter ) . toBeChecked ( )
203+ await expect ( meetupBadge . first ( ) ) . toBeVisible ( )
204+
205+ await workingGroupChip . click ( )
206+ await expect ( workingGroupFilter ) . not . toBeChecked ( )
207+ await expect ( workingGroupBadge ) . toHaveCount ( 0 )
208+ await workingGroupChip . click ( )
209+ await expect ( workingGroupFilter ) . toBeChecked ( )
210+ await expect ( workingGroupBadge . first ( ) ) . toBeVisible ( )
211+
212+ await conferenceChip . click ( )
213+ await workingGroupChip . click ( )
214+ await expect ( meetupFilter ) . toBeDisabled ( )
215+ await expect ( meetupBadge . first ( ) ) . toBeVisible ( )
216+
217+ await conferenceChip . click ( )
218+ await workingGroupChip . click ( )
219+ await expect ( meetupFilter ) . toBeEnabled ( )
220+ } )
0 commit comments