From b0b22170c77da59a5045752fc49ad1ef77e6bb0f Mon Sep 17 00:00:00 2001 From: Eugenio Romano Date: Fri, 14 Aug 2020 09:13:23 +0100 Subject: [PATCH] [ACA-3830] Fix favorites navigation (#1599) * fix favorites navigation * improve report and unit test * fix ACA test mock version directive * lint fix * try different startegy * remove first split * fix root case --- karma.conf.js | 3 +- package-lock.json | 96 ++++++++++++++++--- package.json | 11 ++- projects/aca-shared/karma.conf.js | 3 +- .../adf-office-services-ext/karma.conf.js | 3 +- .../components/files/files.component.spec.ts | 13 ++- src/app/components/files/files.component.ts | 18 ++-- .../shared-files.component.spec.ts | 6 +- src/app/testing/app-testing.module.ts | 11 +++ 9 files changed, 131 insertions(+), 33 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index 435fe423f..c671026ec 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -11,6 +11,7 @@ module.exports = function(config) { require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage-istanbul-reporter'), + require('karma-mocha-reporter'), require('@angular-devkit/build-angular/plugins/karma') ], files: [ @@ -53,7 +54,7 @@ module.exports = function(config) { fixWebpackSourcePaths: true }, - reporters: ['progress', 'kjhtml'], + reporters: ['mocha', 'kjhtml'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/package-lock.json b/package-lock.json index 6b6b55d9a..668c9417c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@alfresco/adf-cli": { - "version": "3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db", - "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db.tgz", - "integrity": "sha512-lMfNp6LgFx1hTEubpWXemeZ4e6OOXuJjckzBQ6oebVaIBLjfg61wTurFCr3RxOzjkxHf9CZAZJmmjSHGVOKfJQ==", + "version": "3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1", + "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1.tgz", + "integrity": "sha512-LeUEYSjNuypZjPWl0TKblpVQwEO8fJlZlc/OFrH/uSRq6URN+BAa6lng/C2LbSTns6kyQ6DZ8twrGdE6ZZDEdA==", "dev": true, "requires": { "@alfresco/js-api": "3.10.0-52aeb4052b028b0ad95a388fa8c30e5394f20df0", @@ -29,33 +29,33 @@ } }, "@alfresco/adf-content-services": { - "version": "3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db", - "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db.tgz", - "integrity": "sha512-CVPusW3o9nN7fxsokHGHbRJgGAHanhvGCXQ906lDFFGK4aSKGTG7MS2x6MsjBpUa0i5zqZ9lG8Lv2T63amrvmA==", + "version": "3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1", + "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1.tgz", + "integrity": "sha512-4fOWBlmxQSF5VAWzzh+8/AIkmm+T0qqMFl0+xsiWi2QiuTAqUq+McF4Se5Acedk9hMiVzYOxQVz36CmAAZORAw==", "requires": { "tslib": "^2.0.0" } }, "@alfresco/adf-core": { - "version": "3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db", - "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db.tgz", - "integrity": "sha512-wIBqI38v8y3hCGej0Cud/NivJfbmDuowsbAoftPPMjJ9YFGZAEdIeC2bLkrR6V97IOyhbASLnfPsrJcV66pmbQ==", + "version": "3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1", + "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1.tgz", + "integrity": "sha512-xFX4Rzw8+SoKDeagKHrzqvZxc3tOUpppLsbzLaQbR7vORiF5A+hWZNqveapNlLAYMhG7MOBtoXkIRVoSaXfZhQ==", "requires": { "tslib": "^2.0.0" } }, "@alfresco/adf-extensions": { - "version": "3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db", - "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db.tgz", - "integrity": "sha512-mVKD0Z1OpAWZYNMEdUBz25NEqZiMprGC3HlYu2uQh6PfPoRCBupQx5HfE/e0Y6Ff83J35FhmuYCiiNOHyv/QyQ==", + "version": "3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1", + "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1.tgz", + "integrity": "sha512-FDGmfPGb7WwaZLnf+GzzZbeVKJPe75iXb402ivo2yCppzWSUBXrHsizNecKcOgzLdiJKMEvscB6UQgfWqSF2mw==", "requires": { "tslib": "^2.0.0" } }, "@alfresco/adf-testing": { - "version": "3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db", - "resolved": "https://registry.npmjs.org/@alfresco/adf-testing/-/adf-testing-3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db.tgz", - "integrity": "sha512-ORz9XUaKXmaaSz0Vu/iLibqMpDzeGnxOuVKdoWIvrZzwYKwVLEikBNI37U9BcPzj5ll/A0JeI8rbEyIYe03t/Q==", + "version": "3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1", + "resolved": "https://registry.npmjs.org/@alfresco/adf-testing/-/adf-testing-3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1.tgz", + "integrity": "sha512-KHv345SkGe4ES+gVnI2jOTqifDvtIiB8sk/UbjDgrp4HGJqsgiTefqgBFjlL44Y1xDw3VRD8uia8POvmB3Pfmw==", "dev": true, "requires": { "tslib": "^2.0.0" @@ -10082,6 +10082,72 @@ "integrity": "sha512-PtilRLno5O6wH3lDihRnz0Ba8oSn0YUJqKjjux1peoYGwo0AQqrWRbdWk/RLzcGlb+onTyXAnHl6M+Hu3UxG/Q==", "dev": true }, + "karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", diff --git a/package.json b/package.json index 7104a3157..3a9e8359d 100644 --- a/package.json +++ b/package.json @@ -34,9 +34,9 @@ }, "private": true, "dependencies": { - "@alfresco/adf-content-services": "3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db", - "@alfresco/adf-core": "3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db", - "@alfresco/adf-extensions": "3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db", + "@alfresco/adf-content-services": "3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1", + "@alfresco/adf-core": "3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1", + "@alfresco/adf-extensions": "3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1", "@alfresco/js-api": "3.10.0-52aeb4052b028b0ad95a388fa8c30e5394f20df0", "@angular-custom-builders/lite-serve": "^0.2.2", "@angular/animations": "10.0.4", @@ -72,8 +72,8 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@alfresco/adf-cli": "3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db", - "@alfresco/adf-testing": "3.10.0-a0aaf0ea5844d89ba9038039e9bd9d3c919272db", + "@alfresco/adf-cli": "3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1", + "@alfresco/adf-testing": "3.10.0-5f5867370c6d2ffea74d00323504e004f076dff1", "@angular-devkit/build-angular": "~0.1000.4", "@angular-devkit/build-ng-packagr": "~0.1000.5", "@angular/cli": "^10.0.5", @@ -101,6 +101,7 @@ "karma-coverage-istanbul-reporter": "^3.0.3", "karma-jasmine": "^3.3.1", "karma-jasmine-html-reporter": "^1.5.4", + "karma-mocha-reporter": "^2.2.5", "lint-staged": "^10.2.11", "ng-packagr": "^10.0.3", "node-stream-zip": "^1.9.1", diff --git a/projects/aca-shared/karma.conf.js b/projects/aca-shared/karma.conf.js index 391854077..f0a6d45f5 100644 --- a/projects/aca-shared/karma.conf.js +++ b/projects/aca-shared/karma.conf.js @@ -10,6 +10,7 @@ module.exports = function(config) { require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage-istanbul-reporter'), + require('karma-mocha-reporter'), require('@angular-devkit/build-angular/plugins/karma') ], client: { @@ -20,7 +21,7 @@ module.exports = function(config) { reports: ['html', 'lcovonly'], fixWebpackSourcePaths: true }, - reporters: ['progress', 'kjhtml'], + reporters: ['mocha', 'kjhtml'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/projects/adf-office-services-ext/karma.conf.js b/projects/adf-office-services-ext/karma.conf.js index dd9b7e664..fd5587859 100644 --- a/projects/adf-office-services-ext/karma.conf.js +++ b/projects/adf-office-services-ext/karma.conf.js @@ -10,6 +10,7 @@ module.exports = function(config) { require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage-istanbul-reporter'), + require('karma-mocha-reporter'), require('@angular-devkit/build-angular/plugins/karma') ], client: { @@ -23,7 +24,7 @@ module.exports = function(config) { reports: ['html', 'lcovonly'], fixWebpackSourcePaths: true }, - reporters: ['progress', 'kjhtml'], + reporters: ['mocha', 'kjhtml'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/src/app/components/files/files.component.spec.ts b/src/app/components/files/files.component.spec.ts index e19adab38..e600fc416 100644 --- a/src/app/components/files/files.component.spec.ts +++ b/src/app/components/files/files.component.spec.ts @@ -231,18 +231,25 @@ describe('FilesComponent', () => { fixture.detectChanges(); }); + it('should navigates to node when is more that one sub node', () => { + router.url = '/personal-files/favourites'; + component.navigate(node.id); + + expect(router.navigate).toHaveBeenCalledWith(['personal-files', 'favourites', node.id]); + }); + it('should navigates to node when id provided', () => { router.url = '/personal-files'; component.navigate(node.id); - expect(router.navigate).toHaveBeenCalledWith(['/personal-files', node.id]); + expect(router.navigate).toHaveBeenCalledWith(['personal-files', node.id]); }); it('should navigates to home when id not provided', () => { router.url = '/personal-files'; component.navigate(); - expect(router.navigate).toHaveBeenCalledWith(['/personal-files']); + expect(router.navigate).toHaveBeenCalledWith(['personal-files']); }); it('should navigate home if node is root', () => { @@ -255,7 +262,7 @@ describe('FilesComponent', () => { router.url = '/personal-files'; component.navigate(node.id); - expect(router.navigate).toHaveBeenCalledWith(['/personal-files']); + expect(router.navigate).toHaveBeenCalledWith(['personal-files']); }); }); diff --git a/src/app/components/files/files.component.ts b/src/app/components/files/files.component.ts index f5d989fca..ea985ab27 100644 --- a/src/app/components/files/files.component.ts +++ b/src/app/components/files/files.component.ts @@ -123,15 +123,21 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy { } navigate(nodeId: string = null) { - const location = this.router.url.match(/.*?(?=\/|$)/g)[1]; + const uuidRegEx = /[0-9A-Za-z]{8}-[0-9A-Za-z]{4}-4[0-9A-Za-z]{3}-[89ABab][0-9A-Za-z]{3}-[0-9A-Za-z]{12}/gi; + let urlToNavigate; - const commands = [`/${location}`]; - - if (nodeId && !this.isRootNode(nodeId)) { - commands.push(nodeId); + if (this.router.url.match(uuidRegEx)) { + urlToNavigate = this.router.url.replace(uuidRegEx, nodeId).split('/'); + urlToNavigate.shift(); + } else { + urlToNavigate = this.router.url.split('/'); + if (nodeId && !this.isRootNode(nodeId)) { + urlToNavigate.push(nodeId); + } + urlToNavigate.shift(); } - this.router.navigate(commands); + this.router.navigate(urlToNavigate); } onUploadNewVersion(ev: CustomEvent) { diff --git a/src/app/components/shared-files/shared-files.component.spec.ts b/src/app/components/shared-files/shared-files.component.spec.ts index ad7e9eee4..de08c88f4 100644 --- a/src/app/components/shared-files/shared-files.component.spec.ts +++ b/src/app/components/shared-files/shared-files.component.spec.ts @@ -33,11 +33,12 @@ import { AppConfigPipe, UploadService } from '@alfresco/adf-core'; -import { DocumentListComponent } from '@alfresco/adf-content-services'; +import { CustomResourcesService, DocumentListComponent } from '@alfresco/adf-content-services'; import { SharedFilesComponent } from './shared-files.component'; import { AppTestingModule } from '../../testing/app-testing.module'; import { Router } from '@angular/router'; import { ContentManagementService } from '../../services/content-management.service'; +import { of } from 'rxjs'; describe('SharedFilesComponent', () => { let fixture: ComponentFixture; @@ -45,6 +46,7 @@ describe('SharedFilesComponent', () => { let alfrescoApi: AlfrescoApiService; let page; let uploadService: UploadService; + let customResourcesService: CustomResourcesService; let contentManagementService: ContentManagementService; const mockRouter = { url: 'shared-files' @@ -76,12 +78,14 @@ describe('SharedFilesComponent', () => { fixture = TestBed.createComponent(SharedFilesComponent); uploadService = TestBed.inject(UploadService); contentManagementService = TestBed.inject(ContentManagementService); + customResourcesService = TestBed.inject(CustomResourcesService); component = fixture.componentInstance; alfrescoApi = TestBed.inject(AlfrescoApiService); alfrescoApi.reset(); spyOn(alfrescoApi.sharedLinksApi, 'findSharedLinks').and.returnValue(Promise.resolve(page)); + spyOn(customResourcesService, 'loadSharedLinks').and.returnValue(of(page)); }); it('should call document list reload on linksUnshared event', fakeAsync(() => { diff --git a/src/app/testing/app-testing.module.ts b/src/app/testing/app-testing.module.ts index 80ad23e2c..80bb2b560 100644 --- a/src/app/testing/app-testing.module.ts +++ b/src/app/testing/app-testing.module.ts @@ -31,6 +31,8 @@ import { TranslationMock, AuthenticationService, UserPreferencesService, + DiscoveryApiService, + EcmProductVersionModel, AppConfigService, StorageService, AlfrescoApiService, @@ -53,6 +55,7 @@ import { MaterialModule } from '../material.module'; import { INITIAL_STATE } from '../store/initial-state'; import { TranslatePipeMock } from './translate-pipe.directive'; import { TranslateServiceMock } from './translation.service'; +import { Observable, of } from 'rxjs'; @NgModule({ imports: [ @@ -80,6 +83,14 @@ import { TranslateServiceMock } from './translation.service'; { provide: TranslationService, useClass: TranslationMock }, { provide: TranslateService, useClass: TranslateServiceMock }, { provide: TranslatePipe, useClass: TranslatePipeMock }, + { + provide: DiscoveryApiService, + useValue: { + getEcmProductInfo(): Observable { + return of(new EcmProductVersionModel({ version: '10.0.0' })); + } + } + }, { provide: AuthenticationService, useValue: {