You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import { expect, test } from '@playwright/test'
|
|
|
|
import { queryScalar, resetDatabases, seedQuestions, sqlLiteral } from './helpers/stack'
|
|
|
|
const apiBase = process.env.FULLSTACK_API_BASE_URL ?? 'http://127.0.0.1:18096'
|
|
|
|
test.describe('full-stack leaderboard integration', () => {
|
|
test.beforeEach(() => {
|
|
resetDatabases()
|
|
seedQuestions()
|
|
})
|
|
|
|
test('frontend leaderboard renders data persisted through gateway into DB', async ({
|
|
page,
|
|
request,
|
|
}) => {
|
|
const sessionID = `sess-${Date.now()}`
|
|
const playerName = `Player${Date.now().toString().slice(-4)}`
|
|
|
|
const updateResp = await request.post(`${apiBase}/api/v1/leaderboard/update`, {
|
|
data: {
|
|
session_id: sessionID,
|
|
player_id: 'player-001',
|
|
player_name: playerName,
|
|
total_score: 12,
|
|
questions_asked: 6,
|
|
questions_correct: 5,
|
|
hints_used: 1,
|
|
duration_seconds: 150,
|
|
completed_at: new Date().toISOString(),
|
|
completion_type: 'completed',
|
|
},
|
|
})
|
|
const updateBodyText = await updateResp.text()
|
|
expect(updateResp.ok(), updateBodyText).toBeTruthy()
|
|
const body = JSON.parse(updateBodyText)
|
|
expect(body.success).toBeTruthy()
|
|
|
|
const count = Number.parseInt(
|
|
queryScalar(
|
|
'leaderboards',
|
|
`SELECT COUNT(*) FROM leaderboard_entries WHERE session_id = ${sqlLiteral(sessionID)};`
|
|
),
|
|
10
|
|
)
|
|
expect(count).toBe(1)
|
|
|
|
await page.goto('/leaderboard')
|
|
await expect(page.getByRole('table', { name: 'top-10-leaderboard' })).toBeVisible()
|
|
await expect(page.getByText(playerName)).toBeVisible()
|
|
})
|
|
})
|