|
| 1 | +import { expect, test } from '@playwright/test'; |
| 2 | +import AxeBuilder from '@axe-core/playwright'; |
| 3 | + |
| 4 | +const baseURL = process.env.WP_E2E_BASE_URL; |
| 5 | +const username = process.env.WP_E2E_USERNAME; |
| 6 | +const password = process.env.WP_E2E_PASSWORD; |
| 7 | + |
| 8 | +const shouldSkip = !baseURL || !username || !password; |
| 9 | + |
| 10 | +const SERIOUS_IMPACTS = new Set(['serious', 'critical']); |
| 11 | + |
| 12 | +test.describe('Accessibilité des réglages Liens Morts Detector', () => { |
| 13 | + test.skip(shouldSkip, 'Les variables WP_E2E_* doivent être définies pour exécuter les tests d\'accessibilité.'); |
| 14 | + |
| 15 | + test('ne présente pas de violations d\'impact sérieux ou critique sur la page des réglages', async ({ page }) => { |
| 16 | + await page.goto('/wp-admin/admin.php?page=blc-settings', { waitUntil: 'domcontentloaded' }); |
| 17 | + |
| 18 | + if (page.url().includes('wp-login.php')) { |
| 19 | + await page.fill('input#user_login', username!); |
| 20 | + await page.fill('input#user_pass', password!); |
| 21 | + await Promise.all([ |
| 22 | + page.waitForURL(/\/wp-admin\//, { timeout: 60_000 }), |
| 23 | + page.click('input#wp-submit'), |
| 24 | + ]); |
| 25 | + |
| 26 | + await page.goto('/wp-admin/admin.php?page=blc-settings', { waitUntil: 'domcontentloaded' }); |
| 27 | + } |
| 28 | + |
| 29 | + const settingsForm = page.locator('.blc-settings-form'); |
| 30 | + await expect(settingsForm, 'Le formulaire de réglages doit être visible avant l\'audit axe.').toBeVisible(); |
| 31 | + |
| 32 | + const helpButton = settingsForm.locator('.blc-field-help').first(); |
| 33 | + if (await helpButton.count()) { |
| 34 | + await helpButton.click(); |
| 35 | + } |
| 36 | + |
| 37 | + const axe = new AxeBuilder({ page }) |
| 38 | + .include('.blc-settings-form') |
| 39 | + .withTags(['wcag2a', 'wcag2aa', 'section508']); |
| 40 | + |
| 41 | + const results = await axe.analyze(); |
| 42 | + |
| 43 | + const seriousViolations = results.violations.filter((violation) => |
| 44 | + violation.impact ? SERIOUS_IMPACTS.has(violation.impact) : false |
| 45 | + ); |
| 46 | + |
| 47 | + expect(seriousViolations, 'La page des réglages ne doit pas comporter de violations critiques détectées par axe-core.').toEqual([]); |
| 48 | + }); |
| 49 | +}); |
0 commit comments