console/packages/web/docs/e2e/docs-navigation.e2e.ts
2026-01-25 21:38:44 +01:00

80 lines
2.9 KiB
TypeScript

import { expect, test } from '@playwright/test';
// Note: /docs requires Nextra to be properly built. These tests may fail in dev mode.
// Run against built static site for reliable results.
test.describe('Documentation User Journeys', () => {
test.beforeEach(async ({ page }) => {
// Check if docs page loads without error
const response = await page.goto('/docs');
if (!response?.ok()) {
test.skip(true, 'Docs page not available (needs build)');
}
});
test('docs landing page shows content', async ({ page, isMobile }) => {
await expect(page.getByRole('heading', { level: 1 })).toBeVisible();
if (isMobile) {
const sidebar = page.getByRole('complementary');
await expect(sidebar.first()).toBeVisible();
} else {
const nav = page.getByRole('navigation');
await expect(nav.first()).toBeVisible();
}
});
test('developer navigates to schema registry via sidebar', async ({ page }) => {
// Schema Registry is under "Hive Console" section
const sidebar = page.getByRole('complementary');
// HeadlessUI overlays intercept pointer events, use JS click to bypass
const schemaRegistryLink = sidebar.locator('a[href="/docs/schema-registry"]');
await expect(schemaRegistryLink).toBeVisible();
await schemaRegistryLink.evaluate((el: HTMLElement) => el.click());
await expect(page).toHaveURL(/schema-registry/);
await expect(page.getByRole('heading', { level: 1 })).toBeVisible();
});
test('developer navigates to gateway via sidebar', async ({ page }) => {
const sidebar = page.getByRole('complementary');
const gatewayLink = sidebar.locator('a[href="/docs/gateway"]');
await expect(gatewayLink).toBeVisible();
await gatewayLink.evaluate((el: HTMLElement) => el.click());
await page.waitForURL(/gateway/);
await expect(page).toHaveURL(/gateway/);
await expect(page.getByRole('heading', { level: 1 })).toBeVisible();
});
test('documentation shows code examples', async ({ page }) => {
// Navigate to CLI reference which has code examples
await page.goto('/docs/api-reference/cli');
// Check for code blocks
const codeBlock = page.locator('pre').first();
await expect(codeBlock).toBeVisible();
});
test('sidebar shows active section', async ({ page }) => {
await page.goto('/docs/schema-registry');
const sidebar = page.getByRole('complementary');
const hiveConsoleButton = sidebar.getByRole('button', { name: 'Hive Console' });
await expect(hiveConsoleButton).toBeVisible();
await expect(hiveConsoleButton).toHaveAttribute('data-href', '/docs/schema-registry');
});
});
test.describe('Documentation API Reference', () => {
test('CLI reference page loads', async ({ page }) => {
const response = await page.goto('/docs/api-reference/cli');
if (!response?.ok()) {
test.skip(true, 'Page not available');
}
await expect(page.getByRole('heading', { level: 1 })).toBeVisible();
});
});