import grapesjs, { Editor } from '../../../../src'; import { CssRuleJSON } from '../../../../src/css_composer/model/CssRule'; import { createEl } from '../../../../src/utils/dom'; describe('E2E tests', () => { let fixtures: Element; let fixture: Element; let cssc: Editor['Css']; let clsm: Editor['Selectors']; let domc: Editor['Components']; let rulesSet: CssRuleJSON[]; let rulesSet2: CssRuleJSON[]; beforeAll(() => { document.body.innerHTML = '
'; fixtures = document.body.firstElementChild!; }); beforeEach((done) => { const gjs = grapesjs.init({ stylePrefix: '', storageManager: { autoload: false, type: 'none' }, container: 'csscomposer-fixture', }); cssc = gjs.CssComposer; clsm = gjs.SelectorManager; domc = gjs.DomComponents; fixture = createEl('div', { class: 'csscomposer-fixture' }); fixtures.appendChild(fixture); rulesSet = [ { selectors: [{ name: 'test1' }, { name: 'test2' }] }, { selectors: [{ name: 'test2' }, { name: 'test3' }] }, { selectors: [{ name: 'test3' }] }, ]; rulesSet2 = [ { selectors: [{ name: 'test1' }, { name: 'test2' }], state: ':active', }, { selectors: [{ name: 'test2' }, { name: 'test3' }] }, { selectors: [{ name: 'test3' }], mediaText: '(max-width: 900px)' }, ]; done(); }); afterAll(() => { fixture.remove(); }); test('Rules are correctly imported from default property', () => { const gj = grapesjs.init({ stylePrefix: '', storageManager: { autoload: false, type: 'none' }, cssComposer: { rules: rulesSet as any }, container: 'csscomposer-fixture', }); const cssc = gj.editor.get('CssComposer'); expect(cssc.getAll().length).toEqual(rulesSet.length); const cls = gj.editor.get('SelectorManager').getAll(); expect(cls.length).toEqual(3); }); test('New rule adds correctly the class inside selector manager', () => { const rules = cssc.getAll(); rules.add({ selectors: [{ name: 'test1', private: true }] }); const rule = clsm.getAll().at(0); expect(rule.get('name')).toEqual('test1'); expect(rule.get('private')).toEqual(true); }); test('New rules are correctly imported inside selector manager', () => { const rules = cssc.getAll(); rulesSet.forEach((item) => { rules.add(item); }); const cls = clsm.getAll(); expect(cls.length).toEqual(3); expect(cls.at(0).get('name')).toEqual('test1'); expect(cls.at(1).get('name')).toEqual('test2'); expect(cls.at(2).get('name')).toEqual('test3'); }); test('Add rules from the new component added as a string with style tag', () => { const comps = domc.getComponents(); const rules = cssc.getAll(); comps.add('