| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /**
- * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
- */
- /* globals window, setTimeout */
- import Base64UploadAdapter from '../../src/adapters/base64uploadadapter';
- import FileRepository from '../../src/filerepository';
- import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';
- import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
- import { createNativeFileMock } from '../_utils/mocks';
- describe( 'Base64UploadAdapter', () => {
- let div, stubs;
- testUtils.createSinonSandbox();
- beforeEach( () => {
- div = window.document.createElement( 'div' );
- window.document.body.appendChild( div );
- stubs = {
- addEventListener( event, callback ) {
- stubs[ `on${ event }` ] = callback;
- },
- readAsDataURL: testUtils.sinon.spy(),
- abort: testUtils.sinon.spy(),
- result: 'data:image/png;base64'
- };
- testUtils.sinon.stub( window, 'FileReader' ).callsFake( function FileReader() {
- return stubs;
- } );
- } );
- afterEach( () => {
- window.document.body.removeChild( div );
- } );
- it( 'should require the FileRepository plugin', () => {
- expect( Base64UploadAdapter.requires ).to.deep.equal( [ FileRepository ] );
- } );
- it( 'should be named', () => {
- expect( Base64UploadAdapter.pluginName ).to.equal( 'Base64UploadAdapter' );
- } );
- describe( 'init()', () => {
- it( 'should set the loader', () => {
- return ClassicTestEditor
- .create( div, {
- plugins: [ Base64UploadAdapter ]
- } )
- .then( editor => {
- expect( editor.plugins.get( FileRepository ).createUploadAdapter ).is.a( 'function' );
- return editor.destroy();
- } );
- } );
- } );
- describe( 'Adapter', () => {
- let editor, fileRepository, adapter;
- beforeEach( () => {
- return ClassicTestEditor.create( div, {
- plugins: [ Base64UploadAdapter ]
- } ).then( _editor => {
- editor = _editor;
- fileRepository = editor.plugins.get( FileRepository );
- adapter = fileRepository.createLoader( createNativeFileMock() );
- } );
- } );
- afterEach( () => {
- return editor.destroy();
- } );
- it( 'crateAdapter method should be registered and have upload() and abort() methods', () => {
- expect( adapter ).to.not.be.undefined;
- expect( adapter.upload ).to.be.a( 'function' );
- expect( adapter.abort ).to.be.a( 'function' );
- } );
- describe( 'upload()', () => {
- it( 'returns a promise that resolves an image as a base64 string', () => {
- setTimeout( () => {
- // FileReader has loaded the file.
- stubs.onload();
- } );
- return adapter.upload()
- .then( response => {
- expect( response.default ).to.equal( 'data:image/png;base64' );
- expect( stubs.readAsDataURL.calledOnce ).to.equal( true );
- } );
- } );
- it( 'returns a promise that rejects if something went wrong', () => {
- const uploadError = new Error( 'Something went wrong.' );
- setTimeout( () => {
- // An error occurred while FileReader was reading the file.
- stubs.onerror( uploadError );
- } );
- return adapter.upload()
- .then(
- () => {
- return new Error( 'Supposed to be rejected.' );
- },
- err => {
- expect( err ).to.equal( uploadError );
- expect( stubs.readAsDataURL.calledOnce ).to.equal( true );
- }
- );
- } );
- it( 'returns a promise that rejects if FileReader aborted reading a file', () => {
- setTimeout( () => {
- // FileReader aborted reading the file.
- stubs.onabort();
- } );
- return adapter.upload()
- .then(
- () => {
- return new Error( 'Supposed to be rejected.' );
- },
- () => {
- expect( stubs.readAsDataURL.calledOnce ).to.equal( true );
- }
- );
- } );
- } );
- describe( 'abort()', () => {
- it( 'should not call abort() on the non-existing FileReader uploader (loader#file not resolved)', () => {
- const adapter = fileRepository.createLoader( createNativeFileMock() );
- expect( () => {
- // Catch the upload error to prevent uncaught promise errors
- adapter.upload().catch( () => {} );
- adapter.abort();
- } ).to.not.throw();
- expect( stubs.abort.called ).to.equal( false );
- } );
- it( 'should call abort() on the FileReader uploader (loader#file resolved)', done => {
- adapter.upload();
- // Wait for the `loader.file` promise.
- setTimeout( () => {
- adapter.abort();
- expect( stubs.abort.called ).to.equal( true );
- done();
- } );
- } );
- } );
- } );
- } );
|