diff options
author | 2023-09-24 08:32:03 +0200 | |
---|---|---|
committer | 2023-09-24 08:32:03 +0200 | |
commit | 2365c124645d5067a12987f205cee23a45d1d13d (patch) | |
tree | 9a713c710b443a7593ca467fedf59bc6c1096730 /packages/integrations/cloudflare/test | |
parent | 4c4ad9d167e8d15ff2c15e3336ede8ca22f646b2 (diff) | |
download | astro-2365c124645d5067a12987f205cee23a45d1d13d.tar.gz astro-2365c124645d5067a12987f205cee23a45d1d13d.tar.zst astro-2365c124645d5067a12987f205cee23a45d1d13d.zip |
fix(cloudflare): added config for _routes.json generation (#8459)
* added config for _routes.json generation
* added changeset
* renamed test file
* updated comments
* Apply suggestions from code review
Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
* worked on tests
* worked on docs
* worked on docs
* worked on tests
* updated pnpm-lock.yaml
* worked on tests
* moved the _worker.js in cloudflareSpecialFiles statement
---------
Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
Co-authored-by: Alexander Niebuhr <alexander@nbhr.io>
Diffstat (limited to 'packages/integrations/cloudflare/test')
16 files changed, 223 insertions, 81 deletions
diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/routes-json/astro.config.mjs index 66b50c098..6e03bbc35 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/astro.config.mjs +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/astro.config.mjs @@ -1,11 +1,9 @@ import { defineConfig } from 'astro/config'; -import cloudflare from '@astrojs/cloudflare'; export default defineConfig({ - adapter: cloudflare({ mode: 'directory' }), + // adapter will be set dynamically by the test output: 'hybrid', redirects: { '/a/redirect': '/', }, - srcDir: process.env.SRC }); diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/package.json b/packages/integrations/cloudflare/test/fixtures/routes-json/package.json index 4ff746f02..4ff746f02 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/package.json +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/package.json diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/public/_redirects b/packages/integrations/cloudflare/test/fixtures/routes-json/public/_redirects new file mode 100644 index 000000000..14e38c465 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/public/_redirects @@ -0,0 +1 @@ +/redirectme / 302 diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/public/public.txt b/packages/integrations/cloudflare/test/fixtures/routes-json/public/public.txt index 9766475a4..9766475a4 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/public/public.txt +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/public/public.txt diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/dynamicOnly/pages/another.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic1.astro index 9a2306b86..9a2306b86 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/src/dynamicOnly/pages/another.astro +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic1.astro diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/dynamicOnly/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic2.astro index 9a2306b86..9a2306b86 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/src/dynamicOnly/pages/index.astro +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic2.astro diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/[...rest].astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic3.astro index 9a2306b86..9a2306b86 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/[...rest].astro +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic3.astro diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/[id].astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/index.astro index 9a2306b86..9a2306b86 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/[id].astro +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/index.astro diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[...rest].astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[...rest].astro new file mode 100644 index 000000000..9a2306b86 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[...rest].astro @@ -0,0 +1,5 @@ +--- +export const prerender=false; +--- + +ok diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[id].astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[id].astro new file mode 100644 index 000000000..9a2306b86 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[id].astro @@ -0,0 +1,5 @@ +--- +export const prerender=false; +--- + +ok diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/endpoint.ts b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/endpoint.ts index d43d0cd2a..d43d0cd2a 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/endpoint.ts +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/endpoint.ts diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/index.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/index.astro index 9766475a4..9766475a4 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/index.astro +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/index.astro diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/b/index.html b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/b/index.html index 9766475a4..9766475a4 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/b/index.html +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/b/index.html diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/staticOnly/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/pages/index.astro index 9766475a4..9766475a4 100644 --- a/packages/integrations/cloudflare/test/fixtures/routesJson/src/staticOnly/pages/index.astro +++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/pages/index.astro diff --git a/packages/integrations/cloudflare/test/routes-json.test.js b/packages/integrations/cloudflare/test/routes-json.test.js new file mode 100644 index 000000000..9c5cfad4a --- /dev/null +++ b/packages/integrations/cloudflare/test/routes-json.test.js @@ -0,0 +1,211 @@ +import { expect } from 'chai'; +import { loadFixture } from './test-utils.js'; +import cloudflare from '../dist/index.js'; + +/** @type {import('./test-utils.js').Fixture} */ +describe('_routes.json generation', () => { + for (const mode of ['directory', 'advanced']) { + for (const functionPerRoute of [false, true]) { + describe(`with mode=${mode}, functionPerRoute=${functionPerRoute}`, () => { + describe('of both functions and static files', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/routes-json/', + srcDir: './src/mixed', + adapter: cloudflare({ + mode, + functionPerRoute, + }), + }); + await fixture.build(); + }); + + it('creates `include` for functions and `exclude` for static files where needed', async () => { + const _routesJson = await fixture.readFile('/_routes.json'); + const routes = JSON.parse(_routesJson); + + expect(routes).to.deep.equal({ + version: 1, + include: ['/a/*', '/_image'], + exclude: ['/a/', '/a/redirect', '/a/index.html'], + }); + }); + }); + + describe('of only functions', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/routes-json/', + srcDir: './src/dynamicOnly', + adapter: cloudflare({ + mode, + functionPerRoute, + }), + }); + await fixture.build(); + }); + + it('creates a wildcard `include` and `exclude` only for static assets and redirects', async () => { + const _routesJson = await fixture.readFile('/_routes.json'); + const routes = JSON.parse(_routesJson); + + expect(routes).to.deep.equal({ + version: 1, + include: ['/*'], + exclude: ['/public.txt', '/redirectme', '/a/redirect'], + }); + }); + }); + + describe('of only static files', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/routes-json/', + srcDir: './src/staticOnly', + adapter: cloudflare({ + mode, + functionPerRoute, + }), + }); + await fixture.build(); + }); + + it('create only one `include` and `exclude` that are supposed to match nothing', async () => { + const _routesJson = await fixture.readFile('/_routes.json'); + const routes = JSON.parse(_routesJson); + + expect(routes).to.deep.equal({ + version: 1, + include: ['/_image'], + exclude: [], + }); + }); + }); + + describe('with strategy `"include"`', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/routes-json/', + srcDir: './src/dynamicOnly', + adapter: cloudflare({ + mode, + functionPerRoute, + routes: { strategy: 'include' }, + }), + }); + await fixture.build(); + }); + + it('creates `include` entries even though the `"exclude"` strategy would have produced less entries.', async () => { + const _routesJson = await fixture.readFile('/_routes.json'); + const routes = JSON.parse(_routesJson); + + expect(routes).to.deep.equal({ + version: 1, + include: ['/', '/_image', '/dynamic1', '/dynamic2', '/dynamic3'], + exclude: [], + }); + }); + }); + + describe('with strategy `"exclude"`', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/routes-json/', + srcDir: './src/staticOnly', + adapter: cloudflare({ + mode, + functionPerRoute, + routes: { strategy: 'exclude' }, + }), + }); + await fixture.build(); + }); + + it('creates `exclude` entries even though the `"include"` strategy would have produced less entries.', async () => { + const _routesJson = await fixture.readFile('/_routes.json'); + const routes = JSON.parse(_routesJson); + + expect(routes).to.deep.equal({ + version: 1, + include: ['/*'], + exclude: ['/', '/index.html', '/public.txt', '/redirectme', '/a/redirect'], + }); + }); + }); + + describe('with additional `include` entries', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/routes-json/', + srcDir: './src/mixed', + adapter: cloudflare({ + mode, + functionPerRoute, + routes: { + strategy: 'include', + include: ['/another', '/a/redundant'], + }, + }), + }); + await fixture.build(); + }); + + it('creates `include` for functions and `exclude` for static files where needed', async () => { + const _routesJson = await fixture.readFile('/_routes.json'); + const routes = JSON.parse(_routesJson); + + expect(routes).to.deep.equal({ + version: 1, + include: ['/a/*', '/_image', '/another'], + exclude: ['/a/', '/a/redirect', '/a/index.html'], + }); + }); + }); + + describe('with additional `exclude` entries', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/routes-json/', + srcDir: './src/mixed', + adapter: cloudflare({ + mode, + functionPerRoute, + routes: { + strategy: 'include', + exclude: ['/another', '/a/*', '/a/index.html'], + }, + }), + }); + await fixture.build(); + }); + + it('creates `include` for functions and `exclude` for static files where needed', async () => { + const _routesJson = await fixture.readFile('/_routes.json'); + const routes = JSON.parse(_routesJson); + + expect(routes).to.deep.equal({ + version: 1, + include: ['/a/*', '/_image'], + exclude: ['/a/', '/a/*', '/another'], + }); + }); + }); + }); + } + } +}); diff --git a/packages/integrations/cloudflare/test/routesJson.js b/packages/integrations/cloudflare/test/routesJson.js deleted file mode 100644 index 1714dfb89..000000000 --- a/packages/integrations/cloudflare/test/routesJson.js +++ /dev/null @@ -1,78 +0,0 @@ -import { expect } from 'chai'; -import { loadFixture } from './test-utils.js'; - -/** @type {import('./test-utils.js').Fixture} */ -describe('_routes.json generation', () => { - after(() => { - delete process.env.SRC; - }); - - describe('of both functions and static files', () => { - let fixture; - - before(async () => { - process.env.SRC = './src/mixed'; - fixture = await loadFixture({ - root: './fixtures/routesJson/', - }); - await fixture.build(); - }); - - it('creates `include` for functions and `exclude` for static files where needed', async () => { - const _routesJson = await fixture.readFile('/_routes.json'); - const routes = JSON.parse(_routesJson); - - expect(routes).to.deep.equal({ - version: 1, - include: ['/a/*', '/_image'], - exclude: ['/a/', '/a/redirect', '/a/index.html'], - }); - }); - }); - - describe('of only functions', () => { - let fixture; - - before(async () => { - process.env.SRC = './src/dynamicOnly'; - fixture = await loadFixture({ - root: './fixtures/routesJson/', - }); - await fixture.build(); - }); - - it('creates a wildcard `include` and `exclude` only for the redirect', async () => { - const _routesJson = await fixture.readFile('/_routes.json'); - const routes = JSON.parse(_routesJson); - - expect(routes).to.deep.equal({ - version: 1, - include: ['/*'], - exclude: ['/a/redirect'], - }); - }); - }); - - describe('of only static files', () => { - let fixture; - - before(async () => { - process.env.SRC = './src/staticOnly'; - fixture = await loadFixture({ - root: './fixtures/routesJson/', - }); - await fixture.build(); - }); - - it('create only one `include` and `exclude` that are supposed to match nothing', async () => { - const _routesJson = await fixture.readFile('/_routes.json'); - const routes = JSON.parse(_routesJson); - - expect(routes).to.deep.equal({ - version: 1, - include: ['/_image'], - exclude: [], - }); - }); - }); -}); |