mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-31 17:38:48 +00:00
[ADF-2995] Permissions - Consumer should be able to upload a new version for his file on a private site (#3326)
* check node permission instead of parent * tests
This commit is contained in:
committed by
Eugenio Romano
parent
35ee120d5c
commit
374c5a3fed
@@ -20,7 +20,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
|
|||||||
import { ContentService, UploadService, TranslationService, setupTestBed, CoreModule } from '@alfresco/adf-core';
|
import { ContentService, UploadService, TranslationService, setupTestBed, CoreModule } from '@alfresco/adf-core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs/Observable';
|
||||||
import { UploadButtonComponent } from './upload-button.component';
|
import { UploadButtonComponent } from './upload-button.component';
|
||||||
import { TranslationMock } from '@alfresco/adf-core';
|
import { TranslationMock, PermissionsEnum } from '@alfresco/adf-core';
|
||||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
|
|
||||||
describe('UploadButtonComponent', () => {
|
describe('UploadButtonComponent', () => {
|
||||||
@@ -100,6 +100,22 @@ describe('UploadButtonComponent', () => {
|
|||||||
expect(compiled.querySelector('#uploadFolder')).toBeDefined();
|
expect(compiled.querySelector('#uploadFolder')).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should disable uploadFolder button if disabled is true', () => {
|
||||||
|
component.disabled = true;
|
||||||
|
component.uploadFolders = true;
|
||||||
|
let compiled = fixture.debugElement.nativeElement;
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(compiled.querySelector('#uploadFolder').getAttribute('disabled')).toBe('true');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should disable upload-single-file button if disabled is true', () => {
|
||||||
|
component.disabled = true;
|
||||||
|
component.multipleFiles = false;
|
||||||
|
let compiled = fixture.debugElement.nativeElement;
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(compiled.querySelector('#upload-single-file').getAttribute('disabled')).toBe('true');
|
||||||
|
});
|
||||||
|
|
||||||
it('should call uploadFile with the default root folder', () => {
|
it('should call uploadFile with the default root folder', () => {
|
||||||
component.rootFolderId = '-root-';
|
component.rootFolderId = '-root-';
|
||||||
component.success = null;
|
component.success = null;
|
||||||
@@ -130,6 +146,18 @@ describe('UploadButtonComponent', () => {
|
|||||||
expect(uploadService.uploadFilesInTheQueue).toHaveBeenCalledWith(null);
|
expect(uploadService.uploadFilesInTheQueue).toHaveBeenCalledWith(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not call uploadFiles if rootFolderId is null', () => {
|
||||||
|
component.rootFolderId = null;
|
||||||
|
component.ngOnChanges({ rootFolderId: new SimpleChange(null, null, true) });
|
||||||
|
|
||||||
|
uploadService.uploadFilesInTheQueue = jasmine.createSpy('uploadFilesInTheQueue');
|
||||||
|
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
component.onFilesAdded(fakeEvent);
|
||||||
|
expect(uploadService.uploadFilesInTheQueue).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
it('should create a folder and emit an File uploaded event', (done) => {
|
it('should create a folder and emit an File uploaded event', (done) => {
|
||||||
component.rootFolderId = '-my-';
|
component.rootFolderId = '-my-';
|
||||||
|
|
||||||
@@ -312,4 +340,88 @@ describe('UploadButtonComponent', () => {
|
|||||||
expect(addToQueueSpy).not.toHaveBeenCalled();
|
expect(addToQueueSpy).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('uploadFiles permission', () => {
|
||||||
|
let fakeNodeWithNoPermission;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fakeNodeWithNoPermission = {
|
||||||
|
entry: {}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not call uploadFiles for node without permission', () => {
|
||||||
|
component.rootFolderId = 'nodeId';
|
||||||
|
|
||||||
|
spyOn(contentService, 'getNode').and.returnValue(Observable.of(fakeNodeWithNoPermission));
|
||||||
|
component.ngOnChanges({ rootFolderId: new SimpleChange(null, component.rootFolderId, true) });
|
||||||
|
|
||||||
|
uploadService.uploadFilesInTheQueue = jasmine.createSpy('uploadFilesInTheQueue');
|
||||||
|
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
component.onFilesAdded(fakeEvent);
|
||||||
|
expect(uploadService.uploadFilesInTheQueue).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not call uploadFiles when getNode fails', () => {
|
||||||
|
component.rootFolderId = 'nodeId';
|
||||||
|
|
||||||
|
spyOn(contentService, 'getNode').and.returnValue(Observable.throw('error'));
|
||||||
|
component.ngOnChanges({ rootFolderId: new SimpleChange(null, component.rootFolderId, true) });
|
||||||
|
|
||||||
|
uploadService.uploadFilesInTheQueue = jasmine.createSpy('uploadFilesInTheQueue');
|
||||||
|
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
component.onFilesAdded(fakeEvent);
|
||||||
|
expect(uploadService.uploadFilesInTheQueue).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit an error message when getNode fails', (done) => {
|
||||||
|
component.rootFolderId = 'nodeId';
|
||||||
|
|
||||||
|
spyOn(contentService, 'getNode').and.returnValue(Observable.throw('error'));
|
||||||
|
|
||||||
|
component.error.subscribe((value) => {
|
||||||
|
expect(value).toBe('error');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
component.ngOnChanges({ rootFolderId: new SimpleChange(null, component.rootFolderId, true) });
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
component.onFilesAdded(fakeEvent);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not call uploadFiles for node with other permissions', () => {
|
||||||
|
component.rootFolderId = 'nodeId';
|
||||||
|
|
||||||
|
fakeNodeWithNoPermission.entry.allowableOperations = ['other'];
|
||||||
|
|
||||||
|
spyOn(contentService, 'getNode').and.returnValue(Observable.of(fakeNodeWithNoPermission));
|
||||||
|
component.ngOnChanges({ rootFolderId: new SimpleChange(null, component.rootFolderId, true) });
|
||||||
|
|
||||||
|
uploadService.uploadFilesInTheQueue = jasmine.createSpy('uploadFilesInTheQueue');
|
||||||
|
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
component.onFilesAdded(fakeEvent);
|
||||||
|
expect(uploadService.uploadFilesInTheQueue).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call uploadFiles when node has CREATE', () => {
|
||||||
|
component.rootFolderId = 'nodeId';
|
||||||
|
|
||||||
|
spyOn(contentService, 'getNode').and.returnValue(Observable.of(fakeFolderNodeWithPermission));
|
||||||
|
component.ngOnChanges({ rootFolderId: new SimpleChange(null, component.rootFolderId, true) });
|
||||||
|
|
||||||
|
uploadService.uploadFilesInTheQueue = jasmine.createSpy('uploadFilesInTheQueue');
|
||||||
|
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
component.onFilesAdded(fakeEvent);
|
||||||
|
expect(uploadService.uploadFilesInTheQueue).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -23,6 +23,7 @@ import {
|
|||||||
Component, EventEmitter, forwardRef, Input,
|
Component, EventEmitter, forwardRef, Input,
|
||||||
OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation
|
OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
|
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||||
import { Subject } from 'rxjs/Subject';
|
import { Subject } from 'rxjs/Subject';
|
||||||
import { PermissionModel } from '../../document-list/models/permissions.model';
|
import { PermissionModel } from '../../document-list/models/permissions.model';
|
||||||
import 'rxjs/add/observable/throw';
|
import 'rxjs/add/observable/throw';
|
||||||
@@ -61,7 +62,7 @@ export class UploadButtonComponent extends UploadBase implements OnInit, OnChang
|
|||||||
|
|
||||||
private hasPermission: boolean = false;
|
private hasPermission: boolean = false;
|
||||||
|
|
||||||
private permissionValue: Subject<boolean> = new Subject<boolean>();
|
protected permissionValue: Subject<boolean> = new Subject<boolean>();
|
||||||
|
|
||||||
constructor(protected uploadService: UploadService,
|
constructor(protected uploadService: UploadService,
|
||||||
private contentService: ContentService,
|
private contentService: ContentService,
|
||||||
@@ -118,9 +119,13 @@ export class UploadButtonComponent extends UploadBase implements OnInit, OnChang
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.contentService.getNode(this.rootFolderId, opts).subscribe(
|
this.contentService.getNode(this.rootFolderId, opts).subscribe(
|
||||||
res => this.permissionValue.next(this.contentService.hasPermission(res.entry, PermissionsEnum.CREATE)),
|
res => this.permissionValue.next(this.nodeHasPermission(res.entry, PermissionsEnum.CREATE)),
|
||||||
error => this.error.emit(error)
|
error => this.error.emit(error)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nodeHasPermission(node: MinimalNodeEntryEntity, permission: PermissionsEnum | string): boolean {
|
||||||
|
return this.contentService.hasPermission(node, permission);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -15,7 +15,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Component, forwardRef, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core';
|
import { PermissionsEnum } from '@alfresco/adf-core';
|
||||||
|
import { Component, forwardRef, Input, OnChanges, SimpleChanges, ViewEncapsulation, OnInit } from '@angular/core';
|
||||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||||
import { UploadButtonComponent } from './upload-button.component';
|
import { UploadButtonComponent } from './upload-button.component';
|
||||||
import { FileModel, EXTENDIBLE_COMPONENT } from '@alfresco/adf-core';
|
import { FileModel, EXTENDIBLE_COMPONENT } from '@alfresco/adf-core';
|
||||||
@@ -29,7 +30,7 @@ import { FileModel, EXTENDIBLE_COMPONENT } from '@alfresco/adf-core';
|
|||||||
],
|
],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class UploadVersionButtonComponent extends UploadButtonComponent implements OnChanges {
|
export class UploadVersionButtonComponent extends UploadButtonComponent implements OnChanges, OnInit {
|
||||||
|
|
||||||
/** (**Required**) The node to be versioned. */
|
/** (**Required**) The node to be versioned. */
|
||||||
@Input()
|
@Input()
|
||||||
@@ -57,4 +58,13 @@ export class UploadVersionButtonComponent extends UploadButtonComponent implemen
|
|||||||
|
|
||||||
return fileModel;
|
return fileModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
super.ngOnInit();
|
||||||
|
this.checkPermission();
|
||||||
|
}
|
||||||
|
|
||||||
|
checkPermission() {
|
||||||
|
this.permissionValue.next(this.nodeHasPermission(this.node, PermissionsEnum.UPDATE));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user