@@ -357,3 +357,164 @@ describe('urlParams', () => {
357
357
expect ( newestFirstClass ) . toContain ( 'selected' ) ;
358
358
} ) ;
359
359
} ) ;
360
+
361
+ describe ( 'Sort Icon Functionality' , ( ) => {
362
+ beforeEach ( async ( ) => {
363
+ await page . goto ( `${ SITE_URL } /task-requests/?dev=true` ) ;
364
+ await page . waitForNetworkIdle ( ) ;
365
+ } ) ;
366
+
367
+ const getSortIconDetails = async ( iconId ) => {
368
+ const iconElement = await page . $ ( `#${ iconId } ` ) ;
369
+ const display = await page . evaluate (
370
+ ( el ) => window . getComputedStyle ( el ) . display ,
371
+ iconElement ,
372
+ ) ;
373
+ return display ;
374
+ } ;
375
+
376
+ const getSortParameterDetails = async ( ) => {
377
+ const sortParameterElement = await page . $ ( '.sort-button__text' ) ;
378
+ const sortParameter = await page . evaluate (
379
+ ( el ) => el . textContent ,
380
+ sortParameterElement ,
381
+ ) ;
382
+ return sortParameter ;
383
+ } ;
384
+
385
+ it ( 'updates sort icon display and sort parameter text when sort by is changed' , async ( ) => {
386
+ let ascSortIconDisplay = await getSortIconDetails ( 'asc-sort-icon' ) ;
387
+ let descSortIconDisplay = await getSortIconDetails ( 'desc-sort-icon' ) ;
388
+ let sortParameter = await getSortParameterDetails ( ) ;
389
+
390
+ expect ( ascSortIconDisplay ) . toBe ( 'block' ) ;
391
+ expect ( descSortIconDisplay ) . toBe ( 'none' ) ;
392
+ expect ( sortParameter ) . toBe ( 'created' ) ;
393
+
394
+ await page . click ( '.sort-button' ) ;
395
+ await page . click ( '#REQUESTORS_COUNT_DESC' ) ;
396
+ await page . waitForNetworkIdle ( ) ;
397
+
398
+ ascSortIconDisplay = await getSortIconDetails ( 'asc-sort-icon' ) ;
399
+ descSortIconDisplay = await getSortIconDetails ( 'desc-sort-icon' ) ;
400
+ sortParameter = await getSortParameterDetails ( ) ;
401
+
402
+ expect ( ascSortIconDisplay ) . toBe ( 'none' ) ;
403
+ expect ( descSortIconDisplay ) . toBe ( 'block' ) ;
404
+ expect ( sortParameter ) . toBe ( 'requestors' ) ;
405
+ } ) ;
406
+
407
+ it ( 'ensures sort icon display and sort parameter text are in sync with URL parameters' , async ( ) => {
408
+ await page . goto ( `${ SITE_URL } /task-requests?sort=requestors-desc&dev=true` ) ;
409
+
410
+ const ascSortIconDisplay = await getSortIconDetails ( 'asc-sort-icon' ) ;
411
+ const descSortIconDisplay = await getSortIconDetails ( 'desc-sort-icon' ) ;
412
+ const sortParameter = await getSortParameterDetails ( ) ;
413
+
414
+ expect ( ascSortIconDisplay ) . toBe ( 'none' ) ;
415
+ expect ( descSortIconDisplay ) . toBe ( 'block' ) ;
416
+ expect ( sortParameter ) . toBe ( 'requestors' ) ;
417
+ } ) ;
418
+ } ) ;
419
+
420
+ describe ( 'badges' , ( ) => {
421
+ const DENIED = 'DENIED' ;
422
+ const ASSIGNMENT = 'assignment' ;
423
+
424
+ const getBadgeTexts = async ( page ) => {
425
+ const badges = await page . $$ ( '.badge' ) ;
426
+ return Promise . all (
427
+ badges . map ( ( badge ) => page . evaluate ( ( el ) => el . textContent , badge ) ) ,
428
+ ) ;
429
+ } ;
430
+ beforeEach ( async ( ) => {
431
+ await page . goto ( `${ SITE_URL } /task-requests/?dev=true` ) ;
432
+ await page . waitForNetworkIdle ( ) ;
433
+ } ) ;
434
+
435
+ it ( 'verifies that filters applied by the user are correctly displayed as badges on the screen' , async ( ) => {
436
+ await page . click ( '#filter-button' ) ;
437
+ await page . click ( `input[value="${ DENIED } "]` ) ;
438
+ await page . click ( `input[value="${ ASSIGNMENT } "]` ) ;
439
+ await page . click ( '#apply-filter-button' ) ;
440
+ await page . waitForNetworkIdle ( ) ;
441
+
442
+ const badgeTexts = await getBadgeTexts ( page ) ;
443
+ expect ( badgeTexts ) . toContain ( DENIED . toLowerCase ( ) ) ;
444
+ expect ( badgeTexts ) . toContain ( ASSIGNMENT ) ;
445
+ } ) ;
446
+
447
+ it ( 'verifies that badge is removed when clicked and filters are updated accordingly' , async ( ) => {
448
+ await page . goto (
449
+ `${ SITE_URL } /task-requests/?sort=created-asc&status=pending&status=denied&dev=true` ,
450
+ ) ;
451
+ await page . waitForNetworkIdle ( ) ;
452
+
453
+ const badges = await page . $$ ( '.badge' ) ;
454
+ let badgeTexts = await getBadgeTexts ( page ) ;
455
+ expect ( badgeTexts ) . toContain ( DENIED . toLowerCase ( ) ) ;
456
+ expect ( badgeTexts ) . toContain ( 'pending' ) ;
457
+
458
+ const deniedBadge = badges [ badgeTexts . indexOf ( DENIED . toLowerCase ( ) ) ] ;
459
+ await deniedBadge . click ( ) ;
460
+
461
+ badgeTexts = await getBadgeTexts ( page ) ;
462
+ expect ( badgeTexts ) . not . toContain ( DENIED . toLowerCase ( ) ) ;
463
+
464
+ const checkbox = await page . $ ( `input[value="${ DENIED } "]` ) ;
465
+ const isChecked = await page . evaluate ( ( el ) => el . checked , checkbox ) ;
466
+ expect ( isChecked ) . toBe ( false ) ;
467
+ } ) ;
468
+
469
+ it ( 'verifies that filters header is shown only when at least one badge is present' , async ( ) => {
470
+ await page . goto ( `${ SITE_URL } /task-requests/?sort=created-asc&dev=true` ) ;
471
+ await page . waitForNetworkIdle ( ) ;
472
+
473
+ const filtersHeader = await page . $ ( '.filters__header' ) ;
474
+ let displayStyle = await page . evaluate (
475
+ ( el ) => window . getComputedStyle ( el ) . display ,
476
+ filtersHeader ,
477
+ ) ;
478
+ expect ( displayStyle ) . toBe ( 'none' ) ;
479
+
480
+ await page . click ( '#filter-button' ) ;
481
+ await page . click ( `input[value="${ DENIED } "]` ) ;
482
+ await page . click ( '#apply-filter-button' ) ;
483
+ await page . waitForNetworkIdle ( ) ;
484
+
485
+ displayStyle = await page . evaluate (
486
+ ( el ) => window . getComputedStyle ( el ) . display ,
487
+ filtersHeader ,
488
+ ) ;
489
+ expect ( displayStyle ) . toBe ( 'flex' ) ;
490
+
491
+ let badges = await page . $$ ( '.badge' ) ;
492
+ let badgeTexts = await getBadgeTexts ( page ) ;
493
+
494
+ const deniedBadge = badges [ badgeTexts . indexOf ( DENIED . toLowerCase ( ) ) ] ;
495
+ await deniedBadge . click ( ) ;
496
+
497
+ displayStyle = await page . evaluate (
498
+ ( el ) => window . getComputedStyle ( el ) . display ,
499
+ filtersHeader ,
500
+ ) ;
501
+ expect ( displayStyle ) . toBe ( 'none' ) ;
502
+ } ) ;
503
+
504
+ it ( 'verifies that badges are displayed based on URL parameters and removes all badges when the Clear all button is clicked' , async ( ) => {
505
+ await page . goto (
506
+ `${ SITE_URL } /task-requests/?sort=created-asc&status=denied&request-type=assignment&dev=true` ,
507
+ ) ;
508
+ await page . waitForNetworkIdle ( ) ;
509
+
510
+ let badgeTexts = await getBadgeTexts ( page ) ;
511
+ expect ( badgeTexts ) . toContain ( 'denied' ) ;
512
+ expect ( badgeTexts ) . toContain ( ASSIGNMENT ) ;
513
+
514
+ await page . click ( '#clear-all-button' ) ;
515
+ await page . waitForNetworkIdle ( ) ;
516
+
517
+ badges = await page . $$ ( '.badge' ) ;
518
+ expect ( badges . length ) . toBe ( 0 ) ;
519
+ } ) ;
520
+ } ) ;
0 commit comments