import { TestBed , fakeAsync , tick } from '@angular/core/testing' ; import { AppTestingModule } from '../../testing/app-testing.module' ; import { ViewerEffects } from './viewer.effects' ; import { EffectsModule } from '@ngrx/effects' ; import { Store } from '@ngrx/store' ; import { Router } from '@angular/router' ; import { ViewFileAction , ViewNodeAction , SetSelectedNodesAction , SetCurrentFolderAction } from '@alfresco/aca-shared/store' ; describe ( 'ViewerEffects' , ( ) => { let store ; let router ; beforeEach ( ( ) => { TestBed . configureTestingModule ( { imports : [ AppTestingModule , EffectsModule . forRoot ( [ ViewerEffects ] ) ] } ) ; store = TestBed . inject ( Store ) ; router = TestBed . inject ( Router ) ; spyOn ( router , 'navigateByUrl' ) . and . stub ( ) ; } ) ; describe ( 'ViewFile' , ( ) => { it ( 'should preview file from store selection' , fakeAsync ( ( ) => { const node = { entry : { isFile : true , id : 'someId' } } ; const folder = { isFolder : true , id : 'folder1' } ; store . dispatch ( new SetCurrentFolderAction ( folder ) ) ; store . dispatch ( new SetSelectedNodesAction ( [ node ] ) ) ; tick ( 100 ) ; store . dispatch ( new ViewFileAction ( ) ) ; tick ( 100 ) ; expect ( router . navigateByUrl ) . toHaveBeenCalledWith ( '/folder1/preview/someId' ) ; } ) ) ; it ( 'should preview file from payload' , fakeAsync ( ( ) => { const node = { entry : { isFile : true , id : 'someId' } } ; store . dispatch ( new ViewFileAction ( node ) ) ; tick ( 100 ) ; expect ( router . navigateByUrl ) . toHaveBeenCalledWith ( '/preview/someId' ) ; } ) ) ; } ) ; describe ( 'ViewNode' , ( ) => { it ( 'should open viewer from file location if' , fakeAsync ( ( ) => { store . dispatch ( new ViewNodeAction ( 'nodeId' , { location : 'some-location' } ) ) ; tick ( 100 ) ; expect ( router . navigateByUrl [ 'calls' ] . argsFor ( 0 ) [ 0 ] . toString ( ) ) . toEqual ( '/some-location/(viewer:view/nodeId)?location=some-location' ) ; } ) ) ; it ( 'should navigate to viewer route if no location is passed' , fakeAsync ( ( ) => { store . dispatch ( new ViewNodeAction ( 'nodeId' ) ) ; tick ( 100 ) ; expect ( router . navigateByUrl [ 'calls' ] . argsFor ( 0 ) [ 0 ] . toString ( ) ) . toEqual ( '/view/(viewer:nodeId)' ) ; } ) ) ; it ( 'should navigate to viewer route with query param if path is passed' , fakeAsync ( ( ) => { store . dispatch ( new ViewNodeAction ( 'nodeId' , { path : 'absolute-path' } ) ) ; tick ( 100 ) ; expect ( router . navigateByUrl [ 'calls' ] . argsFor ( 0 ) [ 0 ] . toString ( ) ) . toEqual ( '/view/(viewer:nodeId)?path=absolute-path' ) ; } ) ) ; } ) ; } ) ;