123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import * as SimpleLayouts from './SimpleLayouts';
- import LayoutTreeParser from './LayoutTreeParser';
- import LayoutTreeCrawler from './LayoutTreeCrawler';
- import Store from '../containers/Store';
- import UniqueIdProvider from '../adapters/UniqueIdProvider.mock';
- import NativeCommandsSender from '../adapters/NativeCommandsSender.mock';
-
- import AppCommands from './AppCommands';
-
- describe('AppCommands', () => {
- let uut;
- let mockCommandsSender;
- let store;
-
- beforeEach(() => {
- mockCommandsSender = new NativeCommandsSender();
- store = new Store();
-
- uut = new AppCommands(mockCommandsSender, new LayoutTreeParser(), new LayoutTreeCrawler(new UniqueIdProvider(), store));
- });
-
- describe('setRoot', () => {
- it('sends setRoot to native after parsing into a correct layout tree', () => {
- uut.setRoot({
- container: {
- name: 'com.example.MyScreen'
- }
- });
- expect(mockCommandsSender.setRoot).toHaveBeenCalledTimes(1);
- expect(mockCommandsSender.setRoot).toHaveBeenCalledWith({
- type: 'ContainerStack',
- id: 'ContainerStack+UNIQUE_ID',
- data: {},
- children: [
- {
- type: 'Container',
- id: 'Container+UNIQUE_ID',
- children: [],
- data: {
- name: 'com.example.MyScreen'
- }
- }
- ]
- });
- });
-
- it('deep clones input to avoid mutation errors', () => {
- const obj = {};
- uut.setRoot({ container: { inner: obj } });
- expect(mockCommandsSender.setRoot.mock.calls[0][0].children[0].data.inner).not.toBe(obj);
- });
-
- it('passProps into containers', () => {
- expect(store.getPropsForContainerId('Container+UNIQUE_ID')).toEqual({});
- uut.setRoot(SimpleLayouts.singleScreenWithAditionalParams);
- expect(store.getPropsForContainerId('Container+UNIQUE_ID')).toEqual(SimpleLayouts.passProps);
- });
-
- it('returns a promise with the resolved layout', async () => {
- mockCommandsSender.setRoot.mockReturnValue(Promise.resolve('the resolved layout'));
- const result = await uut.setRoot({ container: { name: 'com.example.MyScreen' } });
- expect(result).toEqual('the resolved layout');
- });
- });
- });
|