Files
vercel/packages/routing-utils/test/merge.spec.js
Steven f5f07c5d15 [all] Remove more "now" references (#5944)
Follow up to #5928 to remove a few more "now" references and replace with "vercel" where appropriate.
2021-03-08 10:08:09 -05:00

422 lines
11 KiB
JavaScript
Vendored

const { deepStrictEqual } = require('assert');
const { mergeRoutes } = require('../dist/merge');
test('mergeRoutes simple', () => {
const userRoutes = [
{ src: '/user1', dest: '/u1' },
{ src: '/user2', dest: '/u2' },
];
const builds = [
{
use: '@vercel/node',
entrypoint: 'api/home.js',
routes: [
{ src: '/node1', dest: '/n1' },
{ src: '/node2', dest: '/n2' },
],
},
{
use: '@vercel/python',
entrypoint: 'api/users.py',
routes: [
{ src: '/python1', dest: '/py1' },
{ src: '/python2', dest: '/py2' },
],
},
];
const actual = mergeRoutes({ userRoutes, builds });
const expected = [
{ dest: '/u1', src: '/user1' },
{ dest: '/u2', src: '/user2' },
{ dest: '/n1', src: '/node1' },
{ dest: '/n2', src: '/node2' },
{ dest: '/py1', src: '/python1' },
{ dest: '/py2', src: '/python2' },
];
deepStrictEqual(actual, expected);
});
test('mergeRoutes handle filesystem user routes', () => {
const userRoutes = [
{ src: '/user1', dest: '/u1' },
{ handle: 'filesystem' },
{ src: '/user2', dest: '/u2' },
];
const builds = [
{
use: '@vercel/node',
entrypoint: 'api/home.js',
routes: [
{ src: '/node1', dest: '/n1' },
{ src: '/node2', dest: '/n2' },
],
},
{
use: '@vercel/python',
entrypoint: 'api/users.py',
routes: [
{ src: '/python1', dest: '/py1' },
{ src: '/python2', dest: '/py2' },
],
},
];
const actual = mergeRoutes({ userRoutes, builds });
const expected = [
{ dest: '/u1', src: '/user1' },
{ dest: '/n1', src: '/node1' },
{ dest: '/n2', src: '/node2' },
{ dest: '/py1', src: '/python1' },
{ dest: '/py2', src: '/python2' },
{ handle: 'filesystem' },
{ dest: '/u2', src: '/user2' },
];
deepStrictEqual(actual, expected);
});
test('mergeRoutes handle filesystem build routes', () => {
const userRoutes = [
{ src: '/user1', dest: '/u1' },
{ src: '/user2', dest: '/u2' },
];
const builds = [
{
use: '@vercel/node',
entrypoint: 'api/home.js',
routes: [
{ src: '/node1', dest: '/n1' },
{ handle: 'filesystem' },
{ src: '/node2', dest: '/n2' },
],
},
{
use: '@vercel/python',
entrypoint: 'api/users.py',
routes: [
{ src: '/python1', dest: '/py1' },
{ handle: 'filesystem' },
{ src: '/python2', dest: '/py2' },
],
},
];
const actual = mergeRoutes({ userRoutes, builds });
const expected = [
{ dest: '/u1', src: '/user1' },
{ dest: '/u2', src: '/user2' },
{ dest: '/n1', src: '/node1' },
{ dest: '/py1', src: '/python1' },
{ handle: 'filesystem' },
{ dest: '/n2', src: '/node2' },
{ dest: '/py2', src: '/python2' },
];
deepStrictEqual(actual, expected);
});
test('mergeRoutes handle filesystem both user and builds', () => {
const userRoutes = [
{ src: '/user1', dest: '/u1' },
{ handle: 'filesystem' },
{ src: '/user2', dest: '/u2' },
];
const builds = [
{
use: '@vercel/node',
entrypoint: 'api/home.js',
routes: [
{ src: '/node1', dest: '/n1' },
{ handle: 'filesystem' },
{ src: '/node2', dest: '/n2' },
],
},
{
use: '@vercel/python',
entrypoint: 'api/users.py',
routes: [
{ src: '/python1', dest: '/py1' },
{ handle: 'filesystem' },
{ src: '/python2', dest: '/py2' },
],
},
];
const actual = mergeRoutes({ userRoutes, builds });
const expected = [
{ dest: '/u1', src: '/user1' },
{ dest: '/n1', src: '/node1' },
{ dest: '/py1', src: '/python1' },
{ handle: 'filesystem' },
{ dest: '/u2', src: '/user2' },
{ dest: '/n2', src: '/node2' },
{ dest: '/py2', src: '/python2' },
];
deepStrictEqual(actual, expected);
});
test('mergeRoutes continue true', () => {
const userRoutes = [
{ src: '/user1', dest: '/u1' },
{ src: '/user2', dest: '/u2', continue: true },
{ src: '/user3', dest: '/u3' },
];
const builds = [
{
use: '@vercel/node',
entrypoint: 'api/home.js',
routes: [
{ src: '/node1', dest: '/n1' },
{ src: '/node3', dest: '/n2', continue: true },
{ src: '/node3', dest: '/n3' },
],
},
{
use: '@vercel/python',
entrypoint: 'api/users.py',
routes: [
{ src: '/python1', dest: '/py1' },
{ src: '/python2', dest: '/py2', continue: true },
{ src: '/python3', dest: '/py3' },
],
},
];
const actual = mergeRoutes({ userRoutes, builds });
const expected = [
{ continue: true, dest: '/n2', src: '/node3' },
{ continue: true, dest: '/py2', src: '/python2' },
{ dest: '/u1', src: '/user1' },
{ continue: true, dest: '/u2', src: '/user2' },
{ dest: '/u3', src: '/user3' },
{ dest: '/n1', src: '/node1' },
{ dest: '/n3', src: '/node3' },
{ dest: '/py1', src: '/python1' },
{ dest: '/py3', src: '/python3' },
];
deepStrictEqual(actual, expected);
});
test('mergeRoutes check true', () => {
const userRoutes = [
{ src: '/user1', dest: '/u1' },
{ src: '/user2', dest: '/u2' },
{ src: '/user3', dest: '/u3' },
];
const builds = [
{
use: '@vercel/node',
entrypoint: 'api/home.js',
routes: [
{ src: '/node1', dest: '/n1' },
{ src: '/node3', dest: '/n2', check: true },
{ src: '/node3', dest: '/n3' },
],
},
{
use: '@vercel/python',
entrypoint: 'api/users.py',
routes: [
{ src: '/python1', dest: '/py1' },
{ src: '/python2', dest: '/py2', check: true },
{ src: '/python3', dest: '/py3' },
],
},
];
const actual = mergeRoutes({ userRoutes, builds });
const expected = [
{ dest: '/u1', src: '/user1' },
{ dest: '/u2', src: '/user2' },
{ dest: '/u3', src: '/user3' },
{ check: true, dest: '/n2', src: '/node3' },
{ check: true, dest: '/py2', src: '/python2' },
{ dest: '/n1', src: '/node1' },
{ dest: '/n3', src: '/node3' },
{ dest: '/py1', src: '/python1' },
{ dest: '/py3', src: '/python3' },
];
deepStrictEqual(actual, expected);
});
test('mergeRoutes check true, continue true, handle filesystem middle', () => {
const userRoutes = [
{ src: '/user1', dest: '/u1', continue: true },
{ src: '/user2', dest: '/u2' },
{ handle: 'filesystem' },
{ src: '/user3', dest: '/u3' },
];
const builds = [
{
use: '@vercel/node',
entrypoint: 'api/home.js',
routes: [
{ src: '/node1', dest: '/n1', continue: true },
{ src: '/node3', dest: '/n2', check: true },
{ handle: 'filesystem' },
{ src: '/node3', dest: '/n3' },
],
},
{
use: '@vercel/python',
entrypoint: 'api/users.py',
routes: [
{ src: '/python1', dest: '/py1', check: true },
{ src: '/python2', dest: '/py2', continue: true },
{ handle: 'filesystem' },
{ src: '/python3', dest: '/py3' },
],
},
];
const actual = mergeRoutes({ userRoutes, builds });
const expected = [
{ continue: true, dest: '/n1', src: '/node1' },
{ continue: true, dest: '/py2', src: '/python2' },
{ continue: true, dest: '/u1', src: '/user1' },
{ dest: '/u2', src: '/user2' },
{ check: true, dest: '/n2', src: '/node3' },
{ check: true, dest: '/py1', src: '/python1' },
{ handle: 'filesystem' },
{ dest: '/u3', src: '/user3' },
{ dest: '/n3', src: '/node3' },
{ dest: '/py3', src: '/python3' },
];
deepStrictEqual(actual, expected);
});
test('mergeRoutes check true, continue true, handle filesystem top', () => {
const userRoutes = [{ handle: 'filesystem' }, { src: '/user1', dest: '/u1' }];
const builds = [
{
use: '@vercel/node',
entrypoint: 'api/home.js',
routes: [
{ handle: 'filesystem' },
{ src: '/node1', dest: '/n1' },
{ src: '/node2', dest: '/n2', continue: true },
{ src: '/node3', dest: '/n3', check: true },
],
},
{
use: '@vercel/python',
entrypoint: 'api/users.py',
routes: [
{ handle: 'filesystem' },
{ src: '/python1', dest: '/py1' },
{ src: '/python2', dest: '/py2', check: true },
{ src: '/python3', dest: '/py3', continue: true },
],
},
];
const actual = mergeRoutes({ userRoutes, builds });
const expected = [
{ handle: 'filesystem' },
{ continue: true, dest: '/n2', src: '/node2' },
{ continue: true, dest: '/py3', src: '/python3' },
{ dest: '/u1', src: '/user1' },
{ check: true, dest: '/n3', src: '/node3' },
{ check: true, dest: '/py2', src: '/python2' },
{ dest: '/n1', src: '/node1' },
{ dest: '/py1', src: '/python1' },
];
deepStrictEqual(actual, expected);
});
test('mergeRoutes multiple handle values', () => {
const userRoutes = [
{ handle: 'filesystem' },
{ src: '/user1', dest: '/u1' },
{ handle: 'miss' },
{ src: '/user2', dest: '/u2' },
{ handle: 'hit' },
{ src: '/user3', dest: '/u3' },
];
const builds = [
{
use: '@vercel/node',
entrypoint: 'api/home.js',
routes: [
{ handle: 'filesystem' },
{ src: '/node1', dest: '/n1' },
{ handle: 'hit' },
{ src: '/node2', dest: '/n2', continue: true },
{ handle: 'miss' },
{ src: '/node3', dest: '/n3', check: true },
],
},
{
use: '@vercel/python',
entrypoint: 'api/users.py',
routes: [
{ handle: 'filesystem' },
{ src: '/python1', dest: '/py1' },
{ handle: 'hit' },
{ src: '/python2', dest: '/py2', check: true },
{ handle: 'miss' },
{ src: '/python3', dest: '/py3', continue: true },
],
},
];
const actual = mergeRoutes({ userRoutes, builds });
const expected = [
{ handle: 'filesystem' },
{ dest: '/u1', src: '/user1' },
{ dest: '/n1', src: '/node1' },
{ dest: '/py1', src: '/python1' },
{ handle: 'miss' },
{ continue: true, dest: '/py3', src: '/python3' },
{ dest: '/u2', src: '/user2' },
{ check: true, dest: '/n3', src: '/node3' },
{ handle: 'hit' },
{ continue: true, dest: '/n2', src: '/node2' },
{ dest: '/u3', src: '/user3' },
{ check: true, dest: '/py2', src: '/python2' },
];
deepStrictEqual(actual, expected);
});
test('mergeRoutes ensure `handle: error` comes last', () => {
const userRoutes = [];
const builds = [
{
use: '@vercel/static-build',
entrypoint: 'packge.json',
routes: [
{
src: '^/home$',
status: 301,
headers: {
Location: '/',
},
},
],
},
{
use: '@vercel/zero-config-routes',
entrypoint: '/',
routes: [
{
handle: 'error',
},
{
status: 404,
src: '^/(?!.*api).*$',
dest: '404.html',
},
],
},
];
const actual = mergeRoutes({ userRoutes, builds });
const expected = [
{
status: 301,
src: '^/home$',
headers: {
Location: '/',
},
},
{
handle: 'error',
},
{
status: 404,
src: '^/(?!.*api).*$',
dest: '404.html',
},
];
deepStrictEqual(actual, expected);
});