import { NO_ERRORS_SCHEMA } from '@angular/core' ; import { Router } from '@angular/router' ; import { TestBed , ComponentFixture } from '@angular/core/testing' ; import { NodeFavoriteDirective , DataTableComponent , AppConfigModule } from '@alfresco/adf-core' ; import { CustomResourcesService , DocumentListComponent } from '@alfresco/adf-content-services' ; import { of } from 'rxjs' ; import { FavoritesComponent } from './favorites.component' ; import { AppTestingModule } from '../../testing/app-testing.module' ; import { ContentApiService } from '@alfresco/aca-shared' ; describe ( 'FavoritesComponent' , ( ) => { let fixture ; let component ; let contentApi ; let router ; let node ; beforeEach ( ( ) => { TestBed . configureTestingModule ( { imports : [ AppTestingModule , AppConfigModule ] , declarations : [ DataTableComponent , NodeFavoriteDirective , DocumentListComponent , FavoritesComponent ] , providers : [ { provide : Router , useValue : { url : 'favorites' , navigate : ( ) => { } } } ] , schemas : [ NO_ERRORS_SCHEMA ] } ) ; const page = { list : { entries : [ { entry : { id : 1 , target : { file : { } } } } , { entry : { id : 2 , target : { folder : { } } } } ] , pagination : { data : 'data' } } } ; node = { id : 'folder-node' , isFolder : true , isFile : false , path : { elements : [ ] } } ; fixture = TestBed . createComponent ( FavoritesComponent ) ; component = fixture . componentInstance ; const customResourcesService = TestBed . inject ( CustomResourcesService ) ; spyOn ( customResourcesService , 'loadFavorites' ) . and . returnValue ( of ( page ) ) ; contentApi = TestBed . inject ( ContentApiService ) ; router = TestBed . inject ( Router ) ; } ) ; describe ( 'Node navigation' , ( ) => { beforeEach ( ( ) => { spyOn ( contentApi , 'getNode' ) . and . returnValue ( of ( { entry : node } ) ) ; spyOn ( router , 'navigate' ) . and . stub ( ) ; fixture . detectChanges ( ) ; } ) ; it ( 'navigates to `/libraries` if node path has `Sites`' , ( ) => { node . path . elements = [ { name : 'Sites' } ] ; component . navigate ( node ) ; expect ( router . navigate ) . toHaveBeenCalledWith ( [ '/libraries' , 'folder-node' ] ) ; } ) ; it ( 'navigates to `/personal-files` if node path has no `Sites`' , ( ) => { node . path . elements = [ { name : 'something else' } ] ; component . navigate ( node ) ; expect ( router . navigate ) . toHaveBeenCalledWith ( [ '/personal-files' , 'folder-node' ] ) ; } ) ; it ( 'does not navigate when node is not folder' , ( ) => { node . isFolder = false ; component . navigate ( node ) ; expect ( router . navigate ) . not . toHaveBeenCalled ( ) ; } ) ; } ) ; it ( 'should navigate if node is folder' , ( ) => { const nodeEntity = { entry : { isFolder : true } } ; spyOn ( component , 'navigate' ) . and . stub ( ) ; fixture . detectChanges ( ) ; component . onNodeDoubleClick ( nodeEntity ) ; expect ( component . navigate ) . toHaveBeenCalledWith ( nodeEntity . entry ) ; } ) ; it ( 'should call showPreview if node is file' , ( ) => { const nodeEntity = { entry : { isFile : true } } ; spyOn ( component , 'showPreview' ) . and . stub ( ) ; fixture . detectChanges ( ) ; component . onNodeDoubleClick ( nodeEntity ) ; expect ( component . showPreview ) . toHaveBeenCalledWith ( nodeEntity , { location : 'favorites' } ) ; } ) ; } ) ;