1515 * limitations under the License.
1616 */
1717
18- import { SimpleChange } from '@angular/core' ;
18+ import { Component , SimpleChange } from '@angular/core' ;
1919import { ComponentFixture , fakeAsync , flush , TestBed } from '@angular/core/testing' ;
2020import { first , of , throwError } from 'rxjs' ;
2121import { ProcessFilterCloudService } from '../../services/process-filter-cloud.service' ;
@@ -30,6 +30,11 @@ import { ApolloTestingModule } from 'apollo-angular/testing';
3030import { HarnessLoader } from '@angular/cdk/testing' ;
3131import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed' ;
3232import { MatIconHarness } from '@angular/material/icon/testing' ;
33+ import { ActivatedRoute , provideRouter , Router } from '@angular/router' ;
34+ import { RouterTestingHarness } from '@angular/router/testing' ;
35+
36+ @Component ( { selector : 'adf-cloud-dummy' , template : '' } )
37+ class DummyComponent { }
3338
3439const ProcessFilterCloudServiceMock = {
3540 getProcessFilters : ( ) => of ( mockProcessFilters ) ,
@@ -44,8 +49,9 @@ describe('ProcessFiltersCloudComponent', () => {
4449 let getProcessFiltersSpy : jasmine . Spy ;
4550 let getProcessNotificationSubscriptionSpy : jasmine . Spy ;
4651 let loader : HarnessLoader ;
52+ let router : Router ;
4753
48- const configureTestingModule = ( searchApiMethod : 'GET' | 'POST' ) => {
54+ const configureTestingModule = async ( searchApiMethod : 'GET' | 'POST' ) => {
4955 TestBed . configureTestingModule ( {
5056 imports : [ ProcessFiltersCloudComponent , ApolloTestingModule ] ,
5157 providers : [
@@ -58,7 +64,21 @@ describe('ProcessFiltersCloudComponent', () => {
5864 getProcessListCount : ( ) => of ( 10 )
5965 }
6066 } ,
61- { provide : ProcessFilterCloudService , useValue : ProcessFilterCloudServiceMock }
67+ { provide : ProcessFilterCloudService , useValue : ProcessFilterCloudServiceMock } ,
68+ provideRouter ( [ { path : 'process-list-cloud' , component : DummyComponent } ] ) ,
69+ {
70+ provide : ActivatedRoute ,
71+ useValue : {
72+ queryParamMap : of ( {
73+ get : ( param : string ) => {
74+ if ( param === 'filterId' ) {
75+ return 'fake-process-filter-id' ;
76+ }
77+ return null ;
78+ }
79+ } )
80+ }
81+ }
6282 ]
6383 } ) ;
6484 fixture = TestBed . createComponent ( ProcessFiltersCloudComponent ) ;
@@ -67,6 +87,9 @@ describe('ProcessFiltersCloudComponent', () => {
6787 component . searchApiMethod = searchApiMethod ;
6888
6989 processFilterService = TestBed . inject ( ProcessFilterCloudService ) ;
90+ TestBed . inject ( ActivatedRoute ) ;
91+ router = TestBed . inject ( Router ) ;
92+ await RouterTestingHarness . create ( ) ;
7093 getProcessFiltersSpy = spyOn ( processFilterService , 'getProcessFilters' ) . and . returnValue ( of ( mockProcessFilters ) ) ;
7194 getProcessNotificationSubscriptionSpy = spyOn ( processFilterService , 'getProcessNotificationSubscription' ) . and . returnValue ( of ( [ ] ) ) ;
7295 } ;
@@ -76,8 +99,8 @@ describe('ProcessFiltersCloudComponent', () => {
7699 } ) ;
77100
78101 describe ( 'searchApiMethod set to GET' , ( ) => {
79- beforeEach ( ( ) => {
80- configureTestingModule ( 'GET' ) ;
102+ beforeEach ( async ( ) => {
103+ await configureTestingModule ( 'GET' ) ;
81104 } ) ;
82105
83106 it ( 'should attach specific icon for each filter if hasIcon is true' , async ( ) => {
@@ -182,20 +205,6 @@ describe('ProcessFiltersCloudComponent', () => {
182205
183206 describe ( 'Highlight Selected Filter' , ( ) => {
184207 const allProcessesFilterKey = mockProcessFilters [ 0 ] . key ;
185- const runningProcessesFilterKey = mockProcessFilters [ 1 ] . key ;
186- const completedProcessesFilterKey = mockProcessFilters [ 2 ] . key ;
187-
188- const getActiveFilterElement = ( filterKey : string ) : Element => {
189- const activeFilter = fixture . debugElement . query ( By . css ( `.adf-active` ) ) ;
190- return activeFilter . nativeElement . querySelector ( `[data-automation-id="${ filterKey } _filter"]` ) ;
191- } ;
192-
193- const clickOnFilter = async ( filterKey : string ) => {
194- const button = fixture . debugElement . nativeElement . querySelector ( `[data-automation-id="${ filterKey } _filter"]` ) ;
195- button . click ( ) ;
196- fixture . detectChanges ( ) ;
197- await fixture . whenStable ( ) ;
198- } ;
199208
200209 it ( 'should apply active CSS class on filter click' , async ( ) => {
201210 component . enableNotifications = true ;
@@ -205,36 +214,20 @@ describe('ProcessFiltersCloudComponent', () => {
205214 fixture . detectChanges ( ) ;
206215 await fixture . whenStable ( ) ;
207216
208- await clickOnFilter ( allProcessesFilterKey ) ;
209- fixture . detectChanges ( ) ;
210- await fixture . whenStable ( ) ;
211-
212- expect ( getActiveFilterElement ( allProcessesFilterKey ) ) . toBeDefined ( ) ;
213- expect ( getActiveFilterElement ( runningProcessesFilterKey ) ) . toBeNull ( ) ;
214- expect ( getActiveFilterElement ( completedProcessesFilterKey ) ) . toBeNull ( ) ;
215-
216- await clickOnFilter ( runningProcessesFilterKey ) ;
217- fixture . detectChanges ( ) ;
218- await fixture . whenStable ( ) ;
217+ const link = fixture . debugElement . query ( By . css ( `[data-automation-id="${ allProcessesFilterKey } _filter"]` ) ) . nativeElement ;
218+ expect ( link . getAttribute ( 'href' ) ) . toBe ( '/process-list-cloud?filterId=10' ) ;
219219
220- expect ( getActiveFilterElement ( allProcessesFilterKey ) ) . toBeNull ( ) ;
221- expect ( getActiveFilterElement ( runningProcessesFilterKey ) ) . toBeDefined ( ) ;
222- expect ( getActiveFilterElement ( completedProcessesFilterKey ) ) . toBeNull ( ) ;
223-
224- await clickOnFilter ( completedProcessesFilterKey ) ;
220+ link . click ( ) ;
225221 fixture . detectChanges ( ) ;
226222 await fixture . whenStable ( ) ;
227-
228- expect ( getActiveFilterElement ( allProcessesFilterKey ) ) . toBeNull ( ) ;
229- expect ( getActiveFilterElement ( runningProcessesFilterKey ) ) . toBeNull ( ) ;
230- expect ( getActiveFilterElement ( completedProcessesFilterKey ) ) . toBeDefined ( ) ;
223+ expect ( router . url ) . toBe ( '/process-list-cloud?filterId=10' ) ;
231224 } ) ;
232225 } ) ;
233226 } ) ;
234227
235228 describe ( 'searchApiMethod set to POST' , ( ) => {
236- beforeEach ( ( ) => {
237- configureTestingModule ( 'POST' ) ;
229+ beforeEach ( async ( ) => {
230+ await configureTestingModule ( 'POST' ) ;
238231 } ) ;
239232
240233 it ( 'should attach specific icon for each filter if hasIcon is true' , async ( ) => {
@@ -336,62 +329,11 @@ describe('ProcessFiltersCloudComponent', () => {
336329 expect ( component . currentFilter ) . toEqual ( mockProcessFilters [ 0 ] ) ;
337330 expect ( filterClickedSpy ) . toHaveBeenCalledWith ( mockProcessFilters [ 0 ] ) ;
338331 } ) ;
339-
340- describe ( 'Highlight Selected Filter' , ( ) => {
341- const allProcessesFilterKey = mockProcessFilters [ 0 ] . key ;
342- const runningProcessesFilterKey = mockProcessFilters [ 1 ] . key ;
343- const completedProcessesFilterKey = mockProcessFilters [ 2 ] . key ;
344-
345- const getActiveFilterElement = ( filterKey : string ) : Element => {
346- const activeFilter = fixture . debugElement . query ( By . css ( `.adf-active` ) ) ;
347- return activeFilter . nativeElement . querySelector ( `[data-automation-id="${ filterKey } _filter"]` ) ;
348- } ;
349-
350- const clickOnFilter = async ( filterKey : string ) => {
351- const button = fixture . debugElement . nativeElement . querySelector ( `[data-automation-id="${ filterKey } _filter"]` ) ;
352- button . click ( ) ;
353- fixture . detectChanges ( ) ;
354- await fixture . whenStable ( ) ;
355- } ;
356-
357- it ( 'should apply active CSS class on filter click' , async ( ) => {
358- component . enableNotifications = true ;
359- component . appName = 'mock-app-name' ;
360- const appNameChange = new SimpleChange ( null , 'mock-app-name' , true ) ;
361- component . ngOnChanges ( { appName : appNameChange } ) ;
362- fixture . detectChanges ( ) ;
363- await fixture . whenStable ( ) ;
364-
365- await clickOnFilter ( allProcessesFilterKey ) ;
366- fixture . detectChanges ( ) ;
367- await fixture . whenStable ( ) ;
368-
369- expect ( getActiveFilterElement ( allProcessesFilterKey ) ) . toBeDefined ( ) ;
370- expect ( getActiveFilterElement ( runningProcessesFilterKey ) ) . toBeNull ( ) ;
371- expect ( getActiveFilterElement ( completedProcessesFilterKey ) ) . toBeNull ( ) ;
372-
373- await clickOnFilter ( runningProcessesFilterKey ) ;
374- fixture . detectChanges ( ) ;
375- await fixture . whenStable ( ) ;
376-
377- expect ( getActiveFilterElement ( allProcessesFilterKey ) ) . toBeNull ( ) ;
378- expect ( getActiveFilterElement ( runningProcessesFilterKey ) ) . toBeDefined ( ) ;
379- expect ( getActiveFilterElement ( completedProcessesFilterKey ) ) . toBeNull ( ) ;
380-
381- await clickOnFilter ( completedProcessesFilterKey ) ;
382- fixture . detectChanges ( ) ;
383- await fixture . whenStable ( ) ;
384-
385- expect ( getActiveFilterElement ( allProcessesFilterKey ) ) . toBeNull ( ) ;
386- expect ( getActiveFilterElement ( runningProcessesFilterKey ) ) . toBeNull ( ) ;
387- expect ( getActiveFilterElement ( completedProcessesFilterKey ) ) . toBeDefined ( ) ;
388- } ) ;
389- } ) ;
390332 } ) ;
391333
392334 describe ( 'API agnostic' , ( ) => {
393- beforeEach ( ( ) => {
394- configureTestingModule ( 'GET' ) ;
335+ beforeEach ( async ( ) => {
336+ await configureTestingModule ( 'GET' ) ;
395337 } ) ;
396338
397339 it ( 'should emit an error with a bad response' , ( ) => {
@@ -549,43 +491,7 @@ describe('ProcessFiltersCloudComponent', () => {
549491 } ) ;
550492
551493 describe ( 'Highlight Selected Filter' , ( ) => {
552- const allProcessesFilterKey = mockProcessFilters [ 0 ] . key ;
553- const runningProcessesFilterKey = mockProcessFilters [ 1 ] . key ;
554- const completedProcessesFilterKey = mockProcessFilters [ 2 ] . key ;
555-
556- const getActiveFilterElement = ( filterKey : string ) : Element => {
557- const activeFilter = fixture . debugElement . query ( By . css ( `.adf-active` ) ) ;
558- return activeFilter . nativeElement . querySelector ( `[data-automation-id="${ filterKey } _filter"]` ) ;
559- } ;
560-
561- it ( 'Should apply active CSS class when filterParam input changed' , async ( ) => {
562- fixture . detectChanges ( ) ;
563- component . ngOnChanges ( { filterParam : new SimpleChange ( null , { key : allProcessesFilterKey } , true ) } ) ;
564- fixture . detectChanges ( ) ;
565- await fixture . whenStable ( ) ;
566-
567- expect ( getActiveFilterElement ( allProcessesFilterKey ) ) . toBeDefined ( ) ;
568- expect ( getActiveFilterElement ( runningProcessesFilterKey ) ) . toBeNull ( ) ;
569- expect ( getActiveFilterElement ( completedProcessesFilterKey ) ) . toBeNull ( ) ;
570-
571- component . ngOnChanges ( { filterParam : new SimpleChange ( null , { key : runningProcessesFilterKey } , true ) } ) ;
572- fixture . detectChanges ( ) ;
573- await fixture . whenStable ( ) ;
574-
575- expect ( getActiveFilterElement ( allProcessesFilterKey ) ) . toBeNull ( ) ;
576- expect ( getActiveFilterElement ( runningProcessesFilterKey ) ) . toBeDefined ( ) ;
577- expect ( getActiveFilterElement ( completedProcessesFilterKey ) ) . toBeNull ( ) ;
578-
579- component . ngOnChanges ( { filterParam : new SimpleChange ( null , { key : completedProcessesFilterKey } , true ) } ) ;
580- fixture . detectChanges ( ) ;
581- await fixture . whenStable ( ) ;
582-
583- expect ( getActiveFilterElement ( allProcessesFilterKey ) ) . toBeNull ( ) ;
584- expect ( getActiveFilterElement ( runningProcessesFilterKey ) ) . toBeNull ( ) ;
585- expect ( getActiveFilterElement ( completedProcessesFilterKey ) ) . toBeDefined ( ) ;
586- } ) ;
587-
588- it ( 'should made sbscription' , ( ) => {
494+ it ( 'should make subscription' , ( ) => {
589495 component . enableNotifications = true ;
590496 component . appName = 'mock-app-name' ;
591497 const appNameChange = new SimpleChange ( null , 'mock-app-name' , true ) ;
0 commit comments