浏览代码

Merge branch 'master' into ckeditor5/t/1214

Piotrek Koszuliński 7 年之前
父节点
当前提交
97bcf803ef

+ 13 - 10
packages/ckeditor5-adapter-ckfinder/src/uploadadapter.js

@@ -96,13 +96,15 @@ class UploadAdapter {
 	 * Starts the upload process.
 	 *
 	 * @see module:upload/filerepository~UploadAdapter#upload
-	 * @returns {Promise}
+	 * @returns {Promise.<Object>}
 	 */
 	upload() {
-		return new Promise( ( resolve, reject ) => {
-			this._initRequest();
-			this._initListeners( resolve, reject );
-			this._sendRequest();
+		return this.loader.file.then( file => {
+			return new Promise( ( resolve, reject ) => {
+				this._initRequest();
+				this._initListeners( resolve, reject, file );
+				this._sendRequest( file );
+			} );
 		} );
 	}
 
@@ -110,7 +112,6 @@ class UploadAdapter {
 	 * Aborts the upload process.
 	 *
 	 * @see module:upload/filerepository~UploadAdapter#abort
-	 * @returns {Promise}
 	 */
 	abort() {
 		if ( this.xhr ) {
@@ -136,12 +137,13 @@ class UploadAdapter {
 	 * @private
 	 * @param {Function} resolve Callback function to be called when the request is successful.
 	 * @param {Function} reject Callback function to be called when the request cannot be completed.
+	 * @param {File} file File instance to be uploaded.
 	 */
-	_initListeners( resolve, reject ) {
+	_initListeners( resolve, reject, file ) {
 		const xhr = this.xhr;
 		const loader = this.loader;
 		const t = this.t;
-		const genericError = t( 'Cannot upload file:' ) + ` ${ loader.file.name }.`;
+		const genericError = t( 'Cannot upload file:' ) + ` ${ file.name }.`;
 
 		xhr.addEventListener( 'error', () => reject( genericError ) );
 		xhr.addEventListener( 'abort', () => reject() );
@@ -173,11 +175,12 @@ class UploadAdapter {
 	 * Prepares the data and sends the request.
 	 *
 	 * @private
+	 * @param {File} file File instance to be uploaded.
 	 */
-	_sendRequest() {
+	_sendRequest( file ) {
 		// Prepare form data.
 		const data = new FormData();
-		data.append( 'upload', this.loader.file );
+		data.append( 'upload', file );
 		data.append( 'ckCsrfToken', getCsrfToken() );
 
 		// Send request.

+ 34 - 23
packages/ckeditor5-adapter-ckfinder/tests/uploadadapter.js

@@ -15,7 +15,7 @@ import { createNativeFileMock } from '@ckeditor/ckeditor5-upload/tests/_utils/mo
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 
 describe( 'CKFinderUploadAdapter', () => {
-	let editor, sinonXHR;
+	let editor, sinonXHR, fileRepository;
 	testUtils.createSinonSandbox();
 
 	beforeEach( () => {
@@ -33,6 +33,7 @@ describe( 'CKFinderUploadAdapter', () => {
 			} )
 			.then( newEditor => {
 				editor = newEditor;
+				fileRepository = editor.plugins.get( FileRepository );
 			} );
 	} );
 
@@ -45,14 +46,15 @@ describe( 'CKFinderUploadAdapter', () => {
 	} );
 
 	describe( 'UploadAdapter', () => {
-		let adapter, loaderMock;
+		let adapter, loader;
 
 		beforeEach( () => {
 			const file = createNativeFileMock();
 			file.name = 'image.jpeg';
-			loaderMock = { file	};
 
-			adapter = editor.plugins.get( FileRepository ).createUploadAdapter( loaderMock );
+			loader = fileRepository.createLoader( file );
+
+			adapter = editor.plugins.get( FileRepository ).createUploadAdapter( loader );
 		} );
 
 		it( 'crateAdapter method should be registered and have upload and abort methods', () => {
@@ -91,15 +93,14 @@ describe( 'CKFinderUploadAdapter', () => {
 					uploaded: 1
 				};
 
-				const promise = adapter.upload()
-					.then( () => {
-						expect( request.url ).to.equal( 'http://example.com' );
-					} );
+				adapter.upload();
 
-				request = sinonXHR.requests[ 0 ];
-				request.respond( 200, { 'Content-Type': 'application/json' }, JSON.stringify( validResponse ) );
+				return loader.file.then( () => {
+					request = sinonXHR.requests[ 0 ];
+					request.respond( 200, { 'Content-Type': 'application/json' }, JSON.stringify( validResponse ) );
 
-				return promise;
+					expect( request.url ).to.equal( 'http://example.com' );
+				} );
 			} );
 
 			it( 'should throw an error on generic request error', () => {
@@ -111,8 +112,10 @@ describe( 'CKFinderUploadAdapter', () => {
 						expect( msg ).to.equal( 'Cannot upload file: image.jpeg.' );
 					} );
 
-				const request = sinonXHR.requests[ 0 ];
-				request.error();
+				loader.file.then( () => {
+					const request = sinonXHR.requests[ 0 ];
+					request.error();
+				} );
 
 				return promise;
 			} );
@@ -132,8 +135,10 @@ describe( 'CKFinderUploadAdapter', () => {
 						expect( msg ).to.equal( 'Foo bar baz.' );
 					} );
 
-				const request = sinonXHR.requests[ 0 ];
-				request.respond( 200, { 'Content-Type': 'application/json' }, JSON.stringify( responseError ) );
+				loader.file.then( () => {
+					const request = sinonXHR.requests[ 0 ];
+					request.respond( 200, { 'Content-Type': 'application/json' }, JSON.stringify( responseError ) );
+				} );
 
 				return promise;
 			} );
@@ -151,8 +156,10 @@ describe( 'CKFinderUploadAdapter', () => {
 						expect( msg ).to.equal( 'Cannot upload file: image.jpeg.' );
 					} );
 
-				const request = sinonXHR.requests[ 0 ];
-				request.respond( 200, { 'Content-Type': 'application/json' }, JSON.stringify( responseError ) );
+				loader.file.then( () => {
+					const request = sinonXHR.requests[ 0 ];
+					request.respond( 200, { 'Content-Type': 'application/json' }, JSON.stringify( responseError ) );
+				} );
 
 				return promise;
 			} );
@@ -168,8 +175,10 @@ describe( 'CKFinderUploadAdapter', () => {
 						expect( request.aborted ).to.be.true;
 					} );
 
-				request = sinonXHR.requests[ 0 ];
-				adapter.abort();
+				loader.file.then( () => {
+					request = sinonXHR.requests[ 0 ];
+					adapter.abort();
+				} );
 
 				return promise;
 			} );
@@ -183,11 +192,13 @@ describe( 'CKFinderUploadAdapter', () => {
 			it( 'should update progress', () => {
 				adapter.upload();
 
-				const request = sinonXHR.requests[ 0 ];
-				request.uploadProgress( { loaded: 4, total: 10 } );
+				return loader.file.then( () => {
+					const request = sinonXHR.requests[ 0 ];
+					request.uploadProgress( { loaded: 4, total: 10 } );
 
-				expect( loaderMock.uploadTotal ).to.equal( 10 );
-				expect( loaderMock.uploaded ).to.equal( 4 );
+					expect( loader.uploadTotal ).to.equal( 10 );
+					expect( loader.uploaded ).to.equal( 4 );
+				} );
 			} );
 		} );
 	} );