import { test, expect } from '@playwright/test' test.describe('Events list page', () => { test('events list loads', async ({ page }) => { await page.goto('/events') await expect(page.locator('h1', { hasText: 'Events' })).toBeVisible() }) test('filter bar has type filters', async ({ page }) => { await page.goto('/events') const filterBar = page.locator('.filter-bar') await expect(filterBar).toBeVisible() for (const label of ['All', 'Workshops', 'Community', 'Social', 'Showcase']) { await expect(filterBar.locator('button', { hasText: label })).toBeVisible() } }) test('past events toggle exists and can be checked', async ({ page }) => { await page.goto('/events') const checkbox = page.locator('input[type="checkbox"]') await expect(checkbox).toBeVisible() await expect(page.locator('text=Show past events')).toBeVisible() await checkbox.check() await expect(checkbox).toBeChecked() // Page should still render without errors after toggling await expect(page.locator('h1', { hasText: 'Events' })).toBeVisible() }) test('clicking a filter button activates it', async ({ page }) => { await page.goto('/events') const workshopsBtn = page.locator('.filter-bar button', { hasText: 'Workshops' }) await workshopsBtn.click() await expect(workshopsBtn).toHaveClass(/active/) }) test('event links navigate to detail page', async ({ page }) => { await page.goto('/events') // Check the past events toggle so we see all events await page.locator('input[type="checkbox"]').check() const eventLinks = page.locator('.event-row a') const count = await eventLinks.count() if (count === 0) { // No events in the database — just verify the empty state renders await expect(page.locator('.empty', { hasText: 'No events found' })).toBeVisible() return } // Click the first event link and verify navigation const firstLink = eventLinks.first() const href = await firstLink.getAttribute('href') await firstLink.click() await page.waitForURL(/\/events\//) expect(page.url()).toContain('/events/') // Detail page should have an h1 with the event title await expect(page.locator('h1')).toBeVisible() }) })