import draftail, {
wrapWagtailIcon,
Link,
Document,
ImageBlock,
EmbedBlock,
} from './index';
describe('Draftail', () => {
describe('#initEditor', () => {
beforeEach(() => {
document.head.innerHTML = '';
document.body.innerHTML = '';
});
it('works', () => {
document.body.innerHTML = '';
const field = document.querySelector('#test');
draftail.initEditor('#test', {});
expect(field.draftailEditor).toBeDefined();
});
it('onSave', () => {
document.body.innerHTML = '';
const field = document.querySelector('#test');
draftail.initEditor('#test', {});
field.draftailEditor.saveState();
expect(field.value).toBe('null');
});
it('options', () => {
document.body.innerHTML = '';
const field = document.querySelector('#test');
draftail.registerPlugin({
type: 'IMAGE',
source: () => {},
block: () => {},
});
draftail.initEditor('#test', {
entityTypes: [
{ type: 'IMAGE' },
],
enableHorizontalRule: true,
});
expect(field.draftailEditor.props).toMatchSnapshot();
});
describe('selector conflicts', () => {
it('fails to instantiate on the right field', () => {
document.body.innerHTML = '';
expect(() => {
draftail.initEditor('[name="description"]', {}, document.body);
}).toThrow(SyntaxError);
});
it('fails to instantiate on the right field when currentScript is not used', () => {
window.draftail = draftail;
document.body.innerHTML = `
`;
expect(document.querySelector('[name="last"]').draftailEditor).not.toBeDefined();
});
it('has no conflict when currentScript is used', () => {
window.draftail = draftail;
document.body.innerHTML = `
`;
expect(document.querySelector('[name="last"]').draftailEditor).toBeDefined();
});
it('uses fallback document.body when currentScript context is wrong', () => {
window.draftail = draftail;
document.body.innerHTML = `
`;
expect(document.querySelector('#description').draftailEditor).toBeDefined();
});
});
});
describe('#wrapWagtailIcon', () => {
it('works', () => {
expect(wrapWagtailIcon({ icon: 'media' }).icon).toMatchSnapshot();
});
it('no icon', () => {
const type = {};
expect(wrapWagtailIcon(type)).toBe(type);
});
it('array icon', () => {
const type = { icon: ['M10 10 H 90 V 90 H 10 Z'] };
expect(wrapWagtailIcon(type)).toBe(type);
});
});
describe('#registerPlugin', () => {
it('works', () => {
const plugin = {
type: 'TEST',
source: null,
decorator: null,
};
expect(draftail.registerPlugin(plugin)).toMatchObject({
TEST: plugin,
});
});
});
it('#Link', () => expect(Link).toBeDefined());
it('#Document', () => expect(Document).toBeDefined());
it('#ImageBlock', () => expect(ImageBlock).toBeDefined());
it('#EmbedBlock', () => expect(EmbedBlock).toBeDefined());
it('#ModalWorkflowSource', () => expect(draftail.ModalWorkflowSource).toBeDefined());
it('#Tooltip', () => expect(draftail.Tooltip).toBeDefined());
it('#TooltipEntity', () => expect(draftail.TooltipEntity).toBeDefined());
});