nextjs-rewrite (#5)
Reviewed-on: #5 Co-authored-by: David Gwilliam <dhgwilliam@gmail.com> Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
This commit was merged in pull request #5.
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
import { test, expect } from '@playwright/test'
|
||||
import { prisma } from '@/lib/prisma'
|
||||
|
||||
test.describe('Home Page', () => {
|
||||
test('should display top 10 players', async ({ page }) => {
|
||||
// Create some test players with unique names and very high Elo to ensure they're in top 10
|
||||
const timestamp = Date.now()
|
||||
const players = []
|
||||
for (let i = 0; i < 3; i++) {
|
||||
const player = await prisma.player.create({
|
||||
data: {
|
||||
name: `Home Test Player ${timestamp} ${i + 1}`,
|
||||
currentElo: 2000 - i * 10, // Very high Elo to ensure they're in top 10
|
||||
gamesPlayed: 10 + i,
|
||||
wins: 5 + Math.floor(i / 2),
|
||||
losses: 5 + Math.ceil(i / 2),
|
||||
},
|
||||
})
|
||||
players.push(player)
|
||||
}
|
||||
|
||||
// Navigate to home page
|
||||
await page.goto('/')
|
||||
|
||||
// Check that the page loads
|
||||
await expect(page.locator('text=Top 10 Players')).toBeVisible()
|
||||
|
||||
// Check that at least one of our test players is displayed
|
||||
// Use a more specific locator to avoid multiple matches
|
||||
await expect(
|
||||
page.locator(`a:has-text("Home Test Player ${timestamp} 1")`)
|
||||
).toBeVisible()
|
||||
|
||||
// Clean up
|
||||
for (const player of players) {
|
||||
await prisma.player.delete({ where: { id: player.id } })
|
||||
}
|
||||
})
|
||||
|
||||
test('should display club president', async ({ page }) => {
|
||||
const timestamp = Date.now()
|
||||
// Create a club admin user
|
||||
const clubAdmin = await prisma.user.create({
|
||||
data: {
|
||||
email: `president-${timestamp}@example.com`,
|
||||
name: `Club President ${timestamp}`,
|
||||
role: 'club_admin',
|
||||
},
|
||||
})
|
||||
|
||||
// Navigate to home page
|
||||
await page.goto('/')
|
||||
|
||||
// Check that the club president section is visible
|
||||
await expect(page.locator('text=Club President')).toBeVisible()
|
||||
|
||||
// Clean up
|
||||
await prisma.user.delete({ where: { id: clubAdmin.id } })
|
||||
})
|
||||
|
||||
test('should display most recent tournament', async ({ page }) => {
|
||||
const timestamp = Date.now()
|
||||
// Create a tournament with a future date to ensure it's the most recent
|
||||
const tournament = await prisma.event.create({
|
||||
data: {
|
||||
name: `Recent Tournament ${timestamp}`,
|
||||
eventType: 'tournament',
|
||||
eventDate: new Date(Date.now() + 86400000), // Tomorrow
|
||||
status: 'completed',
|
||||
},
|
||||
})
|
||||
|
||||
// Create players for the match
|
||||
const player1 = await prisma.player.create({
|
||||
data: { name: `Home Match Player 1 ${timestamp}`, currentElo: 1500 },
|
||||
})
|
||||
const player2 = await prisma.player.create({
|
||||
data: { name: `Home Match Player 2 ${timestamp}`, currentElo: 1480 },
|
||||
})
|
||||
const player3 = await prisma.player.create({
|
||||
data: { name: `Home Match Player 3 ${timestamp}`, currentElo: 1450 },
|
||||
})
|
||||
const player4 = await prisma.player.create({
|
||||
data: { name: `Home Match Player 4 ${timestamp}`, currentElo: 1420 },
|
||||
})
|
||||
|
||||
// Create a match in the tournament
|
||||
await prisma.match.create({
|
||||
data: {
|
||||
eventId: tournament.id,
|
||||
team1P1Id: player1.id,
|
||||
team1P2Id: player2.id,
|
||||
team2P1Id: player3.id,
|
||||
team2P2Id: player4.id,
|
||||
team1Score: 10,
|
||||
team2Score: 5,
|
||||
status: 'completed',
|
||||
playedAt: new Date(),
|
||||
},
|
||||
})
|
||||
|
||||
// Navigate to home page
|
||||
await page.goto('/')
|
||||
|
||||
// Check that the tournament section is visible
|
||||
await expect(page.locator('text=Most Recent Tournament')).toBeVisible()
|
||||
await expect(page.locator(`text=Recent Tournament ${timestamp}`)).toBeVisible()
|
||||
|
||||
// Clean up
|
||||
await prisma.match.deleteMany({ where: { eventId: tournament.id } })
|
||||
await prisma.event.delete({ where: { id: tournament.id } })
|
||||
await prisma.player.deleteMany({
|
||||
where: { id: { in: [player1.id, player2.id, player3.id, player4.id] } },
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user