rsnext/test/unit/page-route-sorter.test.js

109 lines
2.7 KiB
JavaScript
Raw Normal View History

/* eslint-env jest */
import { getSortedRoutes } from 'next/dist/next-server/lib/router/utils/sorted-routes'
describe('getSortedRoutes', () => {
it('does not add extra routes', () => {
expect(getSortedRoutes(['/posts'])).toEqual(['/posts'])
expect(getSortedRoutes(['/posts/[id]'])).toEqual(['/posts/[id]'])
expect(getSortedRoutes(['/posts/[id]/foo'])).toEqual(['/posts/[id]/foo'])
expect(getSortedRoutes(['/posts/[id]/[foo]/bar'])).toEqual([
'/posts/[id]/[foo]/bar',
])
expect(getSortedRoutes(['/posts/[id]/baz/[foo]/bar'])).toEqual([
'/posts/[id]/baz/[foo]/bar',
])
})
it('correctly sorts required slugs', () => {
expect(
getSortedRoutes([
'/posts',
'/[root-slug]',
'/',
'/posts/[id]',
'/blog/[id]/comments/[cid]',
'/blog/abc/[id]',
'/[...rest]',
'/blog/abc/post',
'/blog/abc',
'/p/[...rest]',
'/p2/[...rest]',
'/p2/[id]',
'/p2/[id]/abc',
'/blog/[id]',
'/foo/[d]/bar/baz/[f]',
'/apples/[ab]/[cd]/ef',
])
2020-05-18 00:30:30 +02:00
).toMatchInlineSnapshot(`
Array [
"/",
"/apples/[ab]/[cd]/ef",
"/blog/abc",
"/blog/abc/post",
"/blog/abc/[id]",
"/blog/[id]",
"/blog/[id]/comments/[cid]",
"/foo/[d]/bar/baz/[f]",
"/p/[...rest]",
"/p2/[id]",
"/p2/[id]/abc",
"/p2/[...rest]",
"/posts",
"/posts/[id]",
"/[root-slug]",
"/[...rest]",
]
`)
})
it('catches mismatched param names', () => {
expect(() =>
getSortedRoutes([
'/',
'/blog',
'/blog/[id]',
'/blog/[id]/comments/[cid]',
'/blog/[cid]',
])
).toThrowError(/different slug names/)
})
it('catches reused param names', () => {
expect(() =>
getSortedRoutes(['/', '/blog', '/blog/[id]/comments/[id]', '/blog/[id]'])
).toThrowError(/the same slug name/)
})
it('catches reused param names', () => {
expect(() =>
getSortedRoutes(['/blog/[id]', '/blog/[id]/[...id]'])
).toThrowError(/the same slug name/)
})
it('catches middle catch-all', () => {
expect(() => getSortedRoutes(['/blog/[...id]/[...id2]'])).toThrowError(
/must be the last part/
)
})
it('catches middle catch-all', () => {
expect(() => getSortedRoutes(['/blog/[...id]/abc'])).toThrowError(
/must be the last part/
)
})
it('catches extra dots in catch-all', () => {
expect(() => getSortedRoutes(['/blog/[....id]/abc'])).toThrowError(
/erroneous period/
)
})
it('catches missing dots in catch-all', () => {
expect(() => getSortedRoutes(['/blog/[..id]/abc'])).toThrowError(
/erroneous period/
)
})
})