mirror of https://github.com/artf/grapesjs.git
3 changed files with 170 additions and 15 deletions
@ -0,0 +1,111 @@ |
|||
import Editor from '../../../src/editor'; |
|||
import EditorModel from '../../../src/editor/model/Editor'; |
|||
import ComponentWrapper from '../../../src/dom_components/model/ComponentWrapper'; |
|||
|
|||
describe('Pages with same component ids across pages', () => { |
|||
let editor: Editor; |
|||
let em: EditorModel; |
|||
let pm: Editor['Pages']; |
|||
let domc: Editor['Components']; |
|||
const getTitle = (wrapper: ComponentWrapper) => wrapper.components().at(0)!.components().at(0)!; |
|||
|
|||
beforeAll(() => { |
|||
editor = new Editor({ |
|||
pageManager: { |
|||
pages: [ |
|||
{ |
|||
id: 'p1', |
|||
frames: [ |
|||
{ |
|||
component: { |
|||
type: 'wrapper', |
|||
attributes: { id: 'body' }, |
|||
components: [ |
|||
{ |
|||
tagName: 'section', |
|||
components: [ |
|||
{ |
|||
tagName: 'h1', |
|||
type: 'text', |
|||
attributes: { id: 'main-title' }, |
|||
components: [{ type: 'textnode', content: 'A' }], |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
}, |
|||
}, |
|||
], |
|||
}, |
|||
{ |
|||
id: 'p2', |
|||
frames: [ |
|||
{ |
|||
component: { |
|||
type: 'wrapper', |
|||
attributes: { id: 'body' }, |
|||
components: [ |
|||
{ |
|||
tagName: 'section', |
|||
components: [ |
|||
{ |
|||
tagName: 'h1', |
|||
type: 'text', |
|||
attributes: { id: 'main-title' }, |
|||
components: [{ type: 'textnode', content: 'B' }], |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
}, |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
}, |
|||
}); |
|||
|
|||
em = editor.getModel(); |
|||
pm = em.Pages; |
|||
domc = em.Components; |
|||
pm.onLoad(); |
|||
}); |
|||
|
|||
afterAll(() => { |
|||
editor.destroy(); |
|||
}); |
|||
|
|||
test('Handles pages with components having the same id across pages', () => { |
|||
const pages = pm.getAll(); |
|||
expect(pages.length).toBe(2); |
|||
|
|||
const p1 = pages[0]; |
|||
const p2 = pages[1]; |
|||
|
|||
const w1 = p1.getMainComponent(); |
|||
const w2 = p2.getMainComponent(); |
|||
|
|||
expect(w1.getId()).toBe('body'); |
|||
expect(w2.getId()).toBe('body'); |
|||
|
|||
const t1 = getTitle(w1); |
|||
const t2 = getTitle(w2); |
|||
|
|||
// IDs should be preserved per page but stored uniquely in the shared map
|
|||
expect(t1.getId()).toBe('main-title'); |
|||
expect(t2.getId()).toBe('main-title'); |
|||
|
|||
const all = domc.allById(); |
|||
|
|||
expect(all['body']).toBe(w1); |
|||
expect(all['body-2']).toBe(w2); |
|||
expect(all['main-title']).toBe(t1); |
|||
expect(all['main-title-2']).toBe(t2); |
|||
|
|||
const html1 = editor.getHtml({ component: w1 }); |
|||
const html2 = editor.getHtml({ component: w2 }); |
|||
|
|||
expect(html1).toContain('A'); |
|||
expect(html2).toContain('B'); |
|||
}); |
|||
}); |
|||
Loading…
Reference in new issue