diff options
Diffstat (limited to 'packages/astro/test/units/routing/generator.test.js')
-rw-r--r-- | packages/astro/test/units/routing/generator.test.js | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/packages/astro/test/units/routing/generator.test.js b/packages/astro/test/units/routing/generator.test.js new file mode 100644 index 000000000..d176c73eb --- /dev/null +++ b/packages/astro/test/units/routing/generator.test.js @@ -0,0 +1,152 @@ +import * as assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; + +import { getRouteGenerator } from '../../../dist/core/routing/manifest/generator.js'; + +describe('routing - generator', () => { + [ + { + routeData: [], + trailingSlash: 'never', + params: {}, + path: '/', + }, + { + routeData: [], + trailingSlash: 'always', + params: {}, + path: '/', + }, + { + routeData: [[{ spread: false, content: 'test', dynamic: false }]], + trailingSlash: 'never', + params: {}, + path: '/test', + }, + { + routeData: [[{ spread: false, content: 'test', dynamic: false }]], + trailingSlash: 'always', + params: {}, + path: '/test/', + }, + { + routeData: [[{ spread: false, content: 'test', dynamic: false }]], + trailingSlash: 'always', + params: { foo: 'bar' }, + path: '/test/', + }, + { + routeData: [[{ spread: false, content: 'foo', dynamic: true }]], + trailingSlash: 'always', + params: { foo: 'bar' }, + path: '/bar/', + }, + { + routeData: [[{ spread: false, content: 'foo', dynamic: true }]], + trailingSlash: 'never', + params: { foo: 'bar' }, + path: '/bar', + }, + { + routeData: [[{ spread: true, content: '...foo', dynamic: true }]], + trailingSlash: 'never', + params: {}, + path: '/', + }, + { + routeData: [ + [ + { spread: true, content: '...foo', dynamic: true }, + { spread: false, content: '-', dynamic: false }, + { spread: true, content: '...bar', dynamic: true }, + ], + ], + trailingSlash: 'never', + params: { foo: 'one', bar: 'two' }, + path: '/one-two', + }, + { + routeData: [ + [ + { spread: true, content: '...foo', dynamic: true }, + { spread: false, content: '-', dynamic: false }, + { spread: true, content: '...bar', dynamic: true }, + ], + ], + trailingSlash: 'never', + params: {}, + path: '/-', + }, + { + routeData: [ + [{ spread: true, content: '...foo', dynamic: true }], + [{ spread: true, content: '...bar', dynamic: true }], + ], + trailingSlash: 'never', + params: { foo: 'one' }, + path: '/one', + }, + { + routeData: [ + [{ spread: false, content: 'fix', dynamic: false }], + [{ spread: true, content: '...foo', dynamic: true }], + [{ spread: true, content: '...bar', dynamic: true }], + ], + trailingSlash: 'never', + params: { foo: 'one' }, + path: '/fix/one', + }, + { + routeData: [ + [{ spread: false, content: 'fix', dynamic: false }], + [{ spread: true, content: '...foo', dynamic: true }], + [{ spread: true, content: '...bar', dynamic: true }], + ], + trailingSlash: 'always', + params: { foo: 'one' }, + path: '/fix/one/', + }, + { + routeData: [ + [{ spread: false, content: 'fix', dynamic: false }], + [{ spread: true, content: '...foo', dynamic: true }], + [{ spread: true, content: '...bar', dynamic: true }], + ], + trailingSlash: 'never', + params: { foo: 'one', bar: 'two' }, + path: '/fix/one/two', + }, + { + routeData: [ + [{ spread: false, content: 'fix', dynamic: false }], + [{ spread: true, content: '...foo', dynamic: true }], + [{ spread: true, content: '...bar', dynamic: true }], + ], + trailingSlash: 'never', + params: { foo: 'one&two' }, + path: '/fix/one&two', + }, + { + routeData: [ + [{ spread: false, content: 'fix', dynamic: false }], + [{ spread: false, content: 'page', dynamic: true }], + ], + trailingSlash: 'never', + params: { page: 1 }, + path: '/fix/1', + }, + ].forEach(({ routeData, trailingSlash, params, path }) => { + it(`generates ${path}`, () => { + const generator = getRouteGenerator(routeData, trailingSlash); + assert.equal(generator(params), path); + }); + }); + + it('should throw an error when a dynamic parameter is missing', () => { + const generator = getRouteGenerator( + [[{ spread: false, content: 'foo', dynamic: true }]], + 'never', + ); + assert.throws(() => generator({}), TypeError); + }); +}); |