Skip to content

Commit

Permalink
feat(RouterStore): serialize routeConfig inside the default serializer
Browse files Browse the repository at this point in the history
  • Loading branch information
timdeschryver committed Oct 28, 2018
1 parent a9bc070 commit 5b2b44c
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 3 deletions.
101 changes: 101 additions & 0 deletions modules/router-store/spec/serializer.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import { RouterStateSnapshot } from '@angular/router';
import { DefaultRouterStateSerializer } from '../src';

describe('serializer', () => {
it('should serialize all properties', () => {
const serializer = new DefaultRouterStateSerializer();
const snapshot = createSnapshot();
const routerState = {
url: 'url',
root: snapshot,
} as RouterStateSnapshot;

const actual = serializer.serialize(routerState);
const expected = {
url: 'url',
root: createExpectedSnapshot(),
};
expect(actual).toEqual(expected);
});

it('should serialize with an empty routeConfig', () => {
const serializer = new DefaultRouterStateSerializer();
const snapshot = { ...createSnapshot(), routeConfig: null };
const routerState = {
url: 'url',
root: snapshot,
} as RouterStateSnapshot;

const actual = serializer.serialize(routerState);
const expected = {
url: 'url',
root: {
...createExpectedSnapshot(),
routeConfig: null,
component: undefined,
},
};
expect(actual).toEqual(expected);
});

it('should serialize children', () => {
const serializer = new DefaultRouterStateSerializer();
const snapshot = {
...createSnapshot(),
children: [createSnapshot('child')],
};
const routerState = {
url: 'url',
root: snapshot,
} as RouterStateSnapshot;

const actual = serializer.serialize(routerState);

const expected = {
url: 'url',
root: {
...createExpectedSnapshot(),
firstChild: createExpectedSnapshot('child'),
children: [createExpectedSnapshot('child')],
},
};

expect(actual).toEqual(expected);
});

function createSnapshot(prefix = 'root'): any {
return {
params: `${prefix}-route.params`,
paramMap: `${prefix}-route.paramMap`,
data: `${prefix}-route.data`,
url: `${prefix}-route.url`,
outlet: `${prefix}-route.outlet`,
routeConfig: {
component: `${prefix}-route.routeConfig.component`,
path: `${prefix}-route.routeConfig.path`,
pathMatch: `${prefix}-route.routeConfig.pathMatch`,
redirectTo: `${prefix}-route.routeConfig.redirectTo`,
outlet: `${prefix}-route.routeConfig.outlet`,
},
queryParams: `${prefix}-route.queryParams`,
queryParamMap: `${prefix}-route.queryParamMap`,
fragment: `${prefix}-route.fragment`,
root: `${prefix}-route.root`,
parent: `${prefix}-route.parent`,
pathFromRoot: `${prefix}-route.params`,
firstChild: null,
children: [],
};
}

function createExpectedSnapshot(prefix = 'root') {
return {
...createSnapshot(prefix),
component: `${prefix}-route.routeConfig.component`,
root: undefined,
parent: undefined,
firstChild: undefined,
pathFromRoot: undefined,
};
}
});
12 changes: 9 additions & 3 deletions modules/router-store/src/serializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,15 @@ export class DefaultRouterStateSerializer
data: route.data,
url: route.url,
outlet: route.outlet,
routeConfig: {
component: route.routeConfig ? route.routeConfig.component : undefined,
},
routeConfig: route.routeConfig
? {
component: route.routeConfig.component,
path: route.routeConfig.path,
pathMatch: route.routeConfig.pathMatch,
redirectTo: route.routeConfig.redirectTo,
outlet: route.routeConfig.outlet,
}
: null,
queryParams: route.queryParams,
queryParamMap: route.queryParamMap,
fragment: route.fragment,
Expand Down

0 comments on commit 5b2b44c

Please sign in to comment.