Skip to content

Commit f8c9f80

Browse files
committed
Make the tests more resilient
1 parent 194283e commit f8c9f80

File tree

2 files changed

+70
-37
lines changed

2 files changed

+70
-37
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"start": "next start",
2020
"test": "playwright test && pnpm test:unit",
2121
"test:e2e": "playwright test",
22+
"test:show-report": "playwright show-report",
2223
"test:ui": "playwright test --ui",
2324
"test:unit": "node --import=tsx --test 'src/**/*.test.tsx'",
2425
"validate:snippets": "node scripts/validate-snippets.js"

test/e2e/community-events.spec.ts

Lines changed: 69 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -180,48 +180,80 @@ test("event type filters hide cards and lock the last active tag", async ({
180180
const tagBadge = (tag: RegExp) =>
181181
pastEventsSection.locator("a span:has(.Tag--bg)").filter({ hasText: tag })
182182

183-
const conferenceBadge = tagBadge(/^conference$/i)
184-
const meetupBadge = tagBadge(/^meetup$/i)
185-
const workingGroupBadge = tagBadge(/^working group$/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()
183+
const filterDefinitions = [
184+
{
185+
kind: "conference",
186+
filterName: /conference/i,
187+
badgeText: /^conference$/i,
188+
chip: conferenceChip,
189+
filter: conferenceFilter,
190+
},
191+
{
192+
kind: "meetup",
193+
filterName: /meetup/i,
194+
badgeText: /^meetup$/i,
195+
chip: meetupChip,
196+
filter: meetupFilter,
197+
},
198+
{
199+
kind: "working group",
200+
filterName: /working group/i,
201+
badgeText: /^working group$/i,
202+
chip: workingGroupChip,
203+
filter: workingGroupFilter,
204+
},
205+
] as const
206+
207+
type FilterDefinition = (typeof filterDefinitions)[number]
208+
type ActiveFilter = FilterDefinition & { badges: Locator }
209+
210+
const activeFilters: ActiveFilter[] = []
211+
212+
for (const definition of filterDefinitions) {
213+
const badgeLocator = tagBadge(definition.badgeText)
214+
if ((await definition.filter.count()) === 0) continue
215+
activeFilters.push({ ...definition, badges: badgeLocator })
216+
}
217+
218+
expect(activeFilters.length).toBeGreaterThan(0)
219+
220+
for (const activeFilter of activeFilters) {
221+
await expect(activeFilter.badges.first()).toBeVisible()
222+
await activeFilter.chip.click()
223+
await expect(activeFilter.filter).not.toBeChecked()
224+
await expect(activeFilter.badges).toHaveCount(0)
225+
await activeFilter.chip.click()
226+
await expect(activeFilter.filter).toBeChecked()
227+
await expect(activeFilter.badges.first()).toBeVisible()
228+
}
229+
230+
if (activeFilters.length < 2) {
231+
return
232+
}
233+
234+
const [lockedFilter, ...filtersToToggle] = activeFilters
235+
236+
for (const filter of filtersToToggle) {
237+
await filter.chip.click()
238+
await expect(filter.filter).not.toBeChecked()
239+
}
240+
241+
await expect(lockedFilter.filter).toBeChecked()
242+
await expect(lockedFilter.filter).toBeDisabled()
243+
await expect(lockedFilter.badges.first()).toBeVisible()
244+
245+
for (const filter of filtersToToggle) {
246+
await filter.chip.click()
247+
await expect(filter.filter).toBeChecked()
248+
}
249+
250+
await expect(lockedFilter.filter).toBeEnabled()
220251
})
221252

222253
test("upcoming and past sections only show events on the correct side of now", async ({
223254
page,
224255
}) => {
256+
test.slow()
225257
const upcomingSection = page
226258
.locator("section")
227259
.filter({

0 commit comments

Comments
 (0)