Files
vercel/packages/routing-utils/test/append.spec.ts
Tobias Lins 4f8f8a5b98 [routing-utils] Allow to appendRoutes add null phase (#8814)
For Analytics V2 we need to append routes to the `null` phase instead of
`filesystem`.
2022-11-01 11:17:50 -04:00

204 lines
6.2 KiB
TypeScript
Vendored

import { deepEqual } from 'assert';
import { appendRoutesToPhase } from '../src/append';
import { Route } from '../src/types';
test('appendRoutesToPhase `routes=null` and `newRoutes=[]`', () => {
const routes = null;
const newRoutes: Route[] = [];
const phase = 'filesystem';
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected: Route[] = [];
deepEqual(actual, expected);
});
test('appendRoutesToPhase `routes=null` and one `newRoutes`', () => {
const routes = null;
const newRoutes = [{ src: '/foo', dest: '/bar' }];
const phase = 'filesystem';
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = [{ handle: 'filesystem' }, ...newRoutes];
deepEqual(actual, expected);
});
test('appendRoutesToPhase `routes=[]` and `newRoutes=null`', () => {
const routes: Route[] = [];
const newRoutes = null;
const phase = 'filesystem';
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected: Route[] = [];
deepEqual(actual, expected);
});
test('appendRoutesToPhase `routes=[]` and `newRoutes=[]`', () => {
const routes: Route[] = [];
const newRoutes: Route[] = [];
const phase = 'filesystem';
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected: Route[] = [];
deepEqual(actual, expected);
});
test('appendRoutesToPhase one routes, zero newRoutes', () => {
const routes = [{ src: '/foo', dest: '/bar' }];
const newRoutes: Route[] = [];
const phase = 'filesystem';
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = routes;
deepEqual(actual, expected);
});
test('appendRoutesToPhase zero routes, one newRoutes', () => {
const routes: Route[] = [];
const newRoutes = [{ src: '/foo', dest: '/bar' }];
const phase = 'filesystem';
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = [{ handle: 'filesystem' }, ...newRoutes];
deepEqual(actual, expected);
});
test('appendRoutesToPhase two routes in phase', () => {
const routes: Route[] = [
{ handle: 'filesystem' },
{ src: '/first', dest: '/one' },
];
const newRoutes = [{ src: '/new', dest: '/to' }];
const phase = 'filesystem';
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = [
{ handle: 'filesystem' },
{ src: '/first', dest: '/one' },
{ src: '/new', dest: '/to' },
];
deepEqual(actual, expected);
});
test('appendRoutesToPhase two routes out of phase', () => {
const routes: Route[] = [
{ handle: 'resource' },
{ src: '/first', dest: '/one' },
];
const newRoutes = [{ src: '/new', dest: '/to' }];
const phase = 'filesystem';
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = [
{ handle: 'resource' },
{ src: '/first', dest: '/one' },
{ handle: 'filesystem' },
{ src: '/new', dest: '/to' },
];
deepEqual(actual, expected);
});
test('appendRoutesToPhase one routes before, two routes in phase', () => {
const routes: Route[] = [
{ src: '/first', dest: '/one' },
{ handle: 'filesystem' },
{ src: '/second', dest: '/two' },
];
const newRoutes = [{ src: '/new', dest: '/to' }];
const phase = 'filesystem';
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = [
{ src: '/first', dest: '/one' },
{ handle: 'filesystem' },
{ src: '/second', dest: '/two' },
{ src: '/new', dest: '/to' },
];
deepEqual(actual, expected);
});
test('appendRoutesToPhase one routes before, two routes in phase, two routes in different phase', () => {
const routes: Route[] = [
{ src: '/first', dest: '/one' },
{ handle: 'filesystem' },
{ src: '/second', dest: '/two' },
{ handle: 'miss' },
{ src: '/third', dest: '/three' },
];
const newRoutes = [{ src: '/new', dest: '/to' }];
const phase = 'filesystem';
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = [
{ src: '/first', dest: '/one' },
{ handle: 'filesystem' },
{ src: '/second', dest: '/two' },
{ src: '/new', dest: '/to' },
{ handle: 'miss' },
{ src: '/third', dest: '/three' },
];
deepEqual(actual, expected);
});
test('appendRoutesToPhase to null phase', () => {
const routes: Route[] = [
{ src: '/first', dest: '/one' },
{ src: '/second', dest: '/two' },
{ handle: 'filesystem' },
{ src: '/third', dest: '/three' },
];
const newRoutes = [{ src: '/new', dest: '/to' }];
const phase = null;
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = [
{ src: '/first', dest: '/one' },
{ src: '/second', dest: '/two' },
{ src: '/new', dest: '/to' },
{ handle: 'filesystem' },
{ src: '/third', dest: '/three' },
];
deepEqual(actual, expected);
});
test('appendRoutesToPhase to null phase with no handle', () => {
const routes: Route[] = [
{ src: '/first', dest: '/one' },
{ src: '/second', dest: '/two' },
];
const newRoutes = [{ src: '/new', dest: '/to' }];
const phase = null;
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = [
{ src: '/first', dest: '/one' },
{ src: '/second', dest: '/two' },
{ src: '/new', dest: '/to' },
];
deepEqual(actual, expected);
});
test('appendRoutesToPhase to null phase with two new routes ', () => {
const routes: Route[] = [
{ src: '/first', dest: '/one' },
{ src: '/second', dest: '/two' },
{ handle: 'filesystem' },
{ src: '/third', dest: '/three' },
];
const newRoutes = [
{ src: '/new1', dest: '/to1' },
{ src: '/new2', dest: '/to2' },
];
const phase = null;
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = [
{ src: '/first', dest: '/one' },
{ src: '/second', dest: '/two' },
{ src: '/new1', dest: '/to1' },
{ src: '/new2', dest: '/to2' },
{ handle: 'filesystem' },
{ src: '/third', dest: '/three' },
];
deepEqual(actual, expected);
});
test('appendRoutesToPhase to null phase `routes=[]`', () => {
const routes: Route[] = [];
const newRoutes = [{ src: '/new', dest: '/to' }];
const phase = null;
const actual = appendRoutesToPhase({ routes, newRoutes, phase });
const expected = [{ src: '/new', dest: '/to' }];
deepEqual(actual, expected);
});