react-native-navigation
Version:
React Native Navigation - truly native navigation for iOS and Android
82 lines (81 loc) • 2.41 kB
JavaScript
;
import { LayoutType } from "./LayoutType.js";
import { LayoutTreeCrawler } from "./LayoutTreeCrawler.js";
import { Store } from "../components/Store.js";
import { mock, instance, verify, deepEqual, when } from 'ts-mockito';
import { OptionsProcessor } from "./OptionsProcessor.js";
import { CommandName } from "../interfaces/CommandName.js";
describe('LayoutTreeCrawler', () => {
let uut;
let mockedStore;
let mockedOptionsProcessor;
beforeEach(() => {
mockedStore = mock(Store);
mockedOptionsProcessor = mock(OptionsProcessor);
uut = new LayoutTreeCrawler(instance(mockedStore), instance(mockedOptionsProcessor));
});
it('saves passProps into store for Component nodes', () => {
const node = {
id: 'testId',
type: LayoutType.BottomTabs,
children: [{
id: 'testId',
type: LayoutType.Component,
data: {
name: 'the name',
passProps: {
myProp: 123
}
},
children: []
}],
data: {}
};
uut.crawl(node, CommandName.SetRoot);
verify(mockedStore.setPendingProps('testId', deepEqual({
myProp: 123
}))).called();
});
it('Components: must contain data name', () => {
const node = {
type: LayoutType.Component,
data: {},
children: [],
id: 'testId'
};
expect(() => uut.crawl(node, CommandName.SetRoot)).toThrowError('Missing component data.name');
});
it('Components: omits passProps after processing so they are not passed over the bridge', () => {
const node = {
id: 'testId',
type: LayoutType.Component,
data: {
name: 'compName',
passProps: {
someProp: 'here'
}
},
children: []
};
uut.crawl(node, CommandName.SetRoot);
expect(node.data.passProps).toBeUndefined();
});
it('pass props to option processor', () => {
const passProps = {
someProp: 'here'
};
when(mockedStore.getPropsForId('testId')).thenReturn(passProps);
const node = {
id: 'testId',
type: LayoutType.Component,
data: {
name: 'compName',
passProps
},
children: []
};
uut.crawl(node, CommandName.SetRoot);
verify(mockedOptionsProcessor.processOptions(CommandName.SetRoot, undefined, deepEqual(passProps))).called();
});
});
//# sourceMappingURL=LayoutTreeCrawler.test.js.map