diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 5bd2fbc19..e8ab2d0d7 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -8,3 +8,5 @@ 40baf54727d624c8feac553caea48cc3306fd9cf # Add djade and run on all files - 28 September 2024 830e5434da2b61173225c3f29ba63d3126b18b90 +# Renommage QFDMO > QF +bf37a46eb33fe2d9327622b5da57a3b0b0deca41 diff --git a/e2e_tests/advanced_filters.spec.ts b/e2e_tests/advanced_filters.spec.ts index fb67d284f..0c151ead0 100644 --- a/e2e_tests/advanced_filters.spec.ts +++ b/e2e_tests/advanced_filters.spec.ts @@ -1,8 +1,5 @@ import { expect, test } from "@playwright/test" - -async function hideDjangoToolbar(page) { - await page.locator("#djHideToolBarButton").click() -} +import { hideDjangoToolbar } from "./helpers" async function searchInCarteMode(page){ await page.locator("input#id_adresse").click() diff --git a/e2e_tests/carte.spec.ts b/e2e_tests/carte.spec.ts new file mode 100644 index 000000000..71dbe1d1a --- /dev/null +++ b/e2e_tests/carte.spec.ts @@ -0,0 +1,14 @@ +import { expect, test } from "@playwright/test"; +import { hideDjangoToolbar, searchDummyAdresse } from "./helpers"; + +test("Desktop | La carte affiche la légende après une recherche", async ({ page }) => { + // Navigate to the carte page + await page.goto(`http://localhost:8000/carte`, { waitUntil: "networkidle" }); + await hideDjangoToolbar(page) + + await expect(page.getByTestId("carte-legend")).toBeHidden() + + // Fill "Adresse" autocomplete input + await searchDummyAdresse(page) + await expect(page.getByTestId("carte-legend")).toBeVisible() +}) diff --git a/e2e_tests/helpers.ts b/e2e_tests/helpers.ts new file mode 100644 index 000000000..096054bd3 --- /dev/null +++ b/e2e_tests/helpers.ts @@ -0,0 +1,24 @@ +import { expect, test } from "@playwright/test" + +const fillAndSelectAutocomplete = async (page, inputSelector, inputText, itemSelector) => { + await page.locator(inputSelector).click(); + await page.locator(inputSelector).fill(inputText); + await expect(page.locator(itemSelector)).toBeInViewport(); + await page.locator(itemSelector).click(); +}; + +export const searchDummySousCategorieObjet = async (page) => await fillAndSelectAutocomplete( + page, + "input#id_sous_categorie_objet", + "chaussures", + "#id_sous_categorie_objetautocomplete-list.autocomplete-items div:first-of-type" +); + +export const searchDummyAdresse = async (page) => await fillAndSelectAutocomplete( + page, + "input#id_adresse", + "10 rue de la paix", + "#id_adresseautocomplete-list.autocomplete-items div:nth-of-type(2)" + ); + +export const hideDjangoToolbar = async (page) => await page.locator("#djHideToolBarButton").click() diff --git a/e2e_tests/search_update.spec.ts b/e2e_tests/search_update.spec.ts index 07f8b75d4..7f626698a 100644 --- a/e2e_tests/search_update.spec.ts +++ b/e2e_tests/search_update.spec.ts @@ -1,31 +1,46 @@ import { expect, test } from "@playwright/test" +import { hideDjangoToolbar, searchDummyAdresse, searchDummySousCategorieObjet } from "./helpers" test("Recherche et modification d'une recherche", async ({ page }) => { - await page.goto(`http://localhost:8000/formulaire`, { - waitUntil: "networkidle", - }) - // Masquage de django debug toolbar - await page.locator("#djHideToolBarButton").click() - await page.locator("input#id_sous_categorie_objet").click() - await page.locator("input#id_sous_categorie_objet").fill("chaussures") - await expect(page.locator("#id_sous_categorie_objetautocomplete-list")).toBeInViewport() - await page.locator("#id_sous_categorie_objetautocomplete-list.autocomplete-items div:first-of-type").click() - - await page.locator("input#id_adresse").click() - await page.locator("input#id_adresse").fill("10 rue de la paix") - await expect (page.locator("#id_adresseautocomplete-list.autocomplete-items div:nth-of-type(2)")).toBeInViewport() - await page.locator("#id_adresseautocomplete-list.autocomplete-items div:nth-of-type(2)").click() - await page.locator("button[data-testid=rechercher-adresses-submit]").click() - await expect (page.locator("[data-search-solution-form-target=headerAddressPanel]")).toBeVisible() - // This tests that the header of the Formulaire view cannot be reached when the Update form is opened. - // This cannot be tested with .toBeVisible or toBeInViewport because of the way the header is styled. - // It is actually visible, but is covered by a child of the header's adjacent
tag, and - // Playwright detect it as visible. - // Testing that we cannot interact with it ensures it is actually not visible. - await page.locator("button[data-testid=modifier-recherche]").click() - try { - await page.locator("[data-search-solution-form-target=headerAddressPanel]").click({ timeout: 2000 }) - } catch (error) { - expect(error.message).toContain('locator.click: Timeout'); - } + // Helper function to handle autocomplete inputs + + // Navigate to the formulaire page + await page.goto(`http://localhost:8000/formulaire`, { waitUntil: "networkidle" }) + + // Hide the Django debug toolbar + await hideDjangoToolbar(page) + + // Expect the Proposer une adresse button to be hidden + await expect(page.getByTestId("formulaire-proposer-une-adresse")).not.toBeVisible() + + // Fill "Sous catégorie objet" autocomplete input + await searchDummySousCategorieObjet(page) + + // Fill "Adresse" autocomplete input + await searchDummyAdresse(page) + + // Submit the search form + await page.locator("button[data-testid=rechercher-adresses-submit]").click() + + // Expect the Proposer une adresse button to be visible + await expect(page.getByTestId("formulaire-proposer-une-adresse")).toBeVisible() + + // Verify the search header is displayed + await expect( + page.locator("[data-search-solution-form-target=headerAddressPanel]"), + ).toBeVisible() + + // Open the modification form + await page.locator("button[data-testid=modifier-recherche]").click() + + // Verify the header cannot be interacted with + // This weird tests is explained in https://github.com/incubateur-ademe/quefairedemesobjets/issues/1020 + try { + const headerLocator = page.locator( + "[data-search-solution-form-target=headerAddressPanel]", + ) + await headerLocator.click({ timeout: 2000 }) + } catch (error) { + expect(error.message).toContain("locator.click: Timeout") + } }) diff --git a/jinja2/qfdmo/carte/header.html b/jinja2/qfdmo/carte/header.html index b55d40f26..23b03cc23 100644 --- a/jinja2/qfdmo/carte/header.html +++ b/jinja2/qfdmo/carte/header.html @@ -23,7 +23,7 @@ diff --git a/jinja2/qfdmo/carte/panels/legend.html b/jinja2/qfdmo/carte/panels/legend.html index b9add3a68..9ecb36298 100644 --- a/jinja2/qfdmo/carte/panels/legend.html +++ b/jinja2/qfdmo/carte/panels/legend.html @@ -1,8 +1,9 @@