You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.9 KiB
TypeScript

import { RouteResolver } from './routes';
const routes = {
home: '',
post: {
_base: 'post',
_id: {
_base: ':postId',
comment: 'comment/:commentId',
revision: 'history/:revisionId/:someOtherVar/test',
},
},
};
const routeResolver = new RouteResolver(routes);
it('translating routes', () => {
// Working basic resolves
expect(routeResolver.getRoute('home')).toBe('/');
expect(routeResolver.getRoute('post')).toBe('/post');
expect(routeResolver.getRoute('post._id')).toBe('/post/:postId');
expect(routeResolver.getRoute('post._id.comment')).toBe('/post/:postId/comment/:commentId');
// Working translation resolves
expect(routeResolver.getRoute('home')).toBe('/');
expect(routeResolver.getRoute('post')).toBe('/post');
expect(routeResolver.getRoute('post._id', { postId: 3 })).toBe('/post/3');
expect(routeResolver.getRoute('post._id.comment',
{ postId: 3, commentId: 5 })).toBe('/post/3/comment/5');
expect(routeResolver.getRoute('post._id.revision',
{ postId: 3, revisionId: 5, someOtherVar: 'a' })).toBe('/post/3/history/5/a/test');
// Failing basic resolves
expect(() => {
routeResolver.getRoute('bad');
}).toThrow();
expect(() => {
routeResolver.getRoute('home.bad');
}).toThrow();
expect(() => {
routeResolver.getRoute('post._id.bad');
}).toThrow();
// Failing translations
expect(() => {
routeResolver.getRoute('home', { test: 4 });
}).toThrow();
expect(() => {
routeResolver.getRoute('post._id', { test: 4 });
}).toThrow();
expect(() => {
routeResolver.getRoute('post._id', { postId: 3, test: 4 });
}).toThrow();
expect(() => {
routeResolver.getRoute('post._id.comment', { postId: 3, commentId: 5, test: 4 });
}).toThrow();
expect(() => {
routeResolver.getRoute('post._id.comment', { postId: 3 });
}).toThrow();
});