From 65826c27f64c437a7c24a83473f70e2868778b82 Mon Sep 17 00:00:00 2001 From: Dharan <14145706+dhrn@users.noreply.github.com> Date: Mon, 6 Sep 2021 11:00:45 +0530 Subject: [PATCH] [ACA-3669] Incorrect Version Number Displayed (#2281) * [ACA-3669] Incorrect Version Number Displayed * * fixed lint * * test fixed --- .../src/lib/services/content-api.service.ts | 12 +++- .../node-versions/node-versions.dialog.html | 16 ++--- .../node-versions.dialog.spec.ts | 61 ++++++++++--------- .../node-versions/node-versions.dialog.ts | 24 ++++---- .../content-management.service.spec.ts | 30 ++++----- .../services/content-management.service.ts | 14 +++-- 6 files changed, 82 insertions(+), 75 deletions(-) diff --git a/projects/aca-shared/src/lib/services/content-api.service.ts b/projects/aca-shared/src/lib/services/content-api.service.ts index 174b85e22..8cc52c6d8 100644 --- a/projects/aca-shared/src/lib/services/content-api.service.ts +++ b/projects/aca-shared/src/lib/services/content-api.service.ts @@ -50,7 +50,8 @@ import { ContentApi, SitesApi, SearchApi, - PeopleApi + PeopleApi, + VersionsApi } from '@alfresco/js-api'; import { map } from 'rxjs/operators'; @@ -112,6 +113,11 @@ export class ContentApiService { return this._peopleApi; } + _versionsApi: VersionsApi; + get versionsApi(): VersionsApi { + this._versionsApi = this._versionsApi ?? new VersionsApi(this.api.getInstance()); + return this._versionsApi; + } constructor(private api: AlfrescoApiService, private preferences: UserPreferencesService) {} /** @@ -341,4 +347,8 @@ export class ContentApiService { unlockNode(nodeId: string, opts?: any) { return this.nodesApi.unlockNode(nodeId, opts); } + + getNodeVersions(nodeId: string, opts?: any) { + return from(this.versionsApi.listVersionHistory(nodeId, opts)); + } } diff --git a/src/app/dialogs/node-versions/node-versions.dialog.html b/src/app/dialogs/node-versions/node-versions.dialog.html index c3aba13b5..f6efa2798 100644 --- a/src/app/dialogs/node-versions/node-versions.dialog.html +++ b/src/app/dialogs/node-versions/node-versions.dialog.html @@ -1,23 +1,23 @@ -
{{ 'VERSION.DIALOG_ADF.TITLE' | translate }}
-
{{ 'VERSION.DIALOG.TITLE' | translate }}
-
- +
{{ data.title | translate }}
+
+
- +
{ let fixture: ComponentFixture; let component: NodeVersionsDialogComponent; let store: Store; + const node = { + id: '1234', + name: 'TEST-NODE', + isFile: true, + nodeType: 'FAKE', + isFolder: false, + modifiedAt: new Date(), + modifiedByUser: null, + createdAt: new Date(), + createdByUser: null, + content: { + mimeType: 'text/html', + mimeTypeName: 'HTML', + sizeInBytes: 13 + } + }; + const showVersionsOnly = true; + const file = { + name: 'Fake New file', + type: 'application/pdf', + lastModified: 13, + size: 1351, + slice: null + } as File; + beforeEach(() => { TestBed.configureTestingModule({ imports: [CoreModule.forRoot(), TranslateModule.forRoot(), MatDialogModule, RouterTestingModule.withRoutes([]), AppTestingModule], @@ -68,55 +93,31 @@ describe('NodeVersionsDialogComponent', () => { dispatch: jasmine.createSpy('dispatch') } }, - { provide: MAT_DIALOG_DATA, useValue: {} } + { provide: MAT_DIALOG_DATA, useValue: { node, showVersionsOnly, file } } ] }); store = TestBed.inject(Store); fixture = TestBed.createComponent(NodeVersionsDialogComponent); component = fixture.componentInstance; - component.node = { - id: '1234', - name: 'TEST-NODE', - isFile: true, - nodeType: 'FAKE', - isFolder: false, - modifiedAt: new Date(), - modifiedByUser: null, - createdAt: new Date(), - createdByUser: null, - content: { - mimeType: 'text/html', - mimeTypeName: 'HTML', - sizeInBytes: 13 - } - }; - component.isTypeList = true; - component.file = { - name: 'Fake New file', - type: 'application/pdf', - lastModified: 13, - size: 1351, - slice: null - } as File; }); it('should display adf upload version if isTypeList is passed as false from parent component', () => { - component.isTypeList = false; + component.data.showVersionsOnly = false; fixture.detectChanges(); const adfVersionComponent = document.querySelector('#adf-version-upload-button'); expect(adfVersionComponent).not.toEqual(null); }); it('should display adf version comparison if isTypeList is passed as false from parent component', () => { - component.isTypeList = false; + component.data.showVersionsOnly = false; fixture.detectChanges(); const adfVersionComparisonComponent = document.querySelector('#adf-version-comparison'); expect(adfVersionComparisonComponent).not.toEqual(null); }); it('should unlock node if is locked when uploading a file', () => { - component.isTypeList = false; + component.data.showVersionsOnly = false; const nodeEvent: NodeEntityEvent = new NodeEntityEvent({ entry: { id: 'a8b2caff-a58c-40f1-8c47-0b8e63ceaa0e', @@ -138,12 +139,12 @@ describe('NodeVersionsDialogComponent', () => { }); it('should view a previous version of a node', () => { - component.isTypeList = false; + component.data.showVersionsOnly = false; const versionId = '1.0'; const location: ViewNodeExtras = { location: '/' }; component.onViewingVersion(versionId); - expect(store.dispatch).toHaveBeenCalledWith(new ViewNodeVersionAction(component.node.id, versionId, location)); + expect(store.dispatch).toHaveBeenCalledWith(new ViewNodeVersionAction(component.data.node.id, versionId, location)); }); }); diff --git a/src/app/dialogs/node-versions/node-versions.dialog.ts b/src/app/dialogs/node-versions/node-versions.dialog.ts index 56ae54b69..5373aca6f 100644 --- a/src/app/dialogs/node-versions/node-versions.dialog.ts +++ b/src/app/dialogs/node-versions/node-versions.dialog.ts @@ -24,13 +24,21 @@ */ import { AppStore, SnackbarErrorAction, UnlockWriteAction, ViewNodeVersionAction } from '@alfresco/aca-shared/store'; -import { MinimalNodeEntryEntity, Node } from '@alfresco/js-api'; +import { MinimalNodeEntryEntity, Node, Version } from '@alfresco/js-api'; import { Component, EventEmitter, Inject, Output, ViewEncapsulation } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Store } from '@ngrx/store'; import { NodeEntityEvent } from '@alfresco/adf-content-services'; import { Router } from '@angular/router'; +export interface NodeVersionDialogData { + title: string; + node: MinimalNodeEntryEntity; + file?: File; + currentVersion?: Version; + showVersionsOnly?: boolean; +} + @Component({ templateUrl: './node-versions.dialog.html', styleUrls: ['./node-versions.dialog.scss'], @@ -38,24 +46,16 @@ import { Router } from '@angular/router'; host: { class: 'aca-node-versions-dialog' } }) export class NodeVersionsDialogComponent { - node: MinimalNodeEntryEntity; - file: File; - isTypeList = true; - /** Emitted when a version is restored or deleted. */ @Output() refreshEvent = new EventEmitter(); constructor( - @Inject(MAT_DIALOG_DATA) data: any, + @Inject(MAT_DIALOG_DATA) public data: NodeVersionDialogData, private store: Store, private dialogRef: MatDialogRef, private router: Router - ) { - this.node = data.node; - this.file = data.file; - this.isTypeList = data.isTypeList !== undefined ? data.isTypeList : true; - } + ) {} onUploadError(errorMessage: any) { this.store.dispatch(new SnackbarErrorAction(errorMessage)); @@ -78,7 +78,7 @@ export class NodeVersionsDialogComponent { onViewingVersion(versionId: string) { this.store.dispatch( - new ViewNodeVersionAction(this.node.id, versionId, { + new ViewNodeVersionAction(this.data.node.id, versionId, { location: this.router.url }) ); diff --git a/src/app/services/content-management.service.spec.ts b/src/app/services/content-management.service.spec.ts index 43362af73..784ef8ab2 100644 --- a/src/app/services/content-management.service.spec.ts +++ b/src/app/services/content-management.service.spec.ts @@ -53,7 +53,7 @@ import { NodeActionsService } from './node-actions.service'; import { TranslationService, AlfrescoApiService, FileModel } from '@alfresco/adf-core'; import { MatDialog, MatDialogRef } from '@angular/material/dialog'; import { MatSnackBar, MatSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar'; -import { NodeEntry, Node } from '@alfresco/js-api'; +import { NodeEntry, Node, VersionPaging } from '@alfresco/js-api'; import { NodeAspectService } from '@alfresco/adf-content-services'; describe('ContentManagementService', () => { @@ -1462,6 +1462,11 @@ describe('ContentManagementService', () => { }); describe('versionUpdateDialog', () => { + beforeEach(() => { + const fakeVersion = { list: { entries: [{ entry: { id: '1.0' } }] } } as VersionPaging; + spyOn(contentApi, 'getNodeVersions').and.returnValue(of(fakeVersion)); + }); + it('should open dialog with NodeVersionUploadDialogComponent instance', () => { spyOn(dialog, 'open'); const fakeNode = { @@ -1473,23 +1478,12 @@ describe('ContentManagementService', () => { contentManagementService.versionUpdateDialog(fakeNode, fakeFile); expect(dialog.open['calls'].argsFor(0)[0].name).toBe('NodeVersionsDialogComponent'); - }); - - it('should return dialog instance reference', () => { - const mockDialogInstance: any = { - afterClose: () => {} - }; - const fakeNode = { - name: 'lights.jpg', - id: 'f5e5cb54-200e-41a8-9c21-b5ee77da3992' - }; - const fakeFile = new FileModel({ name: 'file1.png', size: 10 } as File, null, 'file1'); - - spyOn(dialog, 'open').and.returnValue(mockDialogInstance); - - const dialogRef = contentManagementService.versionUpdateDialog(fakeNode, fakeFile); - - expect(dialogRef).toBe(mockDialogInstance); + expect(dialog.open['calls'].argsFor(0)[1].data).toEqual({ + node: fakeNode, + file: fakeFile, + currentVersion: { id: '1.0' }, + title: 'VERSION.DIALOG.TITLE' + }); }); }); diff --git a/src/app/services/content-management.service.ts b/src/app/services/content-management.service.ts index e73df9d8c..c6af60f40 100644 --- a/src/app/services/content-management.service.ts +++ b/src/app/services/content-management.service.ts @@ -66,7 +66,7 @@ import { MatSnackBar } from '@angular/material/snack-bar'; import { Store } from '@ngrx/store'; import { forkJoin, Observable, of, zip } from 'rxjs'; import { catchError, map, mergeMap, take, tap } from 'rxjs/operators'; -import { NodeVersionsDialogComponent } from '../dialogs/node-versions/node-versions.dialog'; +import { NodeVersionsDialogComponent, NodeVersionDialogData } from '../dialogs/node-versions/node-versions.dialog'; import { NodeActionsService } from './node-actions.service'; interface RestoredNode { @@ -139,7 +139,7 @@ export class ContentManagementService { // workaround Shared if (node.isFile || node.nodeId) { const dialogRef = this.dialogRef.open(NodeVersionsDialogComponent, { - data: { node }, + data: { node, showVersionsOnly: true, title: 'VERSION.DIALOG_ADF.TITLE' } as NodeVersionDialogData, panelClass: 'adf-version-manager-dialog-panel', width: '630px' }); @@ -176,10 +176,12 @@ export class ContentManagementService { } versionUpdateDialog(node, file) { - return this.dialogRef.open(NodeVersionsDialogComponent, { - data: { node, file, isTypeList: false }, - panelClass: 'adf-version-manager-dialog-panel-upload', - width: '600px' + this.contentApi.getNodeVersions(node.id).subscribe(({ list }) => { + this.dialogRef.open(NodeVersionsDialogComponent, { + data: { node, file, currentVersion: list.entries[0].entry, title: 'VERSION.DIALOG.TITLE' } as NodeVersionDialogData, + panelClass: 'adf-version-manager-dialog-panel-upload', + width: '600px' + }); }); }