Explorar el Código

Fix: Upload command should not crash when upload adapter is not specified (instead, FileRepository logs an error). Closes #59.

Piotrek Koszuliński hace 8 años
padre
commit
7f62347dc1

+ 8 - 1
packages/ckeditor5-upload/src/imageuploadcommand.js

@@ -41,8 +41,15 @@ export default class ImageUploadCommand extends Command {
 		const fileRepository = editor.plugins.get( FileRepository );
 
 		doc.enqueueChanges( () => {
+			const loader = fileRepository.createLoader( file );
+
+			// Do not throw when upload adapter is not set. FileRepository will log an error anyway.
+			if ( !loader ) {
+				return;
+			}
+
 			const imageElement = new ModelElement( 'image', {
-				uploadId: fileRepository.createLoader( file ).id
+				uploadId: loader.id
 			} );
 
 			let insertAtSelection;

+ 1 - 1
packages/ckeditor5-upload/src/imageuploadengine.js

@@ -64,7 +64,7 @@ export default class ImageUploadEngine extends Plugin {
 			}
 		} );
 
-		// Prevents from browser redirecting to drag-end-dropped image.
+		// Prevents from browser redirecting to the dropped image.
 		editor.editing.view.on( 'dragover', ( evt, data ) => {
 			data.preventDefault();
 		} );

+ 23 - 0
packages/ckeditor5-upload/tests/imageuploadcommand.js

@@ -17,9 +17,15 @@ import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 import buildModelConverter from '@ckeditor/ckeditor5-engine/src/conversion/buildmodelconverter';
 import ModelPosition from '@ckeditor/ckeditor5-engine/src/model/position';
 
+import log from '@ckeditor/ckeditor5-utils/src/log';
+
+import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
+
 describe( 'ImageUploadCommand', () => {
 	let editor, command, doc, fileRepository;
 
+	testUtils.createSinonSandbox();
+
 	class UploadAdapterPluginMock extends Plugin {
 		init() {
 			fileRepository = this.editor.plugins.get( FileRepository );
@@ -105,5 +111,22 @@ describe( 'ImageUploadCommand', () => {
 
 			expect( getModelData( doc ) ).to.equal( '<other>[]</other>' );
 		} );
+
+		it( 'should not throw when upload adapter is not set (FileRepository will log an error anyway)', () => {
+			const file = createNativeFileMock();
+
+			fileRepository.createAdapter = undefined;
+
+			const logStub = testUtils.sinon.stub( log, 'error' );
+
+			setModelData( doc, '<paragraph>fo[]o</paragraph>' );
+
+			expect( () => {
+				command.execute( { file } );
+			} ).to.not.throw();
+
+			expect( getModelData( doc ) ).to.equal( '<paragraph>fo[]o</paragraph>' );
+			expect( logStub.calledOnce ).to.be.true;
+		} );
 	} );
 } );