[ADF-510] Drag&Drop check permission to allow user to upload a file (#1948)

* [ADF-510] added permission check for drag&drop

* Improved code for drag and drop side

* Added test for drag and drop upload area changes

* Added test for document list permissions check

* [ADF-510] rebased branch after changes applied to upload

* [ADF-510] rebased branch and fixed tests
This commit is contained in:
Vito
2017-06-16 09:03:50 -07:00
committed by Eugenio Romano
parent 25cefc6414
commit 45f14fa506
10 changed files with 363 additions and 89 deletions

View File

@@ -28,68 +28,20 @@ import { ShareDataRow, RowFilter, ImageResolver } from './../data/share-datatabl
import { DataTableModule } from 'ng2-alfresco-datatable';
import { DocumentMenuActionComponent } from './document-menu-action.component';
import { Observable } from 'rxjs/Rx';
import {
fakeNodeAnswerWithNOEntries,
fakeNodeAnswerWithEntries,
fakeNodeWithCreatePermission,
fakeNodeWithNoPermission
} from '../assets/document-list.component.mock';
import { MdProgressSpinnerModule } from '@angular/material';
declare let jasmine: any;
let fakeNodeAnswerWithEntries = {
'list': {
'pagination': {
'count': 4,
'hasMoreItems': false,
'totalItems': 14,
'skipCount': 10,
'maxItems': 10
},
'entries': [{
'entry': {
'isFile': true,
'createdByUser': {'id': 'admin', 'displayName': 'Administrator'},
'modifiedAt': '2017-05-24T15:08:55.640Z',
'nodeType': 'cm:content',
'content': {
'mimeType': 'application/rtf',
'mimeTypeName': 'Rich Text Format',
'sizeInBytes': 14530,
'encoding': 'UTF-8'
},
'parentId': 'd124de26-6ba0-4f40-8d98-4907da2d337a',
'createdAt': '2017-05-24T15:08:55.640Z',
'path': {
'name': '/Company Home/Guest Home',
'isComplete': true,
'elements': [{
'id': '94acfc73-7014-4475-9bd9-93a2162f0f8c',
'name': 'Company Home'
}, {'id': 'd124de26-6ba0-4f40-8d98-4907da2d337a', 'name': 'Guest Home'}]
},
'isFolder': false,
'modifiedByUser': {'id': 'admin', 'displayName': 'Administrator'},
'name': 'b_txt_file.rtf',
'id': '67b80f77-dbca-4f58-be6c-71b9dd61ea53',
'properties': {'cm:versionLabel': '1.0', 'cm:versionType': 'MAJOR'},
'allowableOperations': ['delete', 'update']
}
}]
}
};
let fakeNodeAnswerWithNOEntries = {
'list': {
'pagination': {
'count': 4,
'hasMoreItems': false,
'totalItems': 14,
'skipCount': 10,
'maxItems': 10
},
'entries': []
}
};
describe('DocumentList', () => {
let documentList: DocumentListComponent;
let documentListService: DocumentListService;
let fixture: ComponentFixture<DocumentListComponent>;
let element: HTMLElement;
let eventMock: any;
@@ -110,7 +62,7 @@ describe('DocumentList', () => {
],
providers: [
DocumentListService,
{provide: NgZone, useValue: zone}
{ provide: NgZone, useValue: zone }
]
}).compileComponents();
}));
@@ -137,6 +89,7 @@ describe('DocumentList', () => {
element = fixture.nativeElement;
documentList = fixture.componentInstance;
documentListService = TestBed.get(DocumentListService);
fixture.detectChanges();
});
@@ -263,7 +216,7 @@ describe('DocumentList', () => {
documentMenu
];
let nodeFile = {entry: {isFile: true, name: 'xyz', allowableOperations: ['create', 'update']}};
let nodeFile = { entry: { isFile: true, name: 'xyz', allowableOperations: ['create', 'update'] } };
let actions = documentList.getNodeActions(nodeFile);
expect(actions.length).toBe(1);
@@ -284,7 +237,7 @@ describe('DocumentList', () => {
documentMenu
];
let nodeFile = {entry: {isFolder: true, name: 'xyz', allowableOperations: ['create', 'update']}};
let nodeFile = { entry: { isFolder: true, name: 'xyz', allowableOperations: ['create', 'update'] } };
let actions = documentList.getNodeActions(nodeFile);
expect(actions.length).toBe(1);
@@ -305,7 +258,7 @@ describe('DocumentList', () => {
documentMenu
];
let nodeFile = {entry: {isFile: true, name: 'xyz', allowableOperations: ['create', 'update']}};
let nodeFile = { entry: { isFile: true, name: 'xyz', allowableOperations: ['create', 'update'] } };
let actions = documentList.getNodeActions(nodeFile);
expect(actions.length).toBe(1);
@@ -325,7 +278,7 @@ describe('DocumentList', () => {
documentMenu
];
let nodeFile = {entry: {isFolder: true, name: 'xyz', allowableOperations: ['create', 'update']}};
let nodeFile = { entry: { isFolder: true, name: 'xyz', allowableOperations: ['create', 'update'] } };
let actions = documentList.getNodeActions(nodeFile);
expect(actions.length).toBe(1);
@@ -345,7 +298,7 @@ describe('DocumentList', () => {
documentMenu
];
let nodeFile = {entry: {isFile: true, name: 'xyz', allowableOperations: ['create', 'update', 'delete']}};
let nodeFile = { entry: { isFile: true, name: 'xyz', allowableOperations: ['create', 'update', 'delete'] } };
let actions = documentList.getNodeActions(nodeFile);
expect(actions.length).toBe(1);
@@ -365,7 +318,7 @@ describe('DocumentList', () => {
documentMenu
];
let nodeFile = {entry: {isFolder: true, name: 'xyz', allowableOperations: ['create', 'update', 'delete']}};
let nodeFile = { entry: { isFolder: true, name: 'xyz', allowableOperations: ['create', 'update', 'delete'] } };
let actions = documentList.getNodeActions(nodeFile);
expect(actions.length).toBe(1);
@@ -384,7 +337,7 @@ describe('DocumentList', () => {
documentMenu
];
let nodeFile = {entry: {isFile: true, name: 'xyz', allowableOperations: null}};
let nodeFile = { entry: { isFile: true, name: 'xyz', allowableOperations: null } };
let actions = documentList.getNodeActions(nodeFile);
expect(actions.length).toBe(1);
@@ -403,7 +356,7 @@ describe('DocumentList', () => {
documentMenu
];
let nodeFile = {entry: {isFolder: true, name: 'xyz', allowableOperations: null}};
let nodeFile = { entry: { isFolder: true, name: 'xyz', allowableOperations: null } };
let actions = documentList.getNodeActions(nodeFile);
expect(actions.length).toBe(1);
@@ -707,7 +660,7 @@ describe('DocumentList', () => {
});
documentList.currentFolderId = 'wrong-id';
documentList.ngOnChanges({currentFolderId: new SimpleChange(null, documentList.currentFolderId, true)});
documentList.ngOnChanges({ currentFolderId: new SimpleChange(null, documentList.currentFolderId, true) });
});
it('should require dataTable to check empty template', () => {
@@ -799,7 +752,7 @@ describe('DocumentList', () => {
it('should load folder by ID on init', () => {
documentList.currentFolderId = '1d26e465-dea3-42f3-b415-faa8364b9692';
spyOn(documentList, 'loadFolderNodesByFolderNodeId').and.returnValue(Promise.resolve());
documentList.ngOnChanges({folderNode: new SimpleChange(null, documentList.currentFolderId, true)});
documentList.ngOnChanges({ folderNode: new SimpleChange(null, documentList.currentFolderId, true) });
expect(documentList.loadFolderNodesByFolderNodeId).toHaveBeenCalled();
});
@@ -834,4 +787,44 @@ describe('DocumentList', () => {
responseText: JSON.stringify(fakeNodeAnswerWithEntries)
});
});
it('should return true if current folder node has create permission', (done) => {
documentList.currentFolderId = '1d26e465-dea3-42f3-b415-faa8364b9692';
documentList.folderNode = new NodeMinimal();
documentList.folderNode.id = '1d26e465-dea3-42f3-b415-faa8364b9692';
documentList.skipCount = 5;
documentList.pageSize = 5;
spyOn(documentListService, 'getFolderNode').and.returnValue(Promise.resolve(fakeNodeWithCreatePermission));
spyOn(documentListService, 'getFolder').and.returnValue(Promise.resolve(fakeNodeAnswerWithNOEntries));
let change = new SimpleChange(null, '1d26e465-dea3-42f3-b415-faa8364b9692', true);
documentList.ngOnChanges({ 'currentFolderId': change });
fixture.detectChanges();
fixture.whenStable().then(() => {
fixture.detectChanges();
expect(documentList.hasCreatePermission()).toBeTruthy();
done();
});
});
it('should return false if navigate to a folder with no create permission', (done) => {
documentList.currentFolderId = '1d26e465-dea3-42f3-b415-faa8364b9692';
documentList.folderNode = new NodeMinimal();
documentList.folderNode.id = '1d26e465-dea3-42f3-b415-faa8364b9692';
documentList.skipCount = 5;
documentList.pageSize = 5;
spyOn(documentListService, 'getFolderNode').and.returnValue(Promise.resolve(fakeNodeWithNoPermission));
spyOn(documentListService, 'getFolder').and.returnValue(Promise.resolve(fakeNodeAnswerWithNOEntries));
documentList.loadFolder();
let clickedFolderNode = new FolderNode('fake-folder-node');
documentList.onNodeDblClick(clickedFolderNode);
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(documentList.hasCreatePermission()).toBeFalsy();
done();
});
});
});