diff options
Diffstat (limited to 'packages/integrations/cloudflare/test')
13 files changed, 137 insertions, 12 deletions
diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/routesJson/astro.config.mjs new file mode 100644 index 000000000..66b50c098 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/astro.config.mjs @@ -0,0 +1,11 @@ +import { defineConfig } from 'astro/config'; +import cloudflare from '@astrojs/cloudflare'; + +export default defineConfig({ + adapter: cloudflare({ mode: 'directory' }), + 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/routesJson/package.json new file mode 100644 index 000000000..4ff746f02 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/package.json @@ -0,0 +1,9 @@ +{ + "name": "@test/astro-cloudflare-routes-json", + "version": "0.0.0", + "private": true, + "dependencies": { + "@astrojs/cloudflare": "workspace:*", + "astro": "workspace:*" + } +} diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/dynamicOnly/pages/another.astro b/packages/integrations/cloudflare/test/fixtures/routesJson/src/dynamicOnly/pages/another.astro new file mode 100644 index 000000000..9a2306b86 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/src/dynamicOnly/pages/another.astro @@ -0,0 +1,5 @@ +--- +export const prerender=false; +--- + +ok diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/dynamicOnly/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/routesJson/src/dynamicOnly/pages/index.astro new file mode 100644 index 000000000..9a2306b86 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/src/dynamicOnly/pages/index.astro @@ -0,0 +1,5 @@ +--- +export const prerender=false; +--- + +ok diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/[...rest].astro b/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/[...rest].astro new file mode 100644 index 000000000..9a2306b86 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/[...rest].astro @@ -0,0 +1,5 @@ +--- +export const prerender=false; +--- + +ok diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/[id].astro b/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/[id].astro new file mode 100644 index 000000000..9a2306b86 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/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/routesJson/src/mixed/pages/a/endpoint.ts new file mode 100644 index 000000000..d43d0cd2a --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/endpoint.ts @@ -0,0 +1 @@ +export const prerender = false; diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/index.astro b/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/index.astro new file mode 100644 index 000000000..9766475a4 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/a/index.astro @@ -0,0 +1 @@ +ok diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/b/index.html b/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/b/index.html new file mode 100644 index 000000000..9766475a4 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/pages/b/index.html @@ -0,0 +1 @@ +ok diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/public/public.txt b/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/public/public.txt new file mode 100644 index 000000000..9766475a4 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/src/mixed/public/public.txt @@ -0,0 +1 @@ +ok diff --git a/packages/integrations/cloudflare/test/fixtures/routesJson/src/staticOnly/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/routesJson/src/staticOnly/pages/index.astro new file mode 100644 index 000000000..9766475a4 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/routesJson/src/staticOnly/pages/index.astro @@ -0,0 +1 @@ +ok diff --git a/packages/integrations/cloudflare/test/prerender.test.js b/packages/integrations/cloudflare/test/prerender.test.js index 847bd950a..fe0721f27 100644 --- a/packages/integrations/cloudflare/test/prerender.test.js +++ b/packages/integrations/cloudflare/test/prerender.test.js @@ -18,13 +18,14 @@ describe('Prerendering', () => { fixture.clean(); }); - it('includes prerendered routes in the routes.json config', async () => { - const foundRoutes = JSON.parse(await fixture.readFile('/_routes.json')).exclude.map((r) => - r.replace(/\\/g, '/') - ); - const expectedExcludedRoutes = ['/_worker.js', '/one/index.html', '/one/']; + it('includes non prerendered routes in the routes.json config', async () => { + const foundRoutes = JSON.parse(await fixture.readFile('/_routes.json')); - expect(foundRoutes.every((element) => expectedExcludedRoutes.includes(element))).to.be.true; + expect(foundRoutes).to.deep.equal({ + version: 1, + include: ['/'], + exclude: [], + }); }); }); @@ -45,12 +46,13 @@ describe('Hybrid rendering', () => { delete process.env.PRERENDER; }); - it('includes prerendered routes in the routes.json config', async () => { - const foundRoutes = JSON.parse(await fixture.readFile('/_routes.json')).exclude.map((r) => - r.replace(/\\/g, '/') - ); - const expectedExcludedRoutes = ['/_worker.js', '/index.html', '/']; + it('includes non prerendered routes in the routes.json config', async () => { + const foundRoutes = JSON.parse(await fixture.readFile('/_routes.json')); - expect(foundRoutes.every((element) => expectedExcludedRoutes.includes(element))).to.be.true; + expect(foundRoutes).to.deep.equal({ + version: 1, + include: ['/one'], + exclude: [], + }); }); }); diff --git a/packages/integrations/cloudflare/test/routesJson.js b/packages/integrations/cloudflare/test/routesJson.js new file mode 100644 index 000000000..927e4c38e --- /dev/null +++ b/packages/integrations/cloudflare/test/routesJson.js @@ -0,0 +1,78 @@ +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/*'], + 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: ['/'], + exclude: ['/'], + }); + }); + }); +}); |