aboutsummaryrefslogtreecommitdiff
path: root/packages/astro/test/units/routing/generator.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/astro/test/units/routing/generator.test.js')
-rw-r--r--packages/astro/test/units/routing/generator.test.js152
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);
+ });
+});