Skip to content

Commit

Permalink
Accessibilite (#1230)
Browse files Browse the repository at this point in the history
Accessiblite
  - Dé-commenter les tests d'intégration
  - Corriger soucis d'accessibilité détectés
  - Ajouter fixtures pour les déchets
  • Loading branch information
fabienheureux authored Jan 20, 2025
1 parent a257df5 commit 2e53838
Show file tree
Hide file tree
Showing 13 changed files with 107 additions and 21 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/run_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ jobs:
- name: Populate database
run: |
python manage.py loaddata actions acteur_services acteur_types categories objets
python manage.py loaddata actions acteur_services acteur_types categories objets produits synonymes
- name: Run serveur
run: |
Expand Down
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,10 @@ e2e-test:
npx playwright test
$(PYTEST) ./integration_tests

.PHONY: a11y
a11y:
npx playwright test --reporter=list ./e2e_tests/accessibility.spec.ts

.PHONY: js-test
js-test:
npm run test
Expand Down
66 changes: 48 additions & 18 deletions e2e_tests/accessibility.spec.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,54 @@
import { AxeBuilder } from "@axe-core/playwright"
import { expect, test } from "@playwright/test"
import { AxeBuilder } from "@axe-core/playwright";
import { expect, test } from "@playwright/test";

// test("formulaire iFrame is WCAG compliant", async ({ page }) => {
// await page.goto(`http://localhost:8000/test_iframe`, { waitUntil: "networkidle" })
// Shared variables
const BASE_URL = "http://localhost:8000";
const WCAG_TAGS = ["wcag2a", "wcag2aa", "wcag21a", "wcag21aa"];
const IFRAME_SELECTOR = "iframe";

// const accessibilityScanResults = await new AxeBuilder({ page })
// .include("iframe") // restriction du scan à l'iframe uniquement
// .withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa']) // TODO : trouver quelle règle se rapproche le plus du RGAA
// .analyze()
test.describe("WCAG Compliance Tests", () => {
test("Formulaire iFrame | Desktop", async ({ page }) => {
await page.goto(`${BASE_URL}/test_iframe`, { waitUntil: "networkidle" });

// expect(accessibilityScanResults.violations).toEqual([])
// })
const accessibilityScanResults = await new AxeBuilder({ page })
.include(IFRAME_SELECTOR) // Restrict scan to the iframe
.withTags(WCAG_TAGS)
.analyze();

// test("carte iFrame is WCAG compliant", async ({ page }) => {
// await page.goto(`http://localhost:8000/test_iframe?carte`, { waitUntil: "networkidle" })
expect(accessibilityScanResults.violations).toEqual([]);
});

// const accessibilityScanResults = await new AxeBuilder({ page })
// .include("iframe") // restriction du scan à l'iframe uniquement
// .withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa']) // TODO : trouver quelle règle se rapproche le plus du RGAA
// .analyze()
test("Carte iFrame | Desktop", async ({ page }) => {
await page.goto(`${BASE_URL}/test_iframe?carte`, { waitUntil: "networkidle" });

// expect(accessibilityScanResults.violations).toEqual([])
// })
const accessibilityScanResults = await new AxeBuilder({ page })
.include(IFRAME_SELECTOR) // Restrict scan to the iframe
.withTags(WCAG_TAGS)
.analyze();

expect(accessibilityScanResults.violations).toEqual([]);
});

test("Assistant Homepage | Desktop", async ({ page }) => {
// TODO: Update the route for production
await page.goto(`${BASE_URL}/dechet`, { waitUntil: "networkidle" });

const accessibilityScanResults = await new AxeBuilder({ page })
.exclude("[data-disable-axe]")
.withTags(WCAG_TAGS)
.analyze();

expect(accessibilityScanResults.violations).toEqual([]);
});

test("Assistant Detail Page | Desktop", async ({ page }) => {
await page.goto(`${BASE_URL}/smartphone`, { waitUntil: "networkidle" });

const accessibilityScanResults = await new AxeBuilder({ page })
.exclude("[data-disable-axe]")
.withTags(WCAG_TAGS)
.analyze();

expect(accessibilityScanResults.violations).toEqual([]);
});
});
1 change: 1 addition & 0 deletions jinja2/qfdmo/shared/main.html
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
{# Is useful for digital view so that the users can scrol in the results #}
qf-overflow-scroll
"
tabindex="0"
>
{% block form_result %}
<turbo-frame id="addressesPanel"
Expand Down
21 changes: 21 additions & 0 deletions qfdmd/fixtures/produits.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[
{
"model": "qfdmd.produit",
"pk": 334,
"fields": {
"modifie_le": "2025-01-14T17:45:28.800Z",
"qu_est_ce_que_j_en_fais_mauvais_etat": "",
"qu_est_ce_que_j_en_fais_bon_etat": "",
"comment_les_eviter": "Assurez-vous à l'achat qu'il bénéficie d'une bonne garantie réparation et faites le durer autant que possible.\nEn cas de panne, faites-le réparer. Pour faciliter la réparation, à l'achat, privilégiez un appareil démontable. Pour les smartphone, un indicateur simple vous permet de savoir si celui que vous voulez acheter est facilement réparable, grâce à une note sur 10 indiquant son \"indice de réparabilité\".\n<br /><br />\nRetrouvez des conseils d'entretien de votre téléphone pour prolonger sa durée de vie sur la <a href=\"https://epargnonsnosressources.gouv.fr/entretien/smartphone/\" target=\"_blank\">Bible de l'entretien des objets</a>.",
"que_va_t_il_devenir": "Remis à une structure de réemploi ou revendu, votre appareil poursuit une seconde vie. Déposé en déchèterie ou remis à un revendeur, il suit la filière des Déchets d'Équipements Électriques et Électroniques (DEEE). Il est alors acheminé jusqu'à un centre de traitement où il est démantelé et ses différents composants recyclables récupérés (métaux et plastiques). Les substances non-recyclables sont incinérées (avec le plus souvent récupération de chaleur pour produire de l'énergie) ou enfouies dans des installations de stockage de déchets.",
"nom": "Téléphone mobile",
"synonymes_existants": "Smartphone",
"code": "DEEE",
"bdd": "ocad3e",
"qu_est_ce_que_j_en_fais": "S'il est encore en bon état, donnez-le à une association caritative ou un proche, ou bien revendez-le.<br /><br />S’il est en panne, privilégiez la réparation. Certains réparateurs peuvent même vous faire bénéficier d'une réduction via le <a href=\"https://www.economie.gouv.fr/particuliers/bonus-reparation-comment-ca-marche\" target=\"_blank\">Bonus Réparation</a>.\n<br /><br />Qu'il soit hors service ou encore fonctionnel vous pouvez :<br /><br />-\tle déposer en boutique de téléphonie ou le renvoyer via le service de reprise à distance de votre opérateur.<br /><br />-\tl'envoyer par correspondance grâce aux services de certains éco-organismes (voir \"<b>En savoir plus</b>\" ci-dessous).<br /><br />\nSinon, apportez-le en déchèterie.",
"nom_eco_organisme": "Ecologic / Ecosystem",
"filieres_rep": "Equipements électriques et électroniques",
"slug": "Téléphone mobile"
}
}
]
19 changes: 19 additions & 0 deletions qfdmd/fixtures/synonymes.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[
{
"model": "qfdmd.synonyme",
"pk": 1915,
"fields": {
"modifie_le": "2025-01-14T17:45:28.807Z",
"qu_est_ce_que_j_en_fais_mauvais_etat": "",
"qu_est_ce_que_j_en_fais_bon_etat": "",
"comment_les_eviter": "",
"que_va_t_il_devenir": "",
"slug": "smartphone",
"nom": "Smartphone",
"produit": 334,
"picto": "",
"pin_on_homepage": false,
"meta_description": ""
}
}
]
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const iframeAttributes = {
style: "border: none; width: 100%; display: block; margin: 0 auto;",
allowfullscreen: true,
allow: "geolocation; clipboard-write",
title: "Que faire de mes objets et déchets"
};

if (script?.dataset?.testid) {
Expand Down
2 changes: 1 addition & 1 deletion templates/components/footer/_standalone.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ <h2>Comment réduire ses déchets ?</h2>
</a>
.</p>
<p class="qf-text-center">
<img src="{% static "assistant/agir-pour-la-transition.svg" %}" class="qf-h-15w">
<img src="{% static "assistant/agir-pour-la-transition.svg" %}" class="qf-h-15w" alt="">
</p>
</section>
<section class="fr-container">
Expand Down
1 change: 1 addition & 0 deletions templates/components/header/header.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<img
src="{% static 'assistant/bloc-marque.svg' %}"
class="max-md:qf-max-w-[220px]"
alt="Bloc-marque Ademe & République française"
>
{% if not assistant.is_home %}
{% include "components/logo/animated.html" %}
Expand Down
7 changes: 7 additions & 0 deletions templates/components/logo/_base.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,11 @@
data-controller="blink"
data-blink-words-value='["objets"]'
class="qf-text-green-menthe-sun-373-moon-652-hover"
{% comment %}
This tag is excluded from our automated axe accessibilty tests because
it triggers a false positive. Its contrast is sufficient at 4.62 for
a big title, but for some reason Axe does not detect that the text
here is displayed in a large font-size.
{% endcomment %}}
data-disable-axe
>déchets</span>{% include "./_cursor.html" %}?
1 change: 1 addition & 0 deletions templates/components/produit/_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ <h2>Où l'apporter ?</h2>
<iframe
class="max-md:qf-aspect-[9/20] qf-max-h-[90vh] md:qf-max-h-[90svh]
md:qf-max-h-[90vh] md:qf-h-[50em] qf-w-full"
title="Carte Longue Vie Aux Objets - Où l'apporter"
src="{{ url_carte|default:produit.sous_categories.first.url_carte }}"></iframe>
</section>
{% endif %}
Expand Down
1 change: 1 addition & 0 deletions templates/components/search/view.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
{% csrf_token %}

<button
aria-label="Rechercher"
type="submit"
class="qf-absolute qf-left-0
group-data-[home]:-qf-mt-1v -qf-mt-1w qf-m-auto
Expand Down
2 changes: 1 addition & 1 deletion templates/components/sidebar/action.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
class="qf-p-0 lg:qf-rounded-l-full"
data-fr-opened="false"
aria-controls="fr-modal-{{ id }}"
aria-labelled-by="sidebar-action-{{ id }}"
aria-labelledby="sidebar-action-{{ id }}"
>
<span class="
lg:qf-rounded-l-full lg:qf-py-2w lg:qf-pl-2w lg:qf-pr-1w
Expand Down

0 comments on commit 2e53838

Please sign in to comment.