test: add tests for BaseRouter

This commit is contained in:
satyajit.happy
2019-08-11 01:47:29 +05:30
parent 81e795dea8
commit d00d7d4c1e

View File

@@ -0,0 +1,133 @@
import BaseRouter from '../BaseRouter';
import * as BaseActions from '../BaseActions';
jest.mock('shortid', () => () => 'test');
const STATE = {
key: 'root',
index: 1,
routes: [
{ key: 'foo', name: 'foo' },
{ key: 'bar', name: 'bar', params: { fruit: 'orange' } },
{ key: 'baz', name: 'baz' },
],
routeNames: ['foo', 'bar', 'baz', 'qux'],
};
it('replaces focused screen with REPLACE', () => {
const result = BaseRouter.getStateForAction(
STATE,
BaseActions.replace('qux', { answer: 42 })
);
expect(result).toEqual({
key: 'root',
index: 1,
routes: [
{ key: 'foo', name: 'foo' },
{ key: 'qux-test', name: 'qux', params: { answer: 42 } },
{ key: 'baz', name: 'baz' },
],
routeNames: ['foo', 'bar', 'baz', 'qux'],
});
});
it('replaces source screen with REPLACE', () => {
const result = BaseRouter.getStateForAction(STATE, {
...BaseActions.replace('qux', { answer: 42 }),
source: 'baz',
});
expect(result).toEqual({
key: 'root',
index: 1,
routes: [
{ key: 'foo', name: 'foo' },
{ key: 'bar', name: 'bar', params: { fruit: 'orange' } },
{ key: 'qux-test', name: 'qux', params: { answer: 42 } },
],
routeNames: ['foo', 'bar', 'baz', 'qux'],
});
});
it("doesn't handle REPLACE if source key isn't present", () => {
const result = BaseRouter.getStateForAction(STATE, {
...BaseActions.replace('qux', { answer: 42 }),
source: 'magic',
});
expect(result).toBe(null);
});
it('sets params for the focused screen with SET_PARAMS', () => {
const result = BaseRouter.getStateForAction(
STATE,
BaseActions.setParams({ answer: 42 })
);
expect(result).toEqual({
key: 'root',
index: 1,
routes: [
{ key: 'foo', name: 'foo' },
{ key: 'bar', name: 'bar', params: { answer: 42, fruit: 'orange' } },
{ key: 'baz', name: 'baz' },
],
routeNames: ['foo', 'bar', 'baz', 'qux'],
});
});
it('sets params for the source screen with SET_PARAMS', () => {
const result = BaseRouter.getStateForAction(STATE, {
...BaseActions.setParams({ answer: 42 }),
source: 'foo',
});
expect(result).toEqual({
key: 'root',
index: 1,
routes: [
{ key: 'foo', name: 'foo', params: { answer: 42 } },
{ key: 'bar', name: 'bar', params: { fruit: 'orange' } },
{ key: 'baz', name: 'baz' },
],
routeNames: ['foo', 'bar', 'baz', 'qux'],
});
});
it("doesn't handle SET_PARAMS if source key isn't present", () => {
const result = BaseRouter.getStateForAction(STATE, {
...BaseActions.setParams({ answer: 42 }),
source: 'magic',
});
expect(result).toBe(null);
});
it('resets state to new state with RESET', () => {
const routes = [
{ key: 'foo', name: 'foo' },
{ key: 'bar', name: 'bar', params: { fruit: 'orange' } },
{ key: 'baz', name: 'baz' },
{ key: 'qux-1', name: 'qux' },
];
const result = BaseRouter.getStateForAction(
STATE,
BaseActions.reset({
index: 0,
routes,
})
);
expect(result).toEqual({ ...STATE, index: 0, routes });
});
it('ignores key and routeNames when resetting with RESET', () => {
const result = BaseRouter.getStateForAction(
STATE,
BaseActions.reset({ index: 2, key: 'foo', routeNames: ['test'] })
);
expect(result).toEqual({ ...STATE, index: 2 });
});