From 3478b06716a4e93974cd57e5ec1d3b03b5936c10 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Thu, 2 Nov 2017 16:25:39 +0200 Subject: [PATCH] [ADF-1856] Document List - location fails for granular permissions (#2583) * check if path has data * updated docs * check for required properties * simplied condition --- docs/document-list.component.md | 4 + .../datatable/location-cell.component.spec.ts | 134 ++++++++++++++++++ .../datatable/location-cell.component.ts | 3 +- 3 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 ng2-components/ng2-alfresco-datatable/src/components/datatable/location-cell.component.spec.ts diff --git a/docs/document-list.component.md b/docs/document-list.component.md index 6061ba74ac..37bd3d0b82 100644 --- a/docs/document-list.component.md +++ b/docs/document-list.component.md @@ -508,6 +508,10 @@ That triggers the date values to be rendered using popular ["Time from now"](htt This column is used to display a clickable location link pointing to the parent path of the node. +**Important note**: + +_For granular permissions, the Location Column may or may not render link location_ + You are going to use it with custom navigation or when displaying content from the sources like: - Sites diff --git a/ng2-components/ng2-alfresco-datatable/src/components/datatable/location-cell.component.spec.ts b/ng2-components/ng2-alfresco-datatable/src/components/datatable/location-cell.component.spec.ts new file mode 100644 index 0000000000..7ac54e665e --- /dev/null +++ b/ng2-components/ng2-alfresco-datatable/src/components/datatable/location-cell.component.spec.ts @@ -0,0 +1,134 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { CoreModule } from 'ng2-alfresco-core'; +import { + ObjectDataColumn, + ObjectDataTableAdapter +} from './../../data/index'; +import { LocationCellComponent } from './location-cell.component'; + +describe('LocationCellComponent', () => { + let component: LocationCellComponent; + let fixture: ComponentFixture; + let dataTableAdapter: ObjectDataTableAdapter; + let rowData; + let columnData; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + CoreModule, + RouterTestingModule + ], + declarations: [ + LocationCellComponent + ] + }).compileComponents(); + + fixture = TestBed.createComponent(LocationCellComponent); + component = fixture.componentInstance; + })); + + beforeEach(() => { + rowData = { + name: '1', + path: { + elements: [ + { id: '1', name: 'path' }, + { id: '2', name: 'to' }, + { id: '3', name: 'location' } + ], + name: '/path/to/location' + } + }; + + columnData = { format: '/somewhere', type: 'location', key: 'path'}; + + dataTableAdapter = new ObjectDataTableAdapter( + [rowData], + [ new ObjectDataColumn(columnData) ] + ); + + component.link = []; + component.column = dataTableAdapter.getColumns()[0]; + component.data = dataTableAdapter; + component.row = dataTableAdapter.getRows()[0]; + }); + + it('should set displayText', () => { + fixture.detectChanges(); + + expect(component.displayText).toBe('location'); + }); + + it('should set tooltip', () => { + fixture.detectChanges(); + + expect(component.tooltip).toEqual(rowData.path.name); + }); + + it('should set router link', () => { + fixture.detectChanges(); + + expect(component.link).toEqual([ columnData.format , rowData.path.elements[2].id ]); + }); + + it('should not setup cell when path has no data', () => { + rowData.path = {}; + + fixture.detectChanges(); + + expect(component.displayText).toBe(''); + expect(component.tooltip).toBeUndefined(); + expect(component.link).toEqual([]); + }); + + it('should not setup cell when path is missing required properties', () => { + rowData.path = { someProp: '' }; + + fixture.detectChanges(); + + expect(component.displayText).toBe(''); + expect(component.tooltip).toBeUndefined(); + expect(component.link).toEqual([]); + }); + + it('should not setup cell when path data is missing one of the property', () => { + rowData.path = { + name: 'some-name' + }; + + fixture.detectChanges(); + + expect(component.displayText).toBe(''); + expect(component.tooltip).toBeUndefined(); + expect(component.link).toEqual([]); + + rowData.path = { + elements: [] + }; + + fixture.detectChanges(); + + expect(component.displayText).toBe(''); + expect(component.tooltip).toBeUndefined(); + expect(component.link).toEqual([]); + }); +}); diff --git a/ng2-components/ng2-alfresco-datatable/src/components/datatable/location-cell.component.ts b/ng2-components/ng2-alfresco-datatable/src/components/datatable/location-cell.component.ts index 744854475e..e760f0d336 100644 --- a/ng2-components/ng2-alfresco-datatable/src/components/datatable/location-cell.component.ts +++ b/ng2-components/ng2-alfresco-datatable/src/components/datatable/location-cell.component.ts @@ -44,7 +44,8 @@ export class LocationCellComponent extends DataTableCellComponent implements OnI ngOnInit() { if (!this.value && this.column && this.column.key && this.row && this.data) { const path: PathInfoEntity = this.data.getValue(this.row, this.column); - if (path) { + + if (path && path.name && path.elements) { this.value = path; this.displayText = path.name.split('/').pop();