From 36ce9bce0d2824a132710baa4dd48fc37093994a Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Tue, 16 Apr 2019 12:59:37 +0300 Subject: [PATCH] [ADF-4400] Versioning - restore does not update the document list (#4605) * emit NodeInfo data on restore * update row data and cache on node update event * tests * fix metadatat e2e --- .../card-view/metadata-smoke-tests.e2e.ts | 2 +- .../version-list.component.spec.ts | 50 ++++++++++-- .../version-manager/version-list.component.ts | 8 +- .../datatable-cell.component.spec.ts | 76 +++++++++++++++++++ .../datatable/datatable-cell.component.ts | 7 +- 5 files changed, 130 insertions(+), 13 deletions(-) diff --git a/e2e/core/card-view/metadata-smoke-tests.e2e.ts b/e2e/core/card-view/metadata-smoke-tests.e2e.ts index 6282516d47..c98c2972ad 100644 --- a/e2e/core/card-view/metadata-smoke-tests.e2e.ts +++ b/e2e/core/card-view/metadata-smoke-tests.e2e.ts @@ -208,7 +208,7 @@ describe('Metadata component', () => { await viewerPage.clickCloseButton(); contentServicesPage.waitForTableBody(); - viewerPage.viewFile(resources.Files.ADF_DOCUMENTS.PNG.file_name); + viewerPage.viewFile('exampleText.png'); viewerPage.clickInfoButton(); viewerPage.checkInfoSideBarIsDisplayed(); metadataViewPage.clickOnPropertiesTab(); diff --git a/lib/content-services/version-manager/version-list.component.spec.ts b/lib/content-services/version-manager/version-list.component.spec.ts index 08350edfa4..2066ec17e2 100644 --- a/lib/content-services/version-manager/version-list.component.spec.ts +++ b/lib/content-services/version-manager/version-list.component.spec.ts @@ -16,7 +16,7 @@ */ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { VersionListComponent } from './version-list.component'; import { AlfrescoApiService, setupTestBed, CoreModule, AlfrescoApiServiceMock } from '@alfresco/adf-core'; @@ -71,6 +71,7 @@ describe('VersionListComponent', () => { component.node = { id: nodeId, allowableOperations: ['update'] }; spyOn(component, 'downloadContent').and.stub(); + spyOn(alfrescoApiService.nodesApi, 'getNodeInfo').and.returnValue(Promise.resolve( { id: 'nodeInfoId' })); }); it('should raise confirmation dialog on delete', () => { @@ -285,7 +286,43 @@ describe('VersionListComponent', () => { expect(spyOnRevertVersion).toHaveBeenCalledWith(nodeId, versionId, { majorVersion: true, comment: '' }); }); - it('should reload the version list after a version restore', (done) => { + it('should get node info after restoring the node', fakeAsync(() => { + fixture.detectChanges(); + component.versions = versionTest; + spyOn(alfrescoApiService.versionsApi, 'listVersionHistory') + .and.callFake(() => Promise.resolve({ list: { entries: versionTest } })); + + spyOn(alfrescoApiService.versionsApi, 'revertVersion') + .and.callFake(() => Promise.resolve(new VersionEntry( + { entry: { name: 'test-file-name', id: '1.0', versionComment: 'test-version-comment' } }))); + + component.restore(versionId); + fixture.detectChanges(); + tick(); + + expect(alfrescoApiService.nodesApi.getNodeInfo).toHaveBeenCalled(); + })); + + it('should emit with node info data', fakeAsync(() => { + fixture.detectChanges(); + component.versions = versionTest; + spyOn(alfrescoApiService.versionsApi, 'listVersionHistory') + .and.callFake(() => Promise.resolve({ list: { entries: versionTest } })); + + spyOn(alfrescoApiService.versionsApi, 'revertVersion') + .and.callFake(() => Promise.resolve(new VersionEntry( + { entry: { name: 'test-file-name', id: '1.0', versionComment: 'test-version-comment' } }))); + + spyOn(component.restored, 'emit'); + + component.restore(versionId); + fixture.detectChanges(); + tick(); + + expect(component.restored.emit).toHaveBeenCalledWith( { id: 'nodeInfoId' }); + })); + + it('should reload the version list after a version restore', fakeAsync(() => { fixture.detectChanges(); component.versions = versionTest; @@ -294,12 +331,11 @@ describe('VersionListComponent', () => { spyOn(alfrescoApiService.versionsApi, 'revertVersion').and.callFake(() => Promise.resolve()); component.restore(versionId); + fixture.detectChanges(); + tick(); - fixture.whenStable().then(() => { - expect(spyOnListVersionHistory).toHaveBeenCalledTimes(1); - done(); - }); - }); + expect(spyOnListVersionHistory).toHaveBeenCalledTimes(1); + })); }); describe('Actions buttons', () => { diff --git a/lib/content-services/version-manager/version-list.component.ts b/lib/content-services/version-manager/version-list.component.ts index 569a5fc40a..dfb1a902da 100644 --- a/lib/content-services/version-manager/version-list.component.ts +++ b/lib/content-services/version-manager/version-list.component.ts @@ -82,7 +82,13 @@ export class VersionListComponent implements OnChanges { if (this.canUpdate()) { this.versionsApi .revertVersion(this.node.id, versionId, { majorVersion: true, comment: '' }) - .then(() => this.onVersionRestored(this.node)); + .then(() => + this.alfrescoApi.nodesApi.getNodeInfo( + this.node.id, + { include: ['permissions', 'path', 'isFavorite', 'allowableOperations'] } + ) + ) + .then((node) => this.onVersionRestored(node)); } } diff --git a/lib/core/datatable/components/datatable/datatable-cell.component.spec.ts b/lib/core/datatable/components/datatable/datatable-cell.component.spec.ts index 603f76c2ae..31a00170a6 100644 --- a/lib/core/datatable/components/datatable/datatable-cell.component.spec.ts +++ b/lib/core/datatable/components/datatable/datatable-cell.component.spec.ts @@ -17,8 +17,16 @@ import { DateCellComponent } from './date-cell.component'; import { Subject } from 'rxjs'; +import { AlfrescoApiServiceMock, AppConfigService } from '@alfresco/adf-core'; +import { Node } from '@alfresco/js-api'; describe('DataTableCellComponent', () => { + let alfrescoApiService: AlfrescoApiServiceMock; + + beforeEach(() => { + alfrescoApiService = new AlfrescoApiServiceMock(new AppConfigService(null)); + }); + it('should use medium format by default', () => { const component = new DateCellComponent(null, null); expect(component.format).toBe('medium'); @@ -37,4 +45,72 @@ describe('DataTableCellComponent', () => { component.ngOnInit(); expect(component.format).toBe('longTime'); }); + + it('should update cell data on alfrescoApiService.nodeUpdated event', () => { + const component = new DateCellComponent( + null, + alfrescoApiService + ); + + component.column = { + key: 'name', + type: 'text' + }; + + component.row = { + cache: { + name: 'some-name' + }, + node: { + entry: { + id: 'id', + name: 'test-name' + } + } + }; + + component.ngOnInit(); + + alfrescoApiService.nodeUpdated.next( { + id: 'id', + name: 'updated-name' + }); + + expect(component.row['node'].entry.name).toBe('updated-name'); + expect(component.row['cache'].name).toBe('updated-name'); + }); + + it('not should update cell data if ids don`t match', () => { + const component = new DateCellComponent( + null, + alfrescoApiService + ); + + component.column = { + key: 'name', + type: 'text' + }; + + component.row = { + cache: { + name: 'some-name' + }, + node: { + entry: { + id: 'some-id', + name: 'test-name' + } + } + }; + + component.ngOnInit(); + + alfrescoApiService.nodeUpdated.next( { + id: 'id', + name: 'updated-name' + }); + + expect(component.row['node'].entry.name).not.toBe('updated-name'); + expect(component.row['cache'].name).not.toBe('updated-name'); + }); }); diff --git a/lib/core/datatable/components/datatable/datatable-cell.component.ts b/lib/core/datatable/components/datatable/datatable-cell.component.ts index 256f3bf2b2..fd39b6f8a4 100644 --- a/lib/core/datatable/components/datatable/datatable-cell.component.ts +++ b/lib/core/datatable/components/datatable/datatable-cell.component.ts @@ -85,10 +85,9 @@ export class DataTableCellComponent implements OnInit, OnDestroy { this.updateValue(); this.sub = this.alfrescoApiService.nodeUpdated.subscribe((node: Node) => { if (this.row) { - const { entry } = this.row['node']; - - if (entry === node) { - this.row['node'] = { entry }; + if (this.row['node'].entry.id === node.id) { + this.row['node'].entry = node; + this.row['cache'][this.column.key] = this.column.key.split('.').reduce((source, key) => source[key], node); this.updateValue(); } }