mirror of
https://github.com/codex-team/editor.js
synced 2024-05-19 14:56:46 +02:00
179 lines
4.6 KiB
TypeScript
179 lines
4.6 KiB
TypeScript
|
/* tslint:disable:max-classes-per-file */
|
||
|
import { ToolSettings } from '../../../../types';
|
||
|
import { ToolType } from '../../../../src/components/tools/base';
|
||
|
import BlockTune from '../../../../src/components/tools/tune';
|
||
|
import { BlockTuneData } from '../../../../types/block-tunes/block-tune-data';
|
||
|
|
||
|
describe('BlockTune', () => {
|
||
|
/**
|
||
|
* Mock for BlockTune constructor options
|
||
|
*/
|
||
|
const options = {
|
||
|
name: 'blockTune',
|
||
|
constructable: class {
|
||
|
public static reset;
|
||
|
public static prepare;
|
||
|
|
||
|
public api: object;
|
||
|
public settings: ToolSettings;
|
||
|
public data: BlockTuneData;
|
||
|
public block: object;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
constructor({ api, settings, block, data }) {
|
||
|
this.api = api;
|
||
|
this.settings = settings;
|
||
|
this.block = block;
|
||
|
this.data = data;
|
||
|
}
|
||
|
},
|
||
|
config: {
|
||
|
config: {
|
||
|
option1: 'option1',
|
||
|
option2: 'option2',
|
||
|
},
|
||
|
shortcut: 'CMD+SHIFT+B',
|
||
|
},
|
||
|
api: {
|
||
|
getMethodsForTool(): object {
|
||
|
return {
|
||
|
prop1: 'prop1',
|
||
|
prop2: 'prop2',
|
||
|
};
|
||
|
},
|
||
|
},
|
||
|
isDefault: false,
|
||
|
isInternal: false,
|
||
|
defaultPlaceholder: 'Default placeholder',
|
||
|
};
|
||
|
|
||
|
it('.type should return ToolType.Tune', () => {
|
||
|
const tool = new BlockTune(options as any);
|
||
|
|
||
|
expect(tool.type).to.be.eq(ToolType.Tune);
|
||
|
});
|
||
|
|
||
|
it('.name should return correct value', () => {
|
||
|
const tool = new BlockTune(options as any);
|
||
|
|
||
|
expect(tool.name).to.be.eq(options.name);
|
||
|
});
|
||
|
|
||
|
it('.isInternal should return correct value', () => {
|
||
|
const tool1 = new BlockTune(options as any);
|
||
|
const tool2 = new BlockTune({
|
||
|
...options,
|
||
|
isInternal: true,
|
||
|
} as any);
|
||
|
|
||
|
expect(tool1.isInternal).to.be.false;
|
||
|
expect(tool2.isInternal).to.be.true;
|
||
|
});
|
||
|
|
||
|
it('.settings should return correct value', () => {
|
||
|
const tool = new BlockTune(options as any);
|
||
|
|
||
|
expect(tool.settings).to.be.deep.eq(options.config.config);
|
||
|
});
|
||
|
|
||
|
it('.isBlock() should return false', () => {
|
||
|
const tool = new BlockTune(options as any);
|
||
|
|
||
|
expect(tool.isBlock()).to.be.false;
|
||
|
});
|
||
|
|
||
|
it('.isInline() should return false', () => {
|
||
|
const tool = new BlockTune(options as any);
|
||
|
|
||
|
expect(tool.isInline()).to.be.false;
|
||
|
});
|
||
|
|
||
|
it('.isTune() should return true', () => {
|
||
|
const tool = new BlockTune(options as any);
|
||
|
|
||
|
expect(tool.isTune()).to.be.true;
|
||
|
});
|
||
|
|
||
|
context('.prepare()', () => {
|
||
|
it('should call Tool prepare method', () => {
|
||
|
options.constructable.prepare = cy.stub();
|
||
|
const tool = new BlockTune(options as any);
|
||
|
|
||
|
tool.prepare();
|
||
|
|
||
|
expect(options.constructable.prepare).to.have.been.calledWithMatch({
|
||
|
toolName: tool.name,
|
||
|
config: tool.settings,
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('should not fail if Tool prepare method is not exist', () => {
|
||
|
const tool = new BlockTune({
|
||
|
...options,
|
||
|
constructable: {},
|
||
|
} as any);
|
||
|
|
||
|
expect(tool.prepare).to.not.throw;
|
||
|
});
|
||
|
});
|
||
|
|
||
|
context('.reset()', () => {
|
||
|
it('should call Tool reset method', () => {
|
||
|
options.constructable.reset = cy.stub();
|
||
|
const tool = new BlockTune(options as any);
|
||
|
|
||
|
tool.reset();
|
||
|
|
||
|
expect(options.constructable.reset).to.be.calledOnce;
|
||
|
});
|
||
|
|
||
|
it('should not fail if Tool reset method is not exist', () => {
|
||
|
const tool = new BlockTune({
|
||
|
...options,
|
||
|
constructable: {},
|
||
|
} as any);
|
||
|
|
||
|
expect(tool.reset).to.not.throw;
|
||
|
});
|
||
|
});
|
||
|
|
||
|
context('.create()', () => {
|
||
|
const tool = new BlockTune(options as any);
|
||
|
const data = { text: 'text' };
|
||
|
const blockAPI = {
|
||
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
||
|
method(): void {},
|
||
|
};
|
||
|
|
||
|
it('should return Tool instance', () => {
|
||
|
expect(tool.create(data, blockAPI as any)).to.be.instanceOf(options.constructable);
|
||
|
});
|
||
|
|
||
|
it('should return Tool instance with passed data', () => {
|
||
|
const instance = tool.create(data, blockAPI as any) as any;
|
||
|
|
||
|
expect(instance.data).to.be.deep.eq(data);
|
||
|
});
|
||
|
|
||
|
it('should return Tool instance with passed BlockAPI object', () => {
|
||
|
const instance = tool.create(data, blockAPI as any) as any;
|
||
|
|
||
|
expect(instance.block).to.be.deep.eq(blockAPI);
|
||
|
});
|
||
|
|
||
|
it('should return Tool instance with passed API object', () => {
|
||
|
const instance = tool.create(data, blockAPI as any) as any;
|
||
|
|
||
|
expect(instance.api).to.be.deep.eq(options.api.getMethodsForTool());
|
||
|
});
|
||
|
|
||
|
it('should return Tool instance with passed settings', () => {
|
||
|
const instance = tool.create(data, blockAPI as any) as any;
|
||
|
|
||
|
expect(instance.settings).to.be.deep.eq(options.config.config);
|
||
|
});
|
||
|
});
|
||
|
});
|