imageuploadcommand.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /**
  2. * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor';
  6. import ImageUploadCommand from '../src/imageuploadcommand';
  7. import FileRepository from '../src/filerepository';
  8. import { createNativeFileMock, AdapterMock } from './_utils/mocks';
  9. import { setData as setModelData, getData as getModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
  10. import Image from '@ckeditor/ckeditor5-image/src/image/imageengine';
  11. import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
  12. describe( 'ImageUploadCommand', () => {
  13. let editor, command, adapterMock, document, fileRepository;
  14. beforeEach( () => {
  15. return VirtualTestEditor.create( {
  16. plugins: [ FileRepository, Image, Paragraph ]
  17. } )
  18. .then( newEditor => {
  19. editor = newEditor;
  20. command = new ImageUploadCommand( editor );
  21. fileRepository = editor.plugins.get( FileRepository );
  22. fileRepository.createAdapter = loader => {
  23. adapterMock = new AdapterMock( loader );
  24. return adapterMock;
  25. };
  26. document = editor.document;
  27. const schema = document.schema;
  28. schema.allow( { name: 'image', attributes: [ 'uploadId' ], inside: '$root' } );
  29. schema.requireAttributes( 'image', [ 'uploadId' ] );
  30. } );
  31. } );
  32. describe( '_doExecute', () => {
  33. it( 'should insert image', () => {
  34. const file = createNativeFileMock();
  35. setModelData( document, '<paragraph>foo[]</paragraph>' );
  36. command._doExecute( { file } );
  37. const id = fileRepository.getLoader( file ).id;
  38. expect( getModelData( document ) ).to.equal( `<image uploadId="${ id }"></image><paragraph>foo[]</paragraph>` );
  39. } );
  40. it( 'should not insert non-image', () => {
  41. const file = createNativeFileMock();
  42. file.type = 'audio/mpeg3';
  43. setModelData( document, '<paragraph>foo[]</paragraph>' );
  44. command._doExecute( { file } );
  45. expect( getModelData( document ) ).to.equal( '<paragraph>foo[]</paragraph>' );
  46. } );
  47. it( 'should allow to provide batch instance', () => {
  48. const batch = document.batch();
  49. const file = createNativeFileMock();
  50. const spy = sinon.spy( batch, 'insert' );
  51. setModelData( document, '<paragraph>foo[]</paragraph>' );
  52. command._doExecute( { batch, file } );
  53. const id = fileRepository.getLoader( file ).id;
  54. expect( getModelData( document ) ).to.equal( `<image uploadId="${ id }"></image><paragraph>foo[]</paragraph>` );
  55. sinon.assert.calledOnce( spy );
  56. } );
  57. } );
  58. } );