diff --git a/packages/core/test/specs/dom_components/model/ComponentWrapper.ts b/packages/core/test/specs/dom_components/model/ComponentWrapper.ts index 9706bd389..0a91db26e 100644 --- a/packages/core/test/specs/dom_components/model/ComponentWrapper.ts +++ b/packages/core/test/specs/dom_components/model/ComponentWrapper.ts @@ -1,6 +1,11 @@ +import { DataSourceManager, DataSource, DataRecord } from '../../../../src'; +import { DataVariableProps, DataVariableType } from '../../../../src/data_sources/model/DataVariable'; import Component from '../../../../src/dom_components/model/Component'; import ComponentHead from '../../../../src/dom_components/model/ComponentHead'; +import ComponentWrapper from '../../../../src/dom_components/model/ComponentWrapper'; import Editor from '../../../../src/editor'; +import EditorModel from '../../../../src/editor/model/Editor'; +import { setupTestEditor } from '../../../common'; describe('ComponentWrapper', () => { let em: Editor; @@ -33,4 +38,72 @@ describe('ComponentWrapper', () => { expect(newPageComponent?.head.cid).not.toEqual(originalComponent?.head.cid); }); }); + + describe('ComponentWrapper with DataResolver', () => { + let em: EditorModel; + let dsm: DataSourceManager; + let dataSource: DataSource; + let wrapper: ComponentWrapper; + let firstRecord: DataRecord; + + const records = [ + { + id: 'pages', + data: [ + { id: 'page1', page: 'page1', title: 'Title1', content: 'content 1' }, + { id: 'page2', page: 'page2', title: 'Title2', content: 'content 2' }, + { id: 'page3', page: 'page3', title: 'Title3', content: 'content 3' }, + ], + }, + ]; + + beforeEach(() => { + ({ em, dsm } = setupTestEditor()); + wrapper = em.getWrapper() as ComponentWrapper; + + dataSource = dsm.add({ + id: 'my_data_source_id', + records, + }); + + firstRecord = dataSource.getRecord('page1')!; + }); + + afterEach(() => { + em.destroy(); + }); + + function createDataResolver(path: string): DataVariableProps { + return { + type: DataVariableType, + path, + }; + } + + test('sets dataResolver and updates wrapper.page/head collectionsStateMap', () => { + wrapper.setDataResolver(createDataResolver('my_data_source_id.pages.data')); + const stateMap = wrapper.collectionsStateMap; + + expect(stateMap).toHaveProperty('__pages'); + expect(wrapper.page?.collectionsStateMap).toEqual(stateMap); + expect(wrapper.head.collectionsStateMap).toEqual(stateMap); + }); + + test('children reflect resolved value from dataResolver', () => { + wrapper.setDataResolver(createDataResolver('my_data_source_id.pages.data')); + const child = wrapper.append({ + type: 'default', + })[0]; + expect(child.collectionsStateMap).toEqual(wrapper.collectionsStateMap); + }); + + test('updating record propagates to children', () => { + wrapper.setDataResolver(createDataResolver('my_data_source_id.pages.data')); + const child = wrapper.append({ + type: 'default', + })[0]; + + expect(child.collectionsStateMap).toEqual(wrapper.collectionsStateMap); + }); + }); });