import { test, expect } from '@playwright/test' import { prisma } from '@/lib/prisma' test.describe('Home Page', () => { const createdIds = { players: [] as number[], events: [] as number[], matches: [] as number[], users: [] as string[], } test.afterEach(async () => { await prisma.match.deleteMany({ where: { id: { in: createdIds.matches } } }) await prisma.event.deleteMany({ where: { id: { in: createdIds.events } } }) await prisma.player.deleteMany({ id: { in: createdIds.players } }) await prisma.user.deleteMany({ where: { id: { in: createdIds.users } } }) createdIds.players = [] createdIds.events = [] createdIds.matches = [] createdIds.users = [] }) test('displays top 10 players section', async ({ page }) => { const timestamp = Date.now() for (let i = 0; i < 3; i++) { const player = await prisma.player.create({ data: { name: `Home Test Player ${timestamp} ${i + 1}`, normalizedName: `home_test_player_${timestamp}_${i + 1}`.toLowerCase(), currentElo: 2000 - i * 10, gamesPlayed: 10, wins: 7, }, }) createdIds.players.push(player.id) } await page.goto('/') await expect(page.locator('text=Top 10 Players')).toBeVisible() await expect( page.locator(`a:has-text("Home Test Player ${timestamp} 1")`) ).toBeVisible() }) test('displays club president section', async ({ page }) => { const timestamp = Date.now() const user = await prisma.user.create({ data: { email: `president-${timestamp}@example.com`, name: `Club President ${timestamp}`, role: 'club_admin', }, }) createdIds.users.push(user.id) await page.goto('/') await expect(page.locator('text=Club President')).toBeVisible() }) test('displays most recent tournament section', async ({ page }) => { const timestamp = Date.now() const tournament = await prisma.event.create({ data: { name: `Recent Tournament ${timestamp}`, eventType: 'tournament', eventDate: new Date(Date.now() + 86400000), status: 'completed', }, }) createdIds.events.push(tournament.id) const p1 = await prisma.player.create({ data: { name: `HP1 ${timestamp}`, normalizedName: `hp1_${timestamp}`.toLowerCase(), currentElo: 1500 }, }) const p2 = await prisma.player.create({ data: { name: `HP2 ${timestamp}`, normalizedName: `hp2_${timestamp}`.toLowerCase(), currentElo: 1480 }, }) const p3 = await prisma.player.create({ data: { name: `HP3 ${timestamp}`, normalizedName: `hp3_${timestamp}`.toLowerCase(), currentElo: 1450 }, }) const p4 = await prisma.player.create({ data: { name: `HP4 ${timestamp}`, normalizedName: `hp4_${timestamp}`.toLowerCase(), currentElo: 1420 }, }) createdIds.players.push(p1.id, p2.id, p3.id, p4.id) const match = await prisma.match.create({ data: { eventId: tournament.id, player1P1Id: p1.id, player1P2Id: p2.id, player2P1Id: p3.id, player2P2Id: p4.id, team1Score: 10, team2Score: 5, status: 'completed', playedAt: new Date(), }, }) createdIds.matches.push(match.id) await page.goto('/') await expect(page.locator('text=Most Recent Tournament')).toBeVisible() await expect(page.locator(`text=Recent Tournament ${timestamp}`)).toBeVisible() }) })