grapesjs
Version:
Free and Open Source Web Builder Framework
250 lines (218 loc) • 7.52 kB
JavaScript
const PluginManager = require('plugin_manager');
describe('GrapesJS', () => {
describe('Main', () => {
var obj;
var fixtures;
var fixture;
var editorName;
var htmlString;
var config;
var cssString;
var documentEl;
var storage;
var storageId = 'testStorage';
var storageMock = {
store(data, clb) {
storage = data;
clb();
},
load(keys, clb) {
return clb(storage);
},
};
before(() => {
editorName = 'editor-fixture';
});
beforeEach(() => {
htmlString = '<div class="test1"></div><div class="test2"></div>';
cssString = '.test2{color:red}.test3{color:blue}';
documentEl = '<style>' + cssString + '</style>' + htmlString;
config = {
container: '#' + editorName,
storageManager: {
autoload: 0,
autosave: 0,
type: ''
},
}
obj = grapesjs;
//fixture = $('<div id="' + editorName + '"></div>');
//fixture.empty().appendTo(fixtures);
document.body.innerHTML = `<div id="fixtures"><div id="${editorName}"></div></div>`;
fixtures = document.body.querySelector('#fixtures');
});
it('Main object should be loaded', () => {
expect(obj).toExist();
});
it('Init new editor', () => {
var editor = obj.init(config);
expect(editor).toExist();
});
it('Init new editor with node for container', () => {
var configAlt = {
container: document.createElement('div'),
storageManager: {
autoload: 0,
type:'none'
},
}
var editor = obj.init(configAlt);
expect(editor).toExist();
});
it('New editor is empty', () => {
var editor = obj.init(config);
var html = editor.getHtml();
//var css = editor.getCss();
var protCss = editor.getConfig().protectedCss;
expect((html ? html : '')).toNotExist();
//expect((css ? css : '')).toEqual(protCss);
expect(editor.getComponents().length).toEqual(0);
expect(editor.getStyle().length).toEqual(0);
});
it('Init editor with html', () => {
config.components = htmlString;
var editor = obj.init(config);
var comps = editor.DomComponents.getComponents();
expect(comps.length).toEqual(2);
expect(comps.at(0).get('classes').at(0).get('name')).toEqual('test1');
});
it('Init editor with css', () => {
config.style = cssString;
var editor = obj.init(config);
var rules = editor.CssComposer.getAll();
expect(rules.length).toEqual(2);
expect(rules.at(0).get('selectors').at(0).get('name')).toEqual('test2');
});
it.skip('Init editor from element', () => {
config.fromElement = 1;
fixtures.innerHTML = documentEl;
var editor = obj.init(config);
var html = editor.getHtml();
var css = editor.getCss();
var protCss = editor.getConfig().protectedCss;
/*
(html ? html : '').should.equal(htmlString);
(css ? css : '').should.equal(protCss + '.test2{color:red;}');// .test3 is discarded in css
editor.getComponents().length.should.equal(2);
editor.getStyle().length.should.equal(2);
*/
expect((html ? html : '')).toEqual(htmlString);
expect(editor.getComponents().length).toEqual(2);
// .test3 is discarded in css
expect((css ? css : '')).toEqual(protCss + '.test2{color:red;}');
// bust is still here
expect(editor.getStyle().length).toEqual(2);
});
it('Set components as HTML', () => {
var editor = obj.init(config);
editor.setComponents(htmlString);
expect(editor.getComponents().length).toEqual(2);
});
it('Set components as array of objects', () => {
var editor = obj.init(config);
editor.setComponents([{}, {}, {}]);
expect(editor.getComponents().length).toEqual(3);
});
it('Set style as CSS', () => {
var editor = obj.init(config);
editor.setStyle(cssString);
editor.setStyle(cssString);
var styles = editor.getStyle();
expect(styles.length).toEqual(2);
expect(styles.at(1).get('selectors').at(0).get('name')).toEqual('test3');
});
it('Set style as as array of objects', () => {
var editor = obj.init(config);
editor.setStyle([
{selectors: ['test4']},
{selectors: ['test5']}
]);
var styles = editor.getStyle();
expect(styles.length).toEqual(2);
expect(styles.at(1).get('selectors').at(0).get('name')).toEqual('test5');
});
it.skip('Adds new storage as plugin and store data there', done => {
var pluginName = storageId + '-plugin';
obj.plugins.add(pluginName, edt => {
edt.StorageManager.add(storageId, storageMock);
});
config.storageManager.type = storageId;
config.plugins = [pluginName];
var editor = obj.init(config);
editor.setComponents(htmlString);
editor.store(() => {
editor.load((data) => {
expect(data.html).toEqual(htmlString);
done();
});
});
});
it('Execute plugins with custom options', () => {
var pluginName = storageId + '-plugin-opts';
obj.plugins.add(pluginName, (edt, opts) => {
var opts = opts || {};
edt.customValue = opts.cVal || '';
});
config.plugins = [pluginName];
config.pluginsOpts = {};
config.pluginsOpts[pluginName] = {cVal: 'TEST'};
var editor = obj.init(config);
expect(editor.customValue).toEqual('TEST');
});
it('Execute custom command', () => {
var editor = obj.init(config);
editor.testVal = '';
editor.setComponents(htmlString);
editor.Commands.add('test-command', {
run(ed, caller, opts) {
ed.testVal = ed.getHtml() + opts.val;
},
});
editor.runCommand('test-command', {val: 5});
expect(editor.testVal).toEqual(htmlString + '5');
});
it('Stop custom command', () => {
var editor = obj.init(config);
editor.testVal = '';
editor.setComponents(htmlString);
editor.Commands.add('test-command', {
stop(ed, caller, opts) {
ed.testVal = ed.getHtml() + opts.val;
},
});
editor.stopCommand('test-command', {val: 5});
expect(editor.testVal).toEqual(htmlString + '5');
});
it('Set default devices', () => {
config.deviceManager = {};
config.deviceManager.devices = [
{name:'1', width: '2'},
{name:'3', width: '4'},
];
var editor = obj.init(config);
expect(editor.DeviceManager.getAll().length).toEqual(2);
});
it('There is no active device', () => {
var editor = obj.init(config);
expect(editor.getDevice()).toNotExist();
});
it('Active another device', () => {
var editor = obj.init(config);
editor.setDevice('Tablet');
expect(editor.getDevice()).toEqual('Tablet');
});
// Problems with iframe loading
it('Init new editor with custom plugin overrides default commands', () => {
var editor,
pluginName = 'test-plugin-opts';
obj.plugins.add(pluginName, (edt, opts) => {
let cmdm = edt.Commands;
// Overwrite export template
cmdm.add('export-template', {test: 1});
});
config.plugins = [pluginName];
editor = obj.init(config);
expect(editor.Commands.get('export-template').test).toEqual(1);
});
});
});