Browse Source

Add object test data for wrapper data resolver

pages-datasources
mohamedsalem401 1 year ago
parent
commit
6a71c87288
  1. 58
      packages/core/test/specs/dom_components/model/ComponentWrapper.ts

58
packages/core/test/specs/dom_components/model/ComponentWrapper.ts

@ -47,11 +47,12 @@ describe('ComponentWrapper', () => {
let wrapper: ComponentWrapper;
let firstRecord: DataRecord;
const pagesData = [
{ id: 'page1', title: 'Title1' },
{ id: 'page2', title: 'Title2' },
{ id: 'page3', title: 'Title3' },
];
const firstPageData = { id: 'page1', title: 'Title1' };
const pagesData = [firstPageData, { id: 'page2', title: 'Title2' }, { id: 'page3', title: 'Title3' }];
const objectData = {
page1: { title: 'page1' },
page2: { title: 'page2' },
};
beforeEach(() => {
({ em, dsm } = setupTestEditor());
@ -59,7 +60,13 @@ describe('ComponentWrapper', () => {
pagesDataSource = dsm.add({
id: 'pagesDataSource',
records: [{ id: 'pages', data: pagesData }],
records: [
{ id: 'pages', data: pagesData },
{
id: 'objectData',
data: objectData,
},
],
});
firstRecord = em.DataSources.get('pagesDataSource').getRecord('pages')!;
@ -74,36 +81,57 @@ describe('ComponentWrapper', () => {
path,
});
const setResolver = (path: string) => {
wrapper.setDataResolver(createDataResolver(path));
wrapper.resolverCurrentItem = 0;
};
const appendChildWithTitle = () =>
const appendChildWithTitle = (path: string = 'title') =>
wrapper.append({
type: 'default',
title: {
type: 'data-variable',
collectionId: keyRootData,
path: 'title',
path,
},
})[0];
test('sets dataResolver and updates wrapper.page/head collectionsStateMap', () => {
setResolver('pagesDataSource.pages.data');
wrapper.setDataResolver(createDataResolver('pagesDataSource.pages.data'));
wrapper.resolverCurrentItem = 0;
const stateMap = wrapper.collectionsStateMap;
expect(stateMap).toHaveProperty(keyRootData);
expect(wrapper.head.collectionsStateMap).toEqual(stateMap);
expect(wrapper.head.collectionsStateMap).toEqual({ [keyRootData]: firstPageData });
});
test('children reflect resolved value from dataResolver', () => {
setResolver('pagesDataSource.pages.data');
wrapper.setDataResolver(createDataResolver('pagesDataSource.pages.data'));
wrapper.resolverCurrentItem = 0;
const child = appendChildWithTitle();
expect(child.collectionsStateMap).toEqual({ [keyRootData]: firstPageData });
expect(child.get('title')).toBe(pagesData[0].title);
firstRecord.set('data', [{ id: 'page1', title: 'new_title' }]);
expect(child.get('title')).toBe('new_title');
});
test('children update collectionStateMap on wrapper.setDataResolver', () => {
const child = appendChildWithTitle();
wrapper.setDataResolver(createDataResolver('pagesDataSource.pages.data'));
wrapper.resolverCurrentItem = 0;
expect(child.collectionsStateMap).toEqual({ [keyRootData]: firstPageData });
expect(child.get('title')).toBe(pagesData[0].title);
firstRecord.set('data', [{ id: 'page1', title: 'new_title' }]);
expect(child.get('title')).toBe('new_title');
});
test('wrapper should handle objects as collection state ', () => {
wrapper.setDataResolver(createDataResolver('pagesDataSource.objectData.data'));
wrapper.resolverCurrentItem = 'page1';
const child = appendChildWithTitle('title');
expect(child.collectionsStateMap).toEqual({ [keyRootData]: objectData.page1 });
expect(child.get('title')).toBe(objectData.page1.title);
});
});
});

Loading…
Cancel
Save