Files
Portfolio-2026/tests/single.spec.js
T

37 lines
1.3 KiB
JavaScript

const { test, expect } = require('@playwright/test');
const AxeBuilder = require('@axe-core/playwright').default;
test.use({ viewport: { width: 1920, height: 1080 } });
test.describe('single-project', () => {
test('project detail renders hero, sidebar, no axe violations', async ({ page }, testInfo) => {
// Pick the first project; skip the test gracefully if none exist.
const response = await page.goto('/projects/');
expect(response && response.status()).toBeLessThan(400);
const firstLink = page.locator('.archive-projects__grid a.project-card__title-link').first();
if (await firstLink.count() === 0) {
test.skip(true, 'No projects to test detail page');
return;
}
await Promise.all([
page.waitForLoadState('networkidle'),
firstLink.click(),
]);
await page.screenshot({ path: 'test-results/single.png', fullPage: true });
await expect(page.locator('.single-project__title')).toBeVisible();
await expect(page.locator('.single-project__sidebar')).toBeVisible();
const results = await new AxeBuilder({ page })
.withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'wcag22a', 'wcag22aa'])
.analyze();
await testInfo.attach('axe', {
body: JSON.stringify(results, null, 2),
contentType: 'application/json',
});
expect(results.violations).toEqual([]);
});
});