Fix uploads from folders opened from search results

Refs #1248
This commit is contained in:
Will Abson
2016-12-16 17:52:57 +00:00
parent 2bed309023
commit fb851271e9
8 changed files with 101 additions and 21 deletions

View File

@@ -1,6 +1,7 @@
<div class="container">
<alfresco-upload-drag-area
[currentFolderPath]="currentPath"
[rootFolderId]="uploadRootFolderId"
[currentFolderPath]="uploadFolderPath"
[versioning] = "versioning"
(onSuccess)="documentList.reload()">
<alfresco-document-list-breadcrumb
@@ -182,7 +183,8 @@
</div>
<div *ngIf="!acceptedFilesTypeShow">
<alfresco-upload-button data-automation-id="multiple-file-upload"
[currentFolderPath]="currentPath"
[rootFolderId]="uploadRootFolderId"
[currentFolderPath]="uploadFolderPath"
[multipleFiles]="multipleFileUpload"
[uploadFolders]="folderUpload"
[versioning] = "versioning"
@@ -192,7 +194,8 @@
</div>
<div *ngIf="acceptedFilesTypeShow">
<alfresco-upload-button data-automation-id="multiple-file-upload"
[currentFolderPath]="currentPath"
[rootFolderId]="uploadRootFolderId"
[currentFolderPath]="uploadFolderPath"
acceptedFilesType="{{acceptedFilesType}}"
[multipleFiles]="multipleFileUpload"
[uploadFolders]="folderUpload"

View File

@@ -47,6 +47,14 @@ export class FilesComponent implements OnInit {
acceptedFilesType: string = '.jpg,.pdf,.js';
get uploadRootFolderId(): string {
return this.currentFolderId || this.rootFolderId;
}
get uploadFolderPath(): string {
return this.currentFolderId ? '/' : this.currentPath;
}
@ViewChild(DocumentList)
documentList: DocumentList;

View File

@@ -121,7 +121,7 @@ describe('Test ng2-alfresco-upload UploadButton', () => {
expect(compiled.querySelector('#uploadFolder')).toBeDefined();
});
it('should call uploadFile with the default folder', () => {
it('should call uploadFile with the default root folder', () => {
component.currentFolderPath = '/root-fake-/sites-fake/folder-fake';
component.onSuccess = null;
component._uploaderService.uploadFilesInTheQueue = jasmine.createSpy('uploadFilesInTheQueue');
@@ -129,7 +129,19 @@ describe('Test ng2-alfresco-upload UploadButton', () => {
fixture.detectChanges();
component.onFilesAdded(fakeEvent);
expect(component._uploaderService.uploadFilesInTheQueue).toHaveBeenCalledWith('/root-fake-/sites-fake/folder-fake', null);
expect(component._uploaderService.uploadFilesInTheQueue).toHaveBeenCalledWith('-root-', '/root-fake-/sites-fake/folder-fake', null);
});
it('should call uploadFile with a custom root folder', () => {
component.currentFolderPath = '/root-fake-/sites-fake/folder-fake';
component.rootFolderId = '-my-';
component.onSuccess = null;
component._uploaderService.uploadFilesInTheQueue = jasmine.createSpy('uploadFilesInTheQueue');
fixture.detectChanges();
component.onFilesAdded(fakeEvent);
expect(component._uploaderService.uploadFilesInTheQueue).toHaveBeenCalledWith('-my-', '/root-fake-/sites-fake/folder-fake', null);
});
it('should create a folder and emit an File uploaded event', (done) => {

View File

@@ -53,6 +53,8 @@ const ERROR_FOLDER_ALREADY_EXIST = 409;
})
export class UploadButtonComponent {
private static DEFAULT_ROOT_ID: string = '-root-';
@ViewChild('undoNotificationBar')
undoNotificationBar: any;
@@ -72,7 +74,10 @@ export class UploadButtonComponent {
acceptedFilesType: string = '*';
@Input()
currentFolderPath: string = '/Sites/swsdp/documentLibrary';
currentFolderPath: string = '/';
@Input()
rootFolderId: string = UploadButtonComponent.DEFAULT_ROOT_ID;
@Output()
onSuccess = new EventEmitter();
@@ -151,7 +156,7 @@ export class UploadButtonComponent {
private uploadFiles(path: string, files: any[]) {
if (files.length) {
let latestFilesAdded = this._uploaderService.addToQueue(files);
this._uploaderService.uploadFilesInTheQueue(path, this.onSuccess);
this._uploaderService.uploadFilesInTheQueue(this.rootFolderId, path, this.onSuccess);
if (this.showUdoNotificationBar) {
this._showUndoNotificationBar(latestFilesAdded);
}

View File

@@ -99,7 +99,7 @@ describe('Test ng2-alfresco-upload UploadDragArea', () => {
component.onFilesDropped(filesList);
expect(component._uploaderService.addToQueue).toHaveBeenCalledWith(filesList);
expect(component._uploaderService.uploadFilesInTheQueue).toHaveBeenCalledWith('/root-fake-/sites-fake/folder-fake', null);
expect(component._uploaderService.uploadFilesInTheQueue).toHaveBeenCalledWith('-root-', '/root-fake-/sites-fake/folder-fake', null);
});
it('should show the loading messages in the notification bar when the files are dropped', () => {
@@ -114,7 +114,7 @@ describe('Test ng2-alfresco-upload UploadDragArea', () => {
let filesList = [fileFake];
component.onFilesDropped(filesList);
expect(component._uploaderService.uploadFilesInTheQueue).toHaveBeenCalledWith('/root-fake-/sites-fake/folder-fake', null);
expect(component._uploaderService.uploadFilesInTheQueue).toHaveBeenCalledWith('-root-', '/root-fake-/sites-fake/folder-fake', null);
expect(component._showUndoNotificationBar).toHaveBeenCalled();
});
@@ -138,7 +138,31 @@ describe('Test ng2-alfresco-upload UploadDragArea', () => {
component.onFilesEntityDropped(itemEntity);
expect(component._uploaderService.uploadFilesInTheQueue)
.toHaveBeenCalledWith('/root-fake-/sites-fake/document-library-fake/folder-fake/', null);
.toHaveBeenCalledWith('-root-', '/root-fake-/sites-fake/document-library-fake/folder-fake/', null);
});
it('should upload a file with a custom root folder ID when dropped', () => {
component.currentFolderPath = '/root-fake-/sites-fake/document-library-fake';
component.rootFolderId = '-my-';
component.onSuccess = null;
fixture.detectChanges();
spyOn(component._uploaderService, 'uploadFilesInTheQueue');
let itemEntity = {
fullPath: '/folder-fake/file-fake.png',
isDirectory: false,
isFile: true,
name: 'file-fake.png',
file: (callbackFile) => {
let fileFake = new File(['fakefake'], 'file-fake.png', {type: 'image/png'});
callbackFile(fileFake);
}
};
component.onFilesEntityDropped(itemEntity);
expect(component._uploaderService.uploadFilesInTheQueue)
.toHaveBeenCalledWith('-my-', '/root-fake-/sites-fake/document-library-fake/folder-fake/', null);
});
it('should throws an exception and show it in the notification bar when the folder already exist', done => {

View File

@@ -41,6 +41,8 @@ const ERROR_FOLDER_ALREADY_EXIST = 409;
})
export class UploadDragAreaComponent {
private static DEFAULT_ROOT_ID: string = '-root-';
@ViewChild('undoNotificationBar')
undoNotificationBar: any;
@@ -51,7 +53,10 @@ export class UploadDragAreaComponent {
versioning: boolean = false;
@Input()
currentFolderPath: string = '/Sites/swsdp/documentLibrary';
currentFolderPath: string = '/';
@Input()
rootFolderId: string = UploadDragAreaComponent.DEFAULT_ROOT_ID;
@Output()
onSuccess = new EventEmitter();
@@ -77,7 +82,7 @@ export class UploadDragAreaComponent {
if (files.length) {
if (this.checkValidity(files)) {
this._uploaderService.addToQueue(files);
this._uploaderService.uploadFilesInTheQueue(this.currentFolderPath, this.onSuccess);
this._uploaderService.uploadFilesInTheQueue(this.rootFolderId, this.currentFolderPath, this.onSuccess);
let latestFilesAdded = this._uploaderService.getQueue();
if (this.showUdoNotificationBar) {
this._showUndoNotificationBar(latestFilesAdded);
@@ -115,7 +120,7 @@ export class UploadDragAreaComponent {
this._uploaderService.addToQueue([file]);
let path = item.fullPath.replace(item.name, '');
let filePath = this.currentFolderPath + path;
this._uploaderService.uploadFilesInTheQueue(filePath, this.onSuccess);
this._uploaderService.uploadFilesInTheQueue(this.rootFolderId, filePath, this.onSuccess);
});
}

View File

@@ -88,7 +88,7 @@ describe('Test ng2-alfresco-upload', () => {
service.setOptions(options, false);
let filesFake = [{name: 'fake-name', size: 10}];
service.addToQueue(filesFake);
service.uploadFilesInTheQueue('fake-dir', emitter);
service.uploadFilesInTheQueue('-root-', 'fake-dir', emitter);
let request = jasmine.Ajax.requests.mostRecent();
expect(request.url).toBe('http://127.0.0.1:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children?autoRename=true');
@@ -111,7 +111,7 @@ describe('Test ng2-alfresco-upload', () => {
service.setOptions(options, false);
let filesFake = [{name: 'fake-name', size: 10}];
service.addToQueue(filesFake);
service.uploadFilesInTheQueue('', emitter);
service.uploadFilesInTheQueue('-root-', '', emitter);
expect(jasmine.Ajax.requests.mostRecent().url)
.toBe('http://127.0.0.1:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/-root-/children?autoRename=true');
@@ -132,7 +132,7 @@ describe('Test ng2-alfresco-upload', () => {
service.setOptions(options, false);
let filesFake = [{name: 'fake-name', size: 10}];
service.addToQueue(filesFake);
service.uploadFilesInTheQueue('', emitter);
service.uploadFilesInTheQueue('-root-', '', emitter);
let file = service.getQueue();
file[0].emitAbort();
@@ -148,7 +148,7 @@ describe('Test ng2-alfresco-upload', () => {
service.setOptions(options, false);
let filesFake = [{name: 'fake-name', size: 10}];
service.addToQueue(filesFake);
service.uploadFilesInTheQueue('', emitter);
service.uploadFilesInTheQueue('-root-', '', emitter);
let file = service.getQueue();
file[0].emitError();
@@ -169,7 +169,7 @@ describe('Test ng2-alfresco-upload', () => {
expect(file[0].progress).toEqual(fakeProgress);
done();
});
service.uploadFilesInTheQueue('', null);
service.uploadFilesInTheQueue('-root-', '', null);
let file = service.getQueue();
@@ -231,11 +231,34 @@ describe('Test ng2-alfresco-upload', () => {
service.setOptions(options, enableVersioning);
let filesFake = [{name: 'fake-name', size: 10}];
service.addToQueue(filesFake);
service.uploadFilesInTheQueue('', emitter);
service.uploadFilesInTheQueue('-root-', '', emitter);
console.log(jasmine.Ajax.requests.mostRecent().url);
expect(jasmine.Ajax.requests.mostRecent().url.endsWith('autoRename=true')).toBe(false);
expect(jasmine.Ajax.requests.mostRecent().params.has('majorVersion')).toBe(true);
});
it('should use custom root folder ID given to the service', (done) => {
let emitter = new EventEmitter();
emitter.subscribe(e => {
expect(e.value).toBe('File uploaded');
done();
});
service.setOptions(options, false);
let filesFake = [{name: 'fake-name', size: 10}];
service.addToQueue(filesFake);
service.uploadFilesInTheQueue('123', 'fake-dir', emitter);
let request = jasmine.Ajax.requests.mostRecent();
expect(request.url).toBe('http://127.0.0.1:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/123/children?autoRename=true');
expect(request.method).toBe('POST');
jasmine.Ajax.requests.mostRecent().respondWith({
'status': 200,
contentType: 'text/plain',
responseText: 'File uploaded'
});
});
});
});

View File

@@ -87,7 +87,7 @@ export class UploadService {
/**
* Pick all the files in the queue that are not been uploaded yet and upload it into the directory folder.
*/
public uploadFilesInTheQueue(directory: string, elementEmit: EventEmitter<any>): void {
public uploadFilesInTheQueue(rootId: string, directory: string, elementEmit: EventEmitter<any>): void {
let filesToUpload = this.queue.filter((uploadingFileModel) => {
return !uploadingFileModel.uploading && !uploadingFileModel.done && !uploadingFileModel.abort && !uploadingFileModel.error;
});
@@ -105,7 +105,7 @@ export class UploadService {
filesToUpload.forEach((uploadingFileModel: FileModel) => {
uploadingFileModel.setUploading();
let promiseUpload = this.apiService.getInstance().upload.uploadFile(uploadingFileModel.file, directory, null, null, opts)
let promiseUpload = this.apiService.getInstance().upload.uploadFile(uploadingFileModel.file, directory, rootId, null, opts)
.on('progress', (progress: any) => {
uploadingFileModel.setProgres(progress);
this.updateFileListStream(this.queue);