1
- import { expect , Locator , Page } from "@playwright/test" ;
1
+ import { expect , Locator , Page , test } from "@playwright/test" ;
2
2
import { TabDescription } from "./testInterfaces" ;
3
3
4
4
/* eslint-disable sonarjs/no-duplicate-string -- ignoring duplicate strings here */
@@ -238,15 +238,15 @@ export async function testFilterPresence(
238
238
}
239
239
}
240
240
241
- export const getNamedFilterButton = (
241
+ export const getNamedFilterButtonLocator = (
242
242
page : Page ,
243
243
filterName : string
244
244
) : Locator => {
245
245
return page
246
246
. getByRole ( "button" )
247
247
. filter ( { has : page . getByRole ( "checkbox" ) , hasText : filterName } ) ;
248
248
} ;
249
- export const getFirstFilterButton = ( page : Page ) : Locator => {
249
+ export const getFirstFilterButtonLocator = ( page : Page ) : Locator => {
250
250
return page
251
251
. getByRole ( "button" )
252
252
. filter ( { has : page . getByRole ( "checkbox" ) } )
@@ -262,11 +262,17 @@ export async function testFilterPersistence(
262
262
await page . goto ( tabOrder [ 0 ] . url ) ;
263
263
// Select the first checkbox on the test filter
264
264
await page . getByText ( filterRegex ( testFilter ) ) . click ( ) ;
265
- const toSelect = await getFirstFilterButton ( page ) ;
266
- await expect ( toSelect . getByRole ( "checkbox" ) ) . not . toBeChecked ( ) ;
267
- await toSelect . getByRole ( "checkbox" ) . click ( ) ;
268
- const filterName = ( await toSelect . innerText ( ) ) . split ( "\n" ) [ 0 ] ; //MAY NEED TO ADD SOME CHECKING MECHANISM HERE
269
- await expect ( toSelect . getByRole ( "checkbox" ) ) . toBeChecked ( ) ;
265
+ const filterToSelectLocator = await getFirstFilterButtonLocator ( page ) ;
266
+ await expect ( filterToSelectLocator . getByRole ( "checkbox" ) ) . not . toBeChecked ( ) ;
267
+ await filterToSelectLocator . getByRole ( "checkbox" ) . click ( ) ;
268
+ const filterNameMatch = ( await filterToSelectLocator . innerText ( ) ) . match (
269
+ / \. \S * /
270
+ ) ;
271
+ if ( filterNameMatch == null ) {
272
+ test . fail ( ) ;
273
+ }
274
+ const filterName = ( filterNameMatch ?? [ "" ] ) [ 0 ] ;
275
+ await expect ( filterToSelectLocator . getByRole ( "checkbox" ) ) . toBeChecked ( ) ;
270
276
await page . locator ( "body" ) . click ( ) ;
271
277
// Expect at least some text to still be visible
272
278
await expect ( getFirstElementTextLocator ( page , 0 ) ) . toBeVisible ( ) ;
@@ -279,7 +285,7 @@ export async function testFilterPersistence(
279
285
await expect ( page . getByText ( filterRegex ( testFilter ) ) ) . toBeVisible ( ) ;
280
286
await page . getByText ( filterRegex ( testFilter ) ) . dispatchEvent ( "click" ) ;
281
287
await page . waitForLoadState ( "load" ) ;
282
- const previouslySelected = getNamedFilterButton ( page , filterName ) ;
288
+ const previouslySelected = getNamedFilterButtonLocator ( page , filterName ) ;
283
289
await expect ( previouslySelected . getByRole ( "checkbox" ) ) . toBeChecked ( ) ;
284
290
await page . waitForLoadState ( "load" ) ;
285
291
await page . locator ( "body" ) . click ( ) ;
@@ -291,7 +297,7 @@ export async function testFilterPersistence(
291
297
. click ( ) ;
292
298
await expect ( getFirstElementTextLocator ( page , 0 ) ) . toBeVisible ( ) ;
293
299
await page . getByText ( filterRegex ( testFilter ) ) . click ( ) ;
294
- const previouslySelected = getFirstFilterButton ( page ) ;
300
+ const previouslySelected = getFirstFilterButtonLocator ( page ) ;
295
301
await expect ( previouslySelected ) . toContainText ( filterName , {
296
302
useInnerText : true ,
297
303
} ) ;
@@ -311,7 +317,7 @@ export async function testFilterCounts(
311
317
await page . getByText ( filterRegex ( filter ) ) . dispatchEvent ( "click" ) ;
312
318
// Get the number associated with the first filter button, and select it
313
319
await page . waitForLoadState ( "load" ) ;
314
- const filterButton = getFirstFilterButton ( page ) ;
320
+ const filterButton = getFirstFilterButtonLocator ( page ) ;
315
321
const filterNumbers = ( await filterButton . innerText ( ) ) . split ( "\n" ) ;
316
322
const filterNumber =
317
323
filterNumbers . map ( ( x ) => Number ( x ) ) . find ( ( x ) => ! isNaN ( x ) && x !== 0 ) ??
@@ -346,63 +352,69 @@ export async function testFilterBubbles(
346
352
// Select a filter
347
353
await page . getByText ( filterRegex ( filter ) ) . dispatchEvent ( "click" ) ;
348
354
await page . waitForLoadState ( "load" ) ;
349
- const firstFilterButton = getFirstFilterButton ( page ) ;
355
+ const firstFilterButtonLocator = getFirstFilterButtonLocator ( page ) ;
350
356
// Get the name of the selected filter
351
357
const firstFilterName =
352
- ( await firstFilterButton . innerText ( ) )
358
+ ( await firstFilterButtonLocator . innerText ( ) )
353
359
. split ( "\n" )
354
360
. find ( ( x ) => x . length > 0 ) ?? "" ;
355
361
// Click the selected filter and exit the filter menu
356
- await firstFilterButton . getByRole ( "checkbox" ) . click ( ) ;
362
+ await firstFilterButtonLocator . getByRole ( "checkbox" ) . click ( ) ;
357
363
await page . waitForLoadState ( "load" ) ;
358
364
await page . locator ( "body" ) . click ( ) ;
359
365
await expect ( page . getByRole ( "checkbox" ) ) . toHaveCount ( 0 ) ;
360
366
// Click the blue button
361
- const filterBlueButton = page
367
+ const filterBlueButtonLocator = page
362
368
. locator ( "#sidebar-positioner" )
363
369
. getByText ( firstFilterName ) ;
364
- await expect ( filterBlueButton ) . toBeVisible ( ) ;
365
- await filterBlueButton . scrollIntoViewIfNeeded ( ) ;
366
- await filterBlueButton . dispatchEvent ( "click" ) ;
370
+ await expect ( filterBlueButtonLocator ) . toBeVisible ( ) ;
371
+ await filterBlueButtonLocator . scrollIntoViewIfNeeded ( ) ;
372
+ await filterBlueButtonLocator . dispatchEvent ( "click" ) ;
367
373
// Expect the blue button to disappear when clicked
368
- await expect ( filterBlueButton ) . toHaveCount ( 0 ) ;
374
+ await expect ( filterBlueButtonLocator ) . toHaveCount ( 0 ) ;
369
375
// Expect the filter to be deselected in the filter menu
370
376
await page . getByText ( filterRegex ( filter ) ) . dispatchEvent ( "click" ) ;
371
- await expect ( firstFilterButton . getByRole ( "checkbox" ) ) . not . toBeChecked ( ) ;
377
+ await expect (
378
+ firstFilterButtonLocator . getByRole ( "checkbox" )
379
+ ) . not . toBeChecked ( ) ;
372
380
await page . locator ( "body" ) . click ( ) ;
373
381
}
374
382
}
375
383
376
384
export async function testClearAll (
377
385
page : Page ,
378
386
tab : TabDescription ,
379
- filters : string [ ]
387
+ filterNames : string [ ]
380
388
) : Promise < void > {
381
389
await page . goto ( tab . url ) ;
382
- const selectedFilterList = [ ] ;
383
- for ( const filter of filters ) {
384
- await page . getByText ( filterRegex ( filter ) ) . dispatchEvent ( "click" ) ;
385
- await getFirstFilterButton ( page ) . getByRole ( "checkbox" ) . click ( ) ;
390
+ const selectedFilterNamesList = [ ] ;
391
+ for ( const filterName of filterNames ) {
392
+ // Select the passed filter names
393
+ await page . getByText ( filterRegex ( filterName ) ) . dispatchEvent ( "click" ) ;
394
+ await getFirstFilterButtonLocator ( page ) . getByRole ( "checkbox" ) . click ( ) ;
386
395
await expect (
387
- getFirstFilterButton ( page ) . getByRole ( "checkbox" )
396
+ getFirstFilterButtonLocator ( page ) . getByRole ( "checkbox" )
388
397
) . toBeChecked ( ) ;
389
- selectedFilterList . push (
390
- ( await getFirstFilterButton ( page ) . innerText ( ) )
398
+ selectedFilterNamesList . push (
399
+ ( await getFirstFilterButtonLocator ( page ) . innerText ( ) )
391
400
. split ( "\n" )
392
401
. find ( ( x ) => x . length > 0 ) ?? ""
393
402
) ;
394
403
await page . locator ( "body" ) . click ( ) ;
395
404
}
405
+ // Click the "Clear All" button
396
406
await page . getByText ( "Clear All" ) . dispatchEvent ( "click" ) ;
397
- for ( const filter of selectedFilterList ) {
407
+ for ( const filterName of selectedFilterNamesList ) {
398
408
await expect (
399
- page . locator ( "#sidebar-positioner" ) . getByText ( filter )
409
+ page . locator ( "#sidebar-positioner" ) . getByText ( filterName )
400
410
) . toHaveCount ( 0 ) ;
401
411
}
402
- for ( let i = 0 ; i < filters . length ; i ++ ) {
403
- await page . getByText ( filterRegex ( filters [ i ] ) ) . dispatchEvent ( "click" ) ;
412
+ for ( let i = 0 ; i < filterNames . length ; i ++ ) {
413
+ await page . getByText ( filterRegex ( filterNames [ i ] ) ) . dispatchEvent ( "click" ) ;
404
414
await expect (
405
- getNamedFilterButton ( page , selectedFilterList [ i ] ) . getByRole ( "checkbox" )
415
+ getNamedFilterButtonLocator ( page , selectedFilterNamesList [ i ] ) . getByRole (
416
+ "checkbox"
417
+ )
406
418
) . not . toBeChecked ( ) ;
407
419
await page . locator ( "body" ) . click ( ) ;
408
420
}
0 commit comments