soroban-abacus-flashcards/apps/web/e2e/nav-slot.spec.ts

78 lines
2.6 KiB
TypeScript

import { expect, test } from '@playwright/test'
test.describe('Game navigation slots', () => {
test('should show Memory Pairs game name in nav when navigating to matching game', async ({
page,
}) => {
await page.goto('/games/matching')
// Wait for the page to load
await page.waitForLoadState('networkidle')
// Look for the game name in the navigation
const gameNav = page.locator('[data-testid="nav-slot"], h1:has-text("Memory Pairs")')
await expect(gameNav).toBeVisible()
await expect(gameNav).toContainText('Memory Pairs')
})
test('should show Memory Lightning game name in nav when navigating to memory quiz', async ({
page,
}) => {
await page.goto('/games/memory-quiz')
// Wait for the page to load
await page.waitForLoadState('networkidle')
// Look for the game name in the navigation
const gameNav = page.locator('[data-testid="nav-slot"], h1:has-text("Memory Lightning")')
await expect(gameNav).toBeVisible()
await expect(gameNav).toContainText('Memory Lightning')
})
test('should maintain game name in nav after page reload', async ({ page }) => {
// Navigate to matching game
await page.goto('/games/matching')
await page.waitForLoadState('networkidle')
// Verify game name appears
const gameNav = page.locator('h1:has-text("Memory Pairs")')
await expect(gameNav).toBeVisible()
// Reload the page
await page.reload()
await page.waitForLoadState('networkidle')
// Verify game name still appears after reload
await expect(gameNav).toBeVisible()
await expect(gameNav).toContainText('Memory Pairs')
})
test('should show different game names when navigating between games', async ({ page }) => {
// Start with matching game
await page.goto('/games/matching')
await page.waitForLoadState('networkidle')
const matchingNav = page.locator('h1:has-text("Memory Pairs")')
await expect(matchingNav).toBeVisible()
// Navigate to memory quiz
await page.goto('/games/memory-quiz')
await page.waitForLoadState('networkidle')
const quizNav = page.locator('h1:has-text("Memory Lightning")')
await expect(quizNav).toBeVisible()
// Verify the matching game name is gone
await expect(matchingNav).not.toBeVisible()
})
test('should not show game name on non-game pages', async ({ page }) => {
await page.goto('/')
await page.waitForLoadState('networkidle')
// Should not see any game names on the home page
const gameNavs = page.locator('h1:has-text("Memory Pairs"), h1:has-text("Memory Lightning")')
await expect(gameNavs).toHaveCount(0)
})
})