@@ -3,6 +3,12 @@ import { test, expect } from '@playwright/test';
33import { ProjectPage } from './pages/project' ;
44import { getEchoRequestParams } from './globals' ;
55
6+ /**
7+ * Layer name as used in the treeview data-testid attribute
8+ * @type {string }
9+ */
10+ const LAYER_NAME = 'form filter (à)' ;
11+
612test . describe ( 'Form filter' , ( ) => {
713 test . beforeEach ( async ( { page } ) => {
814 const project = new ProjectPage ( page , 'form_filter' ) ;
@@ -100,3 +106,60 @@ test.describe('Form filter', () => {
100106 await expect ( page . locator ( '#ui-id-2 .ui-menu-item div' ) ) . toHaveText ( 'monuments' ) ;
101107 } ) ;
102108} ) ;
109+
110+ test . describe ( 'Form filter - Legend panel interactions' , ( ) => {
111+ test . beforeEach ( async ( { page } ) => {
112+ const project = new ProjectPage ( page , 'form_filter' ) ;
113+ await project . open ( ) ;
114+ // Open the form filter panel
115+ await page . locator ( '#button-filter' ) . click ( ) ;
116+ } ) ;
117+
118+ test ( 'Deactivate all filters button in legend panel clears the active filter' , async ( { page } ) => {
119+ // Apply a filter via the form filter panel
120+ const getMapPromise = page . waitForRequest ( / G e t M a p / ) ;
121+ await page . locator ( '#liz-filter-field-test_filter' ) . selectOption ( '_uvres_d_art_et_monuments_de_l_espace_urbain' ) ;
122+ await getMapPromise ;
123+
124+ // Switch to the layer panel (switcher) — opening the filter panel hid it
125+ await page . locator ( '#button-switcher' ) . click ( ) ;
126+
127+ // The "deactivate all filters" button in the layer legend panel must be visible
128+ await expect ( page . locator ( '#layerActionUnfilter' ) ) . toBeVisible ( ) ;
129+
130+ // The layer node in the treeview must have the 'filtered' class
131+ await expect ( page . getByTestId ( LAYER_NAME ) . locator ( '.node' ) ) . toContainClass ( 'filtered' ) ;
132+
133+ // Click the deactivate-all button in the legend panel
134+ const getMapAfterUnfilter = page . waitForRequest ( / G e t M a p / ) ;
135+ await page . locator ( '#layerActionUnfilter' ) . click ( ) ;
136+ await getMapAfterUnfilter ;
137+
138+ // The button must be hidden and the 'filtered' class must be removed
139+ await expect ( page . locator ( '#layerActionUnfilter' ) ) . not . toBeVisible ( ) ;
140+ await expect ( page . getByTestId ( LAYER_NAME ) . locator ( '.node' ) ) . not . toContainClass ( 'filtered' ) ;
141+ } ) ;
142+
143+ test ( 'Per-layer filter icon in legend removes the filter for that layer' , async ( { page } ) => {
144+ // Apply a filter via the form filter panel
145+ const getMapPromise = page . waitForRequest ( / G e t M a p / ) ;
146+ await page . locator ( '#liz-filter-field-test_filter' ) . selectOption ( '_uvres_d_art_et_monuments_de_l_espace_urbain' ) ;
147+ await getMapPromise ;
148+
149+ // Switch to the layer panel (switcher) — opening the filter panel hid it
150+ await page . locator ( '#button-switcher' ) . click ( ) ;
151+
152+ // The per-layer icon-filter button must be visible inside the treeview node
153+ await expect ( page . getByTestId ( LAYER_NAME ) . locator ( '.icon-filter' ) ) . toBeVisible ( ) ;
154+
155+ // Click the per-layer icon-filter to remove the filter for that layer only
156+ const getMapAfterUnfilter = page . waitForRequest ( / G e t M a p / ) ;
157+ await page . getByTestId ( LAYER_NAME ) . locator ( '.icon-filter' ) . click ( ) ;
158+ await getMapAfterUnfilter ;
159+
160+ // Filter must be gone: 'filtered' class removed, icon hidden, global button hidden
161+ await expect ( page . getByTestId ( LAYER_NAME ) . locator ( '.node' ) ) . not . toContainClass ( 'filtered' ) ;
162+ await expect ( page . getByTestId ( LAYER_NAME ) . locator ( '.icon-filter' ) ) . not . toBeVisible ( ) ;
163+ await expect ( page . locator ( '#layerActionUnfilter' ) ) . not . toBeVisible ( ) ;
164+ } ) ;
165+ } ) ;
0 commit comments