/*! * @license * Alfresco Example Content Application * * Copyright (C) 2005 - 2018 Alfresco Software Limited * * This file is part of the Alfresco Example Content Application. * If the software was purchased under a paid Alfresco license, the terms of * the paid license agreement will prevail. Otherwise, the software is * provided under the following open source license terms: * * The Alfresco Example Content Application is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The Alfresco Example Content Application is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ import { TestBed, async, fakeAsync, tick, ComponentFixture } from '@angular/core/testing'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { Router } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; import { HttpClientModule } from '@angular/common/http'; import { NotificationService, TranslationService, TranslationMock, NodesApiService, AlfrescoApiService, ContentService, UserPreferencesService, LogService, AppConfigService, UploadService, StorageService, CookieService, ThumbnailService, AuthenticationService, TimeAgoPipe, NodeNameTooltipPipe, NodeFavoriteDirective, DataTableComponent, AppConfigPipe } from '@alfresco/adf-core'; import { DocumentListComponent, CustomResourcesService } from '@alfresco/adf-content-services'; import { TranslateModule } from '@ngx-translate/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { MatMenuModule, MatSnackBarModule, MatIconModule } from '@angular/material'; import { DocumentListService } from '@alfresco/adf-content-services'; import { ContentManagementService } from '../../common/services/content-management.service'; import { NodePermissionService } from '../../common/services/node-permission.service'; import { SharedFilesComponent } from './shared-files.component'; import { StoreModule } from '@ngrx/store'; import { appReducer } from '../../store/reducers/app.reducer'; import { INITIAL_STATE } from '../../store/states/app.state'; describe('SharedFilesComponent', () => { let fixture: ComponentFixture; let component: SharedFilesComponent; let contentService: ContentManagementService; let nodeService; let alfrescoApi: AlfrescoApiService; let router: Router; let page; beforeEach(() => { page = { list: { entries: [ { entry: { id: 1 } }, { entry: { id: 2 } } ], pagination: { data: 'data'} } }; }); beforeEach(async(() => { TestBed .configureTestingModule({ imports: [ MatMenuModule, NoopAnimationsModule, HttpClientModule, TranslateModule.forRoot(), RouterTestingModule, MatSnackBarModule, MatIconModule, StoreModule.forRoot({ app: appReducer }, { initialState: INITIAL_STATE }) ], declarations: [ DataTableComponent, TimeAgoPipe, NodeNameTooltipPipe, NodeFavoriteDirective, DocumentListComponent, SharedFilesComponent, AppConfigPipe ], providers: [ { provide: TranslationService, useClass: TranslationMock }, AuthenticationService, UserPreferencesService, AppConfigService, StorageService, CookieService, AlfrescoApiService, LogService, NotificationService, ContentManagementService, NodePermissionService, ContentService, NodesApiService, DocumentListService, ThumbnailService, CustomResourcesService, UploadService ], schemas: [ NO_ERRORS_SCHEMA ] }) .compileComponents() .then(() => { fixture = TestBed.createComponent(SharedFilesComponent); component = fixture.componentInstance; contentService = TestBed.get(ContentManagementService); alfrescoApi = TestBed.get(AlfrescoApiService); alfrescoApi.reset(); nodeService = alfrescoApi.getInstance().nodes; router = TestBed.get(Router); }); })); beforeEach(() => { spyOn(alfrescoApi.sharedLinksApi, 'findSharedLinks').and.returnValue(Promise.resolve(page)); }); describe('OnInit', () => { beforeEach(() => { spyOn(component, 'reload').and.callFake(val => val); }); it('should refresh on deleteNode event', () => { fixture.detectChanges(); contentService.nodesDeleted.next(); expect(component.reload).toHaveBeenCalled(); }); it('should refresh on restoreNode event', () => { fixture.detectChanges(); contentService.nodesRestored.next(); expect(component.reload).toHaveBeenCalled(); }); it('should reload on move node event', () => { fixture.detectChanges(); contentService.nodesMoved.next(); expect(component.reload).toHaveBeenCalled(); }); }); describe('onNodeDoubleClick()', () => { beforeEach(() => { fixture.detectChanges(); }); it('opens viewer if node is file', fakeAsync(() => { spyOn(router, 'navigate').and.stub(); const link = { nodeId: 'nodeId' }; const node = { entry: { isFile: true, id: 'nodeId' } }; spyOn(nodeService, 'getNode').and.returnValue(Promise.resolve(node)); component.onNodeDoubleClick(link); tick(); expect(router.navigate['calls'].argsFor(0)[0]).toEqual(['./preview', node.entry.id]); })); it('does nothing if link data is not passed', () => { spyOn(router, 'navigate').and.stub(); spyOn(nodeService, 'getNode').and.returnValue(Promise.resolve({ entry: { isFile: true } })); component.onNodeDoubleClick(null); expect(router.navigate).not.toHaveBeenCalled(); }); }); describe('refresh', () => { it('should call document list reload', () => { spyOn(component.documentList, 'reload'); fixture.detectChanges(); component.reload(); expect(component.documentList.reload).toHaveBeenCalled(); }); }); });