diff --git a/ng2-components/ng2-alfresco-upload/src/assets/translation.service.mock.ts b/ng2-components/ng2-alfresco-upload/src/assets/translation.service.mock.ts index 4e313a8b01..fe3b045ec8 100644 --- a/ng2-components/ng2-alfresco-upload/src/assets/translation.service.mock.ts +++ b/ng2-components/ng2-alfresco-upload/src/assets/translation.service.mock.ts @@ -35,6 +35,10 @@ export class TranslationMock { console.log('mock'); } + addComponent() { + + } + public get(key: string|Array, interpolateParams?: Object): Observable { if (!key) { throw new Error('Parameter "key" required'); diff --git a/ng2-components/ng2-alfresco-upload/src/assets/upload.service.mock.ts b/ng2-components/ng2-alfresco-upload/src/assets/upload.service.mock.ts new file mode 100644 index 0000000000..700b3ed82b --- /dev/null +++ b/ng2-components/ng2-alfresco-upload/src/assets/upload.service.mock.ts @@ -0,0 +1,28 @@ +/*! + * @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. + */ + +export class UploadServiceMock { + private _baseUrlPath: string = 'fakebaseurlpath'; + private _url: string = 'fakeurl'; + private _formFields: Object = {}; + + public setOptions(options: any): void { + this._url = options._url || this._url; + this._baseUrlPath = options.baseUrlPath || this._baseUrlPath; + this._formFields = options.formFields != null ? options.formFields : this._formFields; + } +} diff --git a/ng2-components/ng2-alfresco-upload/src/components/file-uploading-dialog.component.spec.ts b/ng2-components/ng2-alfresco-upload/src/components/file-uploading-dialog.component.spec.ts index 5f2aad6cbc..2d5226002e 100644 --- a/ng2-components/ng2-alfresco-upload/src/components/file-uploading-dialog.component.spec.ts +++ b/ng2-components/ng2-alfresco-upload/src/components/file-uploading-dialog.component.spec.ts @@ -15,21 +15,38 @@ * limitations under the License. */ - -import { it, describe, expect, injectAsync, TestComponentBuilder } from 'angular2/testing'; +import { TEST_BROWSER_PLATFORM_PROVIDERS, TEST_BROWSER_APPLICATION_PROVIDERS } from 'angular2/platform/testing/browser'; +import { it, describe, expect, injectAsync, beforeEachProviders, TestComponentBuilder, setBaseTestProviders } from 'angular2/testing'; +import { provide } from 'angular2/core'; import { FileUploadingDialogComponent } from './file-uploading-dialog.component'; +import { FileModel } from '../models/file.model'; +import { AlfrescoTranslationService } from 'ng2-alfresco-core/dist/ng2-alfresco-core'; +import { TranslationMock } from '../assets/translation.service.mock'; describe('FileUploadDialog', () => { + setBaseTestProviders(TEST_BROWSER_PLATFORM_PROVIDERS, TEST_BROWSER_APPLICATION_PROVIDERS); + + beforeEachProviders(() => { + return [ + provide(AlfrescoTranslationService, {useClass: TranslationMock}) + ]; + }); + it('should render dialog box with css class show', injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => { return tcb .createAsync(FileUploadingDialogComponent) .then((fixture) => { + let fileFake = { + id: 'fake-id', + name: 'fake-name' + }; + let file = new FileModel(fileFake); let component = fixture.componentInstance; - fixture.detectChanges(); + component.filesUploadingList = [file]; let compiled = fixture.debugElement.nativeElement; - component._showDialog(); + component.showDialog(); fixture.detectChanges(); expect(compiled.querySelector('.file-dialog').getAttribute('class')).toEqual('file-dialog show'); diff --git a/ng2-components/ng2-alfresco-upload/src/components/upload-button.component.spec.ts b/ng2-components/ng2-alfresco-upload/src/components/upload-button.component.spec.ts index 521d8f7d61..1d4e0741b9 100644 --- a/ng2-components/ng2-alfresco-upload/src/components/upload-button.component.spec.ts +++ b/ng2-components/ng2-alfresco-upload/src/components/upload-button.component.spec.ts @@ -15,21 +15,21 @@ * limitations under the License. */ - -import { TEST_BROWSER_PLATFORM_PROVIDERS, TEST_BROWSER_APPLICATION_PROVIDERS } from 'angular2/platform/testing/browser'; -import { it, describe, expect, injectAsync, beforeEachProviders, TestComponentBuilder, setBaseTestProviders } from 'angular2/testing'; +import { it, describe, expect, injectAsync, beforeEachProviders, TestComponentBuilder } from 'angular2/testing'; import { provide } from 'angular2/core'; import { UploadButtonComponent } from './upload-button.component'; import { AlfrescoTranslationService } from 'ng2-alfresco-core/dist/ng2-alfresco-core'; import { TranslationMock } from '../assets/translation.service.mock'; +import { UploadServiceMock } from '../assets/upload.service.mock'; +import { UploadService } from '../services/upload.service'; + describe('AlfrescoUploadButton', () => { - setBaseTestProviders(TEST_BROWSER_PLATFORM_PROVIDERS, TEST_BROWSER_APPLICATION_PROVIDERS); - beforeEachProviders(() => { return [ - provide(AlfrescoTranslationService, {useClass: TranslationMock}) + provide(AlfrescoTranslationService, {useClass: TranslationMock}), + provide(UploadService, {useClass: UploadServiceMock}) ]; }); @@ -38,6 +38,8 @@ describe('AlfrescoUploadButton', () => { return tcb .createAsync(UploadButtonComponent) .then((fixture) => { + let component = fixture.componentInstance; + component.multipleFiles = false; let compiled = fixture.debugElement.nativeElement; fixture.detectChanges(); expect(compiled.querySelector('#upload-single-file')).toBeDefined(); diff --git a/ng2-components/ng2-alfresco-upload/src/components/upload-drag-area.component.ts b/ng2-components/ng2-alfresco-upload/src/components/upload-drag-area.component.ts index b2038c5b15..947d08f235 100644 --- a/ng2-components/ng2-alfresco-upload/src/components/upload-drag-area.component.ts +++ b/ng2-components/ng2-alfresco-upload/src/components/upload-drag-area.component.ts @@ -68,7 +68,6 @@ export class UploadDragAreaComponent { let container = this.getContainerId(); this._uploaderService.setOptions({ - fieldName: 'filedata', formFields: { siteid: site, containerid: container diff --git a/ng2-components/ng2-alfresco-upload/src/services/upload.service.spec.ts b/ng2-components/ng2-alfresco-upload/src/services/upload.service.spec.ts index e2d8c773e7..c4bd7315b7 100644 --- a/ng2-components/ng2-alfresco-upload/src/services/upload.service.spec.ts +++ b/ng2-components/ng2-alfresco-upload/src/services/upload.service.spec.ts @@ -44,20 +44,18 @@ describe('AlfrescoUploadService', () => { let service: MockUploadService, options: any; + options = { + host: 'fakehost', + url: '/some/cool/url', + baseUrlPath: 'fakebasepath', + formFields: { + siteid: 'fakeSite', + containerid: 'fakeFolder' + } + }; + beforeEach(() => { jasmine.Ajax.install(); - - options = { - url: '/some/cool/url', - withCredentials: true, - authToken: btoa('fakeadmin:fakeadmin'), - authTokenPrefix: 'Basic', - fieldName: 'fakeFileData', - formFields: { - siteid: 'fakeSite', - containerid: 'fakeFolder' - } - }; service = new MockUploadService(options); }); @@ -65,44 +63,56 @@ describe('AlfrescoUploadService', () => { jasmine.Ajax.uninstall(); }); + it('should show the default option if no method setOption is called', () => { + let empty = {}; + service.setOptions(empty); + expect(service.getUrl()).toEqual('/alfresco/service/api/upload'); + expect(service.getBaseUrl()).toEqual('/alfresco/api/-default-/public/alfresco/versions/1'); + let formFields: Object = {}; + expect(service.getFormFileds()).toEqual(formFields); + }); + + it('should set the basic option an empty queue if no elements are added', () => { + service.setOptions(options); + expect(service.getUrl()).toEqual('/some/cool/url'); + expect(service.getBaseUrl()).toEqual('fakebasepath'); + expect(service.getFormFileds()).toEqual({ + siteid: 'fakeSite', + containerid: 'fakeFolder' + }); + }); + it('should return an empty queue if no elements are added', () => { + service.setOptions(options); expect(service.getQueue().length).toEqual(0); }); it('should add an element in the queue and returns it', () => { + service.setOptions(options); let filesFake = [{name: 'fake-name', size: 10}]; service.addToQueue(filesFake); expect(service.getQueue().length).toEqual(1); }); it('should add two elements in the queue and returns them', () => { + service.setOptions(options); let filesFake = [{name: 'fake-name', size: 10}, {name: 'fake-name2', size: 20}]; service.addToQueue(filesFake); expect(service.getQueue().length).toEqual(2); }); it('should make XHR done request after the file is added in the queue', () => { - let mockUploadSuccessResponses = { - upload: { - success: { - status: 200, - responseText: '{"nodeRef":"workspace://SpacesStore/fake","fileName": "fake-name.png","status":' + - '{"code": 200,"name": "OK","description": "fake file uploaded successfully"}}' - } - } - }; + service.setOptions(options); let filesFake = [{name: 'fake-name', size: 10}]; service.addToQueue(filesFake); service.uploadFilesInTheQueue('', null); let request = jasmine.Ajax.requests.mostRecent(); - // request.respondWith(mockUploadSuccessResponses.upload.success); - expect(request.url).toBe('/some/cool/url'); + expect(request.url).toBe('fakehost/some/cool/url'); expect(request.method).toBe('POST'); // expect(request.data()).toEqual({fileName: 'fake-name.png'}); expect(doneFn).not.toHaveBeenCalled(); - console.log(mockUploadSuccessResponses); jasmine.Ajax.requests.mostRecent().respondWith({ 'status': 200, contentType: 'text/plain', @@ -112,10 +122,11 @@ describe('AlfrescoUploadService', () => { }); it('should make XHR error request after an error occur', () => { + service.setOptions(options); let filesFake = [{name: 'fake-name', size: 10}]; service.addToQueue(filesFake); service.uploadFilesInTheQueue('', null); - expect(jasmine.Ajax.requests.mostRecent().url).toBe('/some/cool/url'); + expect(jasmine.Ajax.requests.mostRecent().url).toBe('fakehost/some/cool/url'); jasmine.Ajax.requests.mostRecent().respondWith({ 'status': 404, contentType: 'text/plain', @@ -125,6 +136,7 @@ describe('AlfrescoUploadService', () => { }); it('should make XHR abort request after the xhr abort is called', () => { + service.setOptions(options); let filesFake = [{name: 'fake-name', size: 10}]; service.addToQueue(filesFake); service.uploadFilesInTheQueue('', null); @@ -134,12 +146,13 @@ describe('AlfrescoUploadService', () => { }); it('should make XHR done request after the file is upload', () => { + service.setOptions(options); let filesFake = {name: 'fake-name', size: 10}; let uploadingFileModel = new FileModel(filesFake); service.uploadFile(uploadingFileModel, '', null); - expect(jasmine.Ajax.requests.mostRecent().url).toBe('/some/cool/url'); + expect(jasmine.Ajax.requests.mostRecent().url).toBe('fakehost/some/cool/url'); jasmine.Ajax.requests.mostRecent().respondWith({ 'status': 200, contentType: 'text/plain', @@ -147,5 +160,4 @@ describe('AlfrescoUploadService', () => { }); expect(doneFn).toHaveBeenCalledWith('Single File uploaded'); }); - }); diff --git a/ng2-components/ng2-alfresco-upload/src/services/upload.service.ts b/ng2-components/ng2-alfresco-upload/src/services/upload.service.ts index 9ce6675691..d6dc4f1ea9 100644 --- a/ng2-components/ng2-alfresco-upload/src/services/upload.service.ts +++ b/ng2-components/ng2-alfresco-upload/src/services/upload.service.ts @@ -60,6 +60,7 @@ export class UploadService { * */ public setOptions(options: any): void { + this._url = options.url || this._url; this._baseUrlPath = options.baseUrlPath || this._baseUrlPath; this._formFields = options.formFields != null ? options.formFields : this._formFields; } @@ -68,24 +69,32 @@ export class UploadService { * Get the host * @returns {string} */ - public get host(): string { + public getHost(): string { return this._host; } /** - * Set the host - * @param value + * Get the url + * @returns {string} */ - public set host(value: string) { - this._host = value; + public getUrl(): string { + return this._url; } /** * Get the base url * @returns {string} */ - private getBaseUrl(): string { - return this._host + this._baseUrlPath; + public getBaseUrl(): string { + return this._baseUrlPath; + } + + /** + * Get the form fields + * @returns {Object} + */ + public getFormFileds(): Object { + return this._formFields; } /** @@ -102,7 +111,6 @@ export class UploadService { */ private getAlfrescoClient() { let defaultClient = new AlfrescoApi.ApiClient(); - defaultClient.basePath = this.getBaseUrl(); // Configure HTTP basic authorization: basicAuth let basicAuth = defaultClient.authentications['basicAuth']; @@ -206,6 +214,7 @@ export class UploadService { form.append('uploaddirectory', directory); let xmlHttpRequest = this.createXMLHttpRequestInstance(uploadingFileModel, elementEmit); + uploadingFileModel._xmlHttpRequest = xmlHttpRequest; xmlHttpRequest.open(this._method, this._host + this._url, true); let authToken = btoa(basicAuth.username + ':' + basicAuth.password);