summaryrefslogtreecommitdiff
path: root/packages/integrations/netlify
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/netlify')
-rw-r--r--packages/integrations/netlify/package.json3
-rw-r--r--packages/integrations/netlify/src/index.ts4
-rw-r--r--packages/integrations/netlify/test/dynamic-route.test.js37
-rw-r--r--packages/integrations/netlify/test/fixtures/.gitignore1
-rw-r--r--packages/integrations/netlify/test/fixtures/dynamic-route/src/pages/products/[id].astro11
5 files changed, 55 insertions, 1 deletions
diff --git a/packages/integrations/netlify/package.json b/packages/integrations/netlify/package.json
index 4402076c1..ed3d1ff36 100644
--- a/packages/integrations/netlify/package.json
+++ b/packages/integrations/netlify/package.json
@@ -21,7 +21,8 @@
},
"scripts": {
"build": "astro-scripts build \"src/**/*.ts\" && tsc",
- "dev": "astro-scripts dev \"src/**/*.ts\""
+ "dev": "astro-scripts dev \"src/**/*.ts\"",
+ "test": "mocha --exit --timeout 20000"
},
"dependencies": {
"@astrojs/webapi": "^0.11.0"
diff --git a/packages/integrations/netlify/src/index.ts b/packages/integrations/netlify/src/index.ts
index 181303e33..aa1b5d33c 100644
--- a/packages/integrations/netlify/src/index.ts
+++ b/packages/integrations/netlify/src/index.ts
@@ -53,6 +53,10 @@ function netlifyFunctions({ dist }: NetlifyFunctionsOptions = {}): AstroIntegrat
if (route.pathname) {
_redirects += `
${route.pathname} /.netlify/functions/${entryFile} 200`;
+ } else {
+ const pattern = '/' + route.segments.map(([part]) => part.dynamic ? '*' : part.content).join('/');
+ _redirects += `
+${pattern} /.netlify/functions/${entryFile} 200`;
}
}
diff --git a/packages/integrations/netlify/test/dynamic-route.test.js b/packages/integrations/netlify/test/dynamic-route.test.js
new file mode 100644
index 000000000..bc9335bfe
--- /dev/null
+++ b/packages/integrations/netlify/test/dynamic-route.test.js
@@ -0,0 +1,37 @@
+import { expect } from 'chai';
+import { load as cheerioLoad } from 'cheerio';
+import { loadFixture } from '../../../astro/test/test-utils.js';
+import netlifyAdapter from '../dist/index.js';
+import { fileURLToPath } from 'url';
+
+// Asset bundling
+describe('Dynamic pages', () => {
+ /** @type {import('../../../astro/test/test-utils').Fixture} */
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/dynamic-route/', import.meta.url).toString(),
+ experimental: {
+ ssr: true,
+ },
+ adapter: netlifyAdapter({
+ dist: new URL('./fixtures/dynamic-route/dist/', import.meta.url)
+ }),
+ site: `http://example.com`,
+ vite: {
+ resolve: {
+ alias: {
+ '@astrojs/netlify/netlify-functions.js': fileURLToPath(new URL('../dist/netlify-functions.js', import.meta.url))
+ }
+ }
+ }
+ });
+ await fixture.build();
+ });
+
+ it('Dynamic pages are included in the redirects file', async () => {
+ const redir = await fixture.readFile('/_redirects');
+ expect(redir).to.match(/\/products\/\*/);
+ });
+});
diff --git a/packages/integrations/netlify/test/fixtures/.gitignore b/packages/integrations/netlify/test/fixtures/.gitignore
new file mode 100644
index 000000000..916f60644
--- /dev/null
+++ b/packages/integrations/netlify/test/fixtures/.gitignore
@@ -0,0 +1 @@
+**/netlify
diff --git a/packages/integrations/netlify/test/fixtures/dynamic-route/src/pages/products/[id].astro b/packages/integrations/netlify/test/fixtures/dynamic-route/src/pages/products/[id].astro
new file mode 100644
index 000000000..5ed06d251
--- /dev/null
+++ b/packages/integrations/netlify/test/fixtures/dynamic-route/src/pages/products/[id].astro
@@ -0,0 +1,11 @@
+---
+
+---
+<html>
+<head>
+ <title>Testing</title>
+</head>
+<body>
+ <h1>Testing</h1>
+</body>
+</html>