Files
vercel/packages/remix/test/unit.get-regexp-from-path.test.ts

214 lines
3.9 KiB
TypeScript
Vendored

import { getRegExpFromPath } from '../src/utils';
describe('getRegExpFromPath()', () => {
describe('paths without parameters', () => {
it.each([
{ path: '/index' },
{ path: '/api/hello' },
{ path: '/projects' },
])('should return `false` for "$path"', ({ path }) => {
expect(getRegExpFromPath(path)).toEqual(false);
});
});
describe.each([
{
path: '/:params*',
urls: [
{
url: '/',
expected: true,
},
{
url: '/foo',
expected: true,
},
{
url: '/projects/foo',
expected: true,
},
{
url: '/projects/another',
expected: true,
},
{
url: '/to/infinity/and/beyond',
expected: true,
},
],
},
{
path: '/projects/:params*',
urls: [
{
url: '/',
expected: false,
},
{
url: '/foo',
expected: false,
},
{
url: '/projects',
expected: true,
},
{
url: '/projects/',
expected: true,
},
{
url: '/projects/foo',
expected: true,
},
{
url: '/projects/foo/another',
expected: true,
},
],
},
{
path: '/:foo',
urls: [
{
url: '/',
expected: false,
},
{
url: '/foo',
expected: true,
},
{
url: '/projects/foo',
expected: false,
},
{
url: '/projects/another',
expected: false,
},
],
},
{
path: '/blog/:id/edit',
urls: [
{
url: '/',
expected: false,
},
{
url: '/foo',
expected: false,
},
{
url: '/blog/123/edit',
expected: true,
},
{
url: '/blog/456/edit',
expected: true,
},
{
url: '/blog/123/456/edit',
expected: false,
},
{
url: '/blog/123/another',
expected: false,
},
],
},
{
path: '/:lang?',
urls: [
{
url: '/',
expected: true,
},
{
url: '/en',
expected: true,
},
{
url: '/en/other',
expected: false,
},
],
},
{
path: '/:lang?/other',
urls: [
{
url: '/other',
expected: true,
},
{
url: '/en/other',
expected: true,
},
{
url: '/',
expected: false,
},
{
url: '/another',
expected: false,
},
],
},
{
path: '/:lang?/:pid',
urls: [
{
url: '/123',
expected: true,
},
{
url: '/en/123',
expected: true,
},
{
url: '/',
expected: false,
},
{
url: '/en/foo/bar',
expected: false,
},
],
},
{
path: '/admin/(lol)?',
urls: [
{
url: '/admin',
expected: true,
},
{
url: '/admin/lol',
expected: true,
},
{
url: '/other',
expected: false,
},
{
url: '/admin/other',
expected: false,
},
],
},
])('with path "$path"', ({ path, urls }) => {
const re = getRegExpFromPath(path) as RegExp;
it('should return RegExp', () => {
expect(re).toBeInstanceOf(RegExp);
});
it.each(urls)(
'should match URL "$url" - $expected',
({ url, expected }) => {
expect(re.test(url)).toEqual(expected);
}
);
});
});