Merge pull request 'fix: feat: E2E quality gate — mobile viewports + cross-browser matrix (#1099)' (#1139) from fix/issue-1099 into master

This commit is contained in:
johba 2026-03-25 01:36:02 +01:00
commit 491755592a
3 changed files with 136 additions and 12 deletions

View file

@ -0,0 +1,61 @@
import { test, expect } from '@playwright/test';
import { getStackConfig, validateStackHealthy } from '../setup/stack';
const STACK_CONFIG = getStackConfig();
const STACK_BASE_URL = process.env.STACK_BASE_URL ?? 'http://localhost:8081';
test.describe('Landing Pages', () => {
test.beforeAll(async () => {
await validateStackHealthy(STACK_CONFIG);
});
test('landing homepage loads without errors', async ({ page }) => {
await page.goto(`${STACK_BASE_URL}/`, { waitUntil: 'domcontentloaded' });
// Landing page always has a call-to-action button ("Get $KRK", "Get Your Edge", etc.)
// Use the .header-cta container to find the primary CTA button unambiguously.
const cta = page.locator('.header-cta button').first();
await expect(cta).toBeVisible({ timeout: 15_000 });
await page.screenshot({ path: 'test-results/landing-homepage.png', fullPage: true });
console.log('[TEST] ✅ Landing homepage renders correctly');
});
test('docs introduction page loads', async ({ page }) => {
await page.goto(`${STACK_BASE_URL}/docs/introduction`, { waitUntil: 'domcontentloaded' });
// Docs page should have a heading
const heading = page.locator('h1, h2').first();
await expect(heading).toBeVisible({ timeout: 15_000 });
console.log('[TEST] ✅ Docs introduction page renders correctly');
});
test('docs navigation works across pages', async ({ page }) => {
await page.goto(`${STACK_BASE_URL}/docs/introduction`, { waitUntil: 'domcontentloaded' });
// Wait for nav links to render before checking
const heading = page.locator('h1, h2').first();
await expect(heading).toBeVisible({ timeout: 15_000 });
// Find a docs nav link to another page
const navLink = page.locator('a[href*="/docs/"]').filter({ hasNotText: /introduction/i }).first();
if (await navLink.isVisible({ timeout: 5_000 })) {
const href = await navLink.getAttribute('href');
console.log(`[TEST] Clicking docs nav link: ${href}`);
// Use waitForURL to detect SPA navigation instead of a fixed delay
await Promise.all([
page.waitForURL(`**${href}`, { timeout: 10_000 }),
navLink.click(),
]);
// Should navigate without crashing
const body = await page.textContent('body');
expect(body).toBeTruthy();
console.log('[TEST] ✅ Docs navigation works');
} else {
console.log('[TEST] ⚠️ No docs nav links found — skipping navigation test');
}
});
});