@@ -21,7 +21,7 @@ const {
21
21
} = require ( '../../mock-data/users' ) ;
22
22
const { usersStatus } = require ( '../../mock-data/users-status' ) ;
23
23
const { taskDone, auditLogTasks } = require ( '../../mock-data/tasks/index' ) ;
24
-
24
+ const baseUrl = 'http://localhost:8000/extension-requests' ;
25
25
describe ( 'Tests the Extension Requests Screen' , ( ) => {
26
26
let browser ;
27
27
let page ;
@@ -46,7 +46,9 @@ describe('Tests the Extension Requests Screen', () => {
46
46
const url = interceptedRequest . url ( ) ;
47
47
if (
48
48
url ===
49
- 'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3APENDING'
49
+ 'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3APENDING' ||
50
+ url ===
51
+ 'https://api.realdevsquad.com/extension-requests?dev=true&order=asc'
50
52
) {
51
53
interceptedRequest . respond ( {
52
54
status : 200 ,
@@ -109,6 +111,19 @@ describe('Tests the Extension Requests Screen', () => {
109
111
} ,
110
112
body : JSON . stringify ( userSunny ) ,
111
113
} ) ;
114
+ } else if (
115
+ url === 'https://api.realdevsquad.com/users?search=randhir&size=1'
116
+ ) {
117
+ interceptedRequest . respond ( {
118
+ status : 200 ,
119
+ contentType : 'application/json' ,
120
+ headers : {
121
+ 'Access-Control-Allow-Origin' : '*' ,
122
+ 'Access-Control-Allow-Methods' : 'GET, POST, PUT, DELETE, OPTIONS' ,
123
+ 'Access-Control-Allow-Headers' : 'Content-Type, Authorization' ,
124
+ } ,
125
+ body : JSON . stringify ( userRandhir ) ,
126
+ } ) ;
112
127
} else if (
113
128
url ===
114
129
'https://api.realdevsquad.com/tasks/PYj79ki2agB0q5JN3kUf/details'
@@ -263,7 +278,9 @@ describe('Tests the Extension Requests Screen', () => {
263
278
} ) ;
264
279
} else if (
265
280
url ===
266
- 'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3AAPPROVED%2BPENDING%2BDENIED'
281
+ 'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3AAPPROVED%2BPENDING%2BDENIED' ||
282
+ url ===
283
+ 'https://api.realdevsquad.com/extension-requests?dev=true&order=asc&q=status%3AAPPROVED%2BDENIED'
267
284
) {
268
285
interceptedRequest . respond ( {
269
286
status : 200 ,
@@ -327,12 +344,26 @@ describe('Tests the Extension Requests Screen', () => {
327
344
} ,
328
345
body : JSON . stringify ( extensionRequestLogs [ 'lw7dRB0I3a6ivsFR5Izs' ] ) ,
329
346
} ) ;
347
+ } else if (
348
+ url ===
349
+ 'https://api.realdevsquad.com/extension-requests?order=asc&size=5&q=status%3AAPPROVED%2Cassignee%3AiODXB6gfsjaZB9p0XlBw%2B7yzVDl8s1ORNCtH9Ps7K'
350
+ ) {
351
+ interceptedRequest . respond ( {
352
+ status : 200 ,
353
+ contentType : 'application/json' ,
354
+ headers : {
355
+ 'Access-Control-Allow-Origin' : '*' ,
356
+ 'Access-Control-Allow-Methods' : 'GET, POST, PUT, DELETE, OPTIONS' ,
357
+ 'Access-Control-Allow-Headers' : 'Content-Type, Authorization' ,
358
+ } ,
359
+ body : JSON . stringify ( extensionRequestsListUserSearch ) ,
360
+ } ) ;
330
361
} else {
331
362
interceptedRequest . continue ( ) ;
332
363
}
333
364
} ) ;
334
365
335
- await page . goto ( 'http://localhost:8000/extension-requests' ) ;
366
+ await page . goto ( baseUrl ) ;
336
367
337
368
await page . waitForNetworkIdle ( ) ;
338
369
@@ -361,6 +392,31 @@ describe('Tests the Extension Requests Screen', () => {
361
392
expect ( extensionCardsList . length ) . toBe ( 4 ) ;
362
393
expect ( extensionRequestsElement ) . toBeTruthy ( ) ;
363
394
} ) ;
395
+ it ( 'Should contain all dates elements' , async ( ) => {
396
+ const checkContainer = async ( containerId ) => {
397
+ const textExists = await page . $eval (
398
+ `${ containerId } .card-row-text` ,
399
+ ( el ) => ! ! el ,
400
+ ) ;
401
+ const valueExists = await page . $eval (
402
+ `${ containerId } .tooltip-container` ,
403
+ ( el ) => ! ! el ,
404
+ ) ;
405
+ const tooltipExists = await page . $eval (
406
+ `${ containerId } .tooltip` ,
407
+ ( el ) => ! ! el ,
408
+ ) ;
409
+
410
+ expect ( textExists ) . toBeTruthy ( ) ;
411
+ expect ( valueExists ) . toBeTruthy ( ) ;
412
+ expect ( tooltipExists ) . toBeTruthy ( ) ;
413
+ } ;
414
+
415
+ await checkContainer ( '#deadline-container' ) ;
416
+ await checkContainer ( '#requested-time-container' ) ;
417
+ await checkContainer ( '#new-deadline-container' ) ;
418
+ await checkContainer ( '#extension-container' ) ;
419
+ } ) ;
364
420
365
421
it ( 'checks the search functionality' , async ( ) => {
366
422
await page . type ( '#assignee-search' , 'sunny' ) ;
@@ -511,14 +567,14 @@ describe('Tests the Extension Requests Screen', () => {
511
567
'.extension-card:first-child .panel' ,
512
568
) ;
513
569
const firstAccordionIsVisible = await firstAccordionContent . evaluate (
514
- ( el ) => el . style . display === 'block ',
570
+ ( el ) => el . style . maxHeight !== ' ',
515
571
) ;
516
572
expect ( firstAccordionIsVisible ) . toBe ( true ) ;
517
573
518
574
await firstAccordionButton . click ( ) ;
519
575
520
576
const firstAccordionIsHidden = await firstAccordionContent . evaluate (
521
- ( el ) => el . style . display !== 'block ',
577
+ ( el ) => el . style . maxHeight === ' ',
522
578
) ;
523
579
expect ( firstAccordionIsHidden ) . toBe ( true ) ;
524
580
} ) ;
@@ -630,7 +686,7 @@ describe('Tests the Extension Requests Screen', () => {
630
686
await page . $eval ( '.title-text-input' , ( el ) => ( el . value = '' ) ) ;
631
687
await page . type ( '.title-text-input' , newTitle ) ;
632
688
633
- const newDate = '2023-09-19T22:20 ' ;
689
+ const newDate = '2023-09-19 ' ;
634
690
await page . evaluate ( ( newDate ) => {
635
691
document . querySelector ( '.date-input' ) . value = newDate ;
636
692
} , newDate ) ;
@@ -668,7 +724,7 @@ describe('Tests the Extension Requests Screen', () => {
668
724
const newTitle = 'New Title Text' ;
669
725
await page . type ( '.title-text-input' , newTitle ) ;
670
726
671
- const newDate = '2023-09-19T22:20 ' ;
727
+ const newDate = '2023-09-19 ' ;
672
728
await page . evaluate ( ( newDate ) => {
673
729
document . querySelector ( '.date-input' ) . value = newDate ;
674
730
} , newDate ) ;
@@ -774,7 +830,7 @@ describe('Tests the Extension Requests Screen', () => {
774
830
const cardNumber1Value = await extensionRequestNumberContainer [ 1 ] . evaluate (
775
831
( node ) => node . textContent ,
776
832
) ;
777
- expect ( cardNumber1Value ) . toBe ( '5' ) ;
833
+ expect ( cardNumber1Value ) . toBe ( '# 5' ) ;
778
834
} ) ;
779
835
780
836
test ( 'Default Request Number to 1 if requestNumber field is missing in API Response' , async ( ) => {
@@ -791,7 +847,7 @@ describe('Tests the Extension Requests Screen', () => {
791
847
const cardNumber2Value = await extensionRequestNumberContainer [ 3 ] . evaluate (
792
848
( node ) => node . textContent ,
793
849
) ;
794
- expect ( cardNumber2Value ) . toBe ( '1' ) ;
850
+ expect ( cardNumber2Value ) . toBe ( '# 1' ) ;
795
851
} ) ;
796
852
797
853
it ( 'Validating if audit logs are being generated in realtime' , async ( ) => {
@@ -823,7 +879,7 @@ describe('Tests the Extension Requests Screen', () => {
823
879
// Click the first element with class '.edit-button'
824
880
await page . $$eval ( '.edit-button' , ( buttons ) => buttons [ 0 ] . click ( ) ) ;
825
881
const newTitle = 'This is a new title test case' ;
826
- const newDate = '2024-09-19T22:20 ' ;
882
+ const newDate = '2024-09-19 ' ;
827
883
const newReason = 'This is the new reason' ;
828
884
829
885
// Updating all the input fields
@@ -849,4 +905,41 @@ describe('Tests the Extension Requests Screen', () => {
849
905
logs = await extensionLogsForFirstER . $$ ( '.log-div' ) ;
850
906
expect ( Array . from ( logs ) . length ) . toBe ( 9 ) ;
851
907
} ) ;
908
+
909
+ it ( 'Should update page url when filters and usernames are changed' , async ( ) => {
910
+ await page . click ( '#filter-button' ) ;
911
+ await page . click ( 'input[value="PENDING"]' ) ;
912
+ await page . click ( 'input[value="APPROVED"]' ) ;
913
+ await page . click ( '#apply-filter-button' ) ;
914
+ await page . type ( '#assignee-search' , 'sunny,randhir' ) ;
915
+ await page . keyboard . press ( 'Enter' ) ;
916
+ await page . waitForNetworkIdle ( ) ;
917
+ const url = page . url ( ) ;
918
+ expect ( url ) . toBe (
919
+ `${ baseUrl } ?order=asc&size=5&q=status%3AAPPROVED%2Cassignee%3Asunny%2Brandhir` ,
920
+ ) ;
921
+ } ) ;
922
+ it ( 'Should have UI elements in sync with url' , async ( ) => {
923
+ await page . goto (
924
+ `${ baseUrl } /?order=asc&size=5&q=status%3AAPPROVED%2Cassignee%3Asunny%2Brandhir` ,
925
+ ) ;
926
+ const filterButton = await page . $ ( '#filter-button' ) ;
927
+ await filterButton . click ( ) ;
928
+ await page . waitForSelector ( '.filter-modal' ) ;
929
+ const approvedFilter = await page . $ ( 'input[value="APPROVED"]' ) ;
930
+ const currentState = await approvedFilter . getProperty ( 'checked' ) ;
931
+ const isApprovedChecked = await currentState . jsonValue ( ) ;
932
+ expect ( isApprovedChecked ) . toBe ( true ) ;
933
+ const searchText = await page . $eval (
934
+ '#assignee-search' ,
935
+ ( input ) => input . value ,
936
+ ) ;
937
+ expect ( searchText ) . toBe ( 'sunny,randhir' ) ;
938
+ await page . waitForSelector ( '.sort-button' ) ;
939
+ const ascSortIconDisplayStyle = await page . $eval (
940
+ '#asc-sort-icon' ,
941
+ ( icon ) => window . getComputedStyle ( icon ) . display ,
942
+ ) ;
943
+ expect ( ascSortIconDisplayStyle ) . toBe ( 'block' ) ;
944
+ } ) ;
852
945
} ) ;
0 commit comments