Browse Source

Improve block tests

pull/3905/head
Artur Arseniev 5 years ago
parent
commit
343cdddb3a
  1. 89
      src/block_manager/index.js
  2. 59
      test/specs/block_manager/index.js

89
src/block_manager/index.js

@ -48,6 +48,16 @@ import Blocks from './model/Blocks';
import BlockCategories from './model/Categories'; import BlockCategories from './model/Categories';
import BlocksView from './view/BlocksView'; import BlocksView from './view/BlocksView';
export const evAll = 'block';
export const evPfx = `${evAll}:`;
export const evUpdate = `${evPfx}update`;
export const evAdd = `${evPfx}add`;
export const evRemove = `${evPfx}remove`;
export const evRemoveBefore = `${evRemove}:before`;
// export const evCustom = `${evPfx}custom`;
// export const evOpen = `${evPfx}open`;
// export const evClose = `${evPfx}close`;
export default () => { export default () => {
var c = {}; var c = {};
var blocks, blocksVisible, blocksView; var blocks, blocksVisible, blocksView;
@ -56,49 +66,35 @@ export default () => {
return { return {
...Module, ...Module,
/**
* Name of the module
* @type {String}
* @private
*/
name: 'BlockManager', name: 'BlockManager',
/** events: {
* Initialize module. Automatically called with a new instance of the editor all: evAll,
* @param {Object} config Configurations update: evUpdate,
* @return {this} add: evAdd,
* @private remove: evRemove,
*/ removeBefore: evRemoveBefore
init(config) { // custom: evCustom,
c = config || {}; // open: evOpen,
const em = c.em; // close: evClose
this.em = em; },
for (let name in defaults) { init(config = {}) {
if (!(name in c)) { c = { ...defaults, ...config };
c[name] = defaults[name]; const { em } = c;
} this.em = em;
}
// Global blocks collection // Global blocks collection
blocks = new Blocks([]); blocks = new Blocks([]);
blocksVisible = new Blocks([]); blocksVisible = new Blocks([]);
categories = new BlockCategories(); categories = new BlockCategories();
this.all = blocks;
this.__initListen();
// Setup the sync between the global and public collections // Setup the sync between the global and public collections
blocks.listenTo(blocks, 'add', model => { blocks.on('add', model => blocksVisible.add(model));
blocksVisible.add(model); blocks.on('remove', model => blocksVisible.remove(model));
em && em.trigger('block:add', model); blocks.on('reset', coll => blocksVisible.reset(coll.models));
});
blocks.listenTo(blocks, 'remove', model => {
blocksVisible.remove(model);
em && em.trigger('block:remove', model);
});
blocks.listenTo(blocks, 'reset', coll => {
blocksVisible.reset(coll.models);
});
return this; return this;
}, },
@ -178,8 +174,8 @@ export default () => {
}, },
/** /**
* Return all blocks * Return all blocks.
* @return {Collection} * @return {Collection<[Block]>}
* @example * @example
* const blocks = blockManager.getAll(); * const blocks = blockManager.getAll();
* console.log(JSON.stringify(blocks)); * console.log(JSON.stringify(blocks));
@ -198,16 +194,17 @@ export default () => {
}, },
/** /**
* Remove a block by id * Remove block.
* @param {string} id Block id * @param {String|[Block]} block Block or block ID
* @returns {[Block]} Removed block * @returns {[Block]} Removed block
* @example * @example
* // Id of the block which need to be removed * const removed = blockManager.remove('BLOCK_ID');
* const id = 'button'; * // or by passing the Block
* blockManager.remove(id); * const block = blockManager.get('BLOCK_ID');
* blockManager.remove(block);
*/ */
remove(id) { remove(id, opts) {
return blocks.remove(id); return this.__remove(id, opts);
}, },
/** /**
@ -280,12 +277,10 @@ export default () => {
}, },
destroy() { destroy() {
blocks.reset(); const colls = [blocks, blocksVisible, categories];
blocks.stopListening(); colls.map(c => c.stopListening());
blocksVisible.reset(); colls.map(c => c.reset());
categories.reset();
blocksView && blocksView.remove(); blocksView && blocksView.remove();
[blocks, blocksVisible, categories, blocksView].forEach(i => (i = null));
c = {}; c = {};
} }
}; };

59
test/specs/block_manager/index.js

@ -1,24 +1,34 @@
import BlockManager from 'block_manager'; import Editor from 'editor';
import BlocksView from './view/BlocksView';
describe('BlockManager', () => { describe('BlockManager', () => {
describe('Main', () => { describe('Main', () => {
var obj; let obj;
var idTest; let idTest;
var optsTest; let optsTest;
let editor;
beforeEach(() => { beforeEach(() => {
editor = new Editor({
blockManager: {
blocks: []
}
}).init();
idTest = 'h1-block'; idTest = 'h1-block';
optsTest = { optsTest = {
label: 'Heading', label: 'Heading',
content: '<h1>Test</h1>' content: '<h1>Test</h1>'
}; };
obj = new BlockManager().init();
obj.postRender(); obj = editor.Blocks;
obj.render();
// obj = new BlockManager().init();
// obj.postRender();
// obj.render();
}); });
afterEach(() => { afterEach(() => {
editor.destroy();
obj = null; obj = null;
}); });
@ -35,7 +45,7 @@ describe('BlockManager', () => {
}); });
test('Add new block', () => { test('Add new block', () => {
var model = obj.add(idTest, optsTest); obj.add(idTest, optsTest);
expect(obj.getAll().length).toEqual(1); expect(obj.getAll().length).toEqual(1);
}); });
@ -63,9 +73,38 @@ describe('BlockManager', () => {
expect(model).toEqual(model2); expect(model).toEqual(model2);
}); });
test('Render blocks', () => { test.skip('Render blocks', () => {
obj.render(); obj.render();
expect(obj.getContainer()).toBeTruthy(); expect(obj.getContainer()).toBeTruthy();
}); });
describe.only('Events', () => {
test('Add triggers proper events', () => {
const eventAdd = jest.fn();
const eventAll = jest.fn();
editor.on(obj.events.add, eventAdd);
editor.on(obj.events.all, eventAll);
const added = obj.add(idTest, optsTest);
expect(eventAdd).toBeCalledTimes(1);
expect(eventAdd).toBeCalledWith(added, expect.anything());
expect(eventAll).toBeCalled();
});
test('Remove triggers proper events', () => {
const eventBfRm = jest.fn();
const eventRm = jest.fn();
const eventAll = jest.fn();
editor.on(obj.events.removeBefore, eventBfRm);
editor.on(obj.events.remove, eventRm);
editor.on(obj.events.all, eventAll);
obj.add(idTest, optsTest);
const removed = obj.remove(idTest);
expect(obj.getAll().length).toBe(0);
expect(eventBfRm).toBeCalledTimes(1);
expect(eventRm).toBeCalledTimes(1);
expect(eventRm).toBeCalledWith(removed, expect.anything());
expect(eventAll).toBeCalled();
});
});
}); });
}); });

Loading…
Cancel
Save