73 lines
2.5 KiB
TypeScript
73 lines
2.5 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test('Rewards page loads without errors', async ({ page }) => {
|
|
const errors: string[] = [];
|
|
|
|
// Capture console errors
|
|
page.on('console', msg => {
|
|
if (msg.type() === 'error') {
|
|
errors.push(msg.text());
|
|
}
|
|
});
|
|
|
|
// Capture page errors
|
|
page.on('pageerror', err => {
|
|
errors.push(err.message);
|
|
});
|
|
|
|
// Navigate to rewards page
|
|
await page.goto('/rewards', { waitUntil: 'domcontentloaded' });
|
|
|
|
// Wait for page content
|
|
await page.waitForTimeout(2000);
|
|
|
|
// Check for the Rewards heading
|
|
const heading = page.locator('h1:has-text("Rewards")');
|
|
await expect(heading).toBeVisible({ timeout: 5000 });
|
|
console.log('✓ Rewards page heading found');
|
|
|
|
// Check for key sections - use first() since there are multiple matches
|
|
const leaderboardSection = page.locator('h3:has-text("Leaderboard")').first();
|
|
const activitySection = page.locator('h3:has-text("Activity")').first();
|
|
|
|
// At least one of these should be visible
|
|
const hasContent = await leaderboardSection.isVisible() || await activitySection.isVisible();
|
|
expect(hasContent).toBe(true);
|
|
console.log('✓ Gamification content sections found');
|
|
|
|
// Report any errors
|
|
if (errors.length > 0) {
|
|
console.log('Console errors found:', errors);
|
|
}
|
|
|
|
// Filter out API errors (expected when backend isn't running)
|
|
const criticalErrors = errors.filter(e =>
|
|
!e.includes('Failed to load resource') &&
|
|
!e.includes('ERR_CONNECTION_REFUSED')
|
|
);
|
|
|
|
expect(criticalErrors.length).toBe(0);
|
|
console.log('✓ No critical errors on Rewards page');
|
|
});
|
|
|
|
test('Home page loads (may show loading if backend unavailable)', async ({ page }) => {
|
|
await page.goto('/', { waitUntil: 'domcontentloaded' });
|
|
|
|
// Wait for content
|
|
await page.waitForTimeout(2000);
|
|
|
|
// Check for H2H branding in header
|
|
await expect(page.locator('header h1:has-text("H2H")')).toBeVisible({ timeout: 5000 });
|
|
console.log('✓ H2H header found');
|
|
|
|
// Check navigation includes Rewards link (use first() since there may be multiple)
|
|
await expect(page.locator('nav a[href="/rewards"]').first()).toBeVisible({ timeout: 5000 });
|
|
console.log('✓ Rewards nav link found');
|
|
|
|
// Page either shows loading state or full content - both are acceptable
|
|
// when backend is not running
|
|
const hasSpinner = await page.locator('.animate-spin').first().isVisible();
|
|
const hasContent = await page.locator('text=Upcoming Events').isVisible();
|
|
console.log(`✓ Home page rendered (loading: ${hasSpinner}, content: ${hasContent})`);
|
|
});
|