summaryrefslogtreecommitdiff
path: root/packages/integrations/cloudflare/test
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/cloudflare/test')
-rw-r--r--packages/integrations/cloudflare/test/_test-utils.js50
-rw-r--r--packages/integrations/cloudflare/test/basics.test.js39
-rw-r--r--packages/integrations/cloudflare/test/cf.test.js127
-rw-r--r--packages/integrations/cloudflare/test/dev-runtime.test.js82
-rw-r--r--packages/integrations/cloudflare/test/directory-mode.test.js32
-rw-r--r--packages/integrations/cloudflare/test/directory.test.js36
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/.dev.vars (renamed from packages/integrations/cloudflare/test/fixtures/cf/.dev.vars)0
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/astro.config.mjs10
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/package.json (renamed from packages/integrations/cloudflare/test/fixtures/basics/package.json)4
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/src/env.d.ts1
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/caches.astro (renamed from packages/integrations/cloudflare/test/fixtures/cf/src/pages/caches.astro)0
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/d1.astro (renamed from packages/integrations/cloudflare/test/fixtures/cf/src/pages/d1.astro)0
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/do.astro (renamed from packages/integrations/cloudflare/test/fixtures/cf/src/pages/do.astro)0
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/index.astro (renamed from packages/integrations/cloudflare/test/fixtures/cf/src/pages/index.astro)1
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/kv.astro (renamed from packages/integrations/cloudflare/test/fixtures/cf/src/pages/kv.astro)0
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/r2.astro (renamed from packages/integrations/cloudflare/test/fixtures/cf/src/pages/r2.astro)0
-rw-r--r--packages/integrations/cloudflare/test/fixtures/dev-runtime/wrangler.toml (renamed from packages/integrations/cloudflare/test/fixtures/cf/wrangler.toml)0
-rw-r--r--packages/integrations/cloudflare/test/fixtures/directory-mode/astro.config.mjs10
-rw-r--r--packages/integrations/cloudflare/test/fixtures/directory-mode/package.json (renamed from packages/integrations/cloudflare/test/fixtures/runtime/package.json)4
-rw-r--r--packages/integrations/cloudflare/test/fixtures/directory-mode/src/env.d.ts1
-rw-r--r--packages/integrations/cloudflare/test/fixtures/directory-mode/src/pages/index.astro (renamed from packages/integrations/cloudflare/test/fixtures/basics/src/pages/index.astro)0
-rw-r--r--packages/integrations/cloudflare/test/fixtures/function-per-route/package.json2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/function-per-route/src/env.d.ts1
-rw-r--r--packages/integrations/cloudflare/test/fixtures/hybrid/astro.config.mjs (renamed from packages/integrations/cloudflare/test/fixtures/basics/astro.config.mjs)5
-rw-r--r--packages/integrations/cloudflare/test/fixtures/hybrid/package.json (renamed from packages/integrations/cloudflare/test/fixtures/cf/package.json)4
-rw-r--r--packages/integrations/cloudflare/test/fixtures/hybrid/src/env.d.ts1
-rw-r--r--packages/integrations/cloudflare/test/fixtures/hybrid/src/pages/index.astro8
-rw-r--r--packages/integrations/cloudflare/test/fixtures/hybrid/src/pages/one.astro11
-rw-r--r--packages/integrations/cloudflare/test/fixtures/no-output/package.json2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/prerender/package.json2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/prerender/src/env.d.ts1
-rw-r--r--packages/integrations/cloudflare/test/fixtures/prerender/src/pages/one.astro2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/routes-json/package.json2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/runtime/src/pages/index.astro15
-rw-r--r--packages/integrations/cloudflare/test/fixtures/wasm-directory/package.json2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/wasm-function-per-route/package.json2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/wasm/package.json2
-rw-r--r--packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json4
-rw-r--r--packages/integrations/cloudflare/test/fixtures/wrangler-runtime/.dev.vars1
-rw-r--r--packages/integrations/cloudflare/test/fixtures/wrangler-runtime/astro.config.mjs (renamed from packages/integrations/cloudflare/test/fixtures/runtime/astro.config.mjs)0
-rw-r--r--packages/integrations/cloudflare/test/fixtures/wrangler-runtime/package.json9
-rw-r--r--packages/integrations/cloudflare/test/fixtures/wrangler-runtime/src/env.d.ts1
-rw-r--r--packages/integrations/cloudflare/test/fixtures/wrangler-runtime/src/pages/index.astro15
-rw-r--r--packages/integrations/cloudflare/test/fixtures/wrangler-runtime/wrangler.toml4
-rw-r--r--packages/integrations/cloudflare/test/function-per-route.test.js45
-rw-r--r--packages/integrations/cloudflare/test/hybrid.test.js22
-rw-r--r--packages/integrations/cloudflare/test/no-output.test.js16
-rw-r--r--packages/integrations/cloudflare/test/prerender.test.js50
-rw-r--r--packages/integrations/cloudflare/test/routes-json.test.js8
-rw-r--r--packages/integrations/cloudflare/test/runtime.test.js44
-rw-r--r--packages/integrations/cloudflare/test/test-utils.js169
-rw-r--r--packages/integrations/cloudflare/test/wasm-directory.test.js62
-rw-r--r--packages/integrations/cloudflare/test/wasm-function-per-route.test.js70
-rw-r--r--packages/integrations/cloudflare/test/wasm.test.js120
-rw-r--r--packages/integrations/cloudflare/test/with-solid-js.test.js66
-rw-r--r--packages/integrations/cloudflare/test/wrangler-runtime.test.js61
-rw-r--r--packages/integrations/cloudflare/test/wrangler.toml6
57 files changed, 513 insertions, 719 deletions
diff --git a/packages/integrations/cloudflare/test/_test-utils.js b/packages/integrations/cloudflare/test/_test-utils.js
new file mode 100644
index 000000000..04946cbfa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/_test-utils.js
@@ -0,0 +1,50 @@
+import { fileURLToPath } from "node:url";
+import { execa } from "execa";
+/**
+ * @typedef {{ stop: Promise<void>, port: number }} WranglerCLI
+ */
+
+const astroPath = fileURLToPath(
+ new URL("../node_modules/.bin/astro", import.meta.url)
+);
+/** Returns a process running the Astro CLI. */
+export function astroCli(cwd, /** @type {string[]} */ ...args) {
+ const spawned = execa(astroPath, [...args], {
+ env: { ASTRO_TELEMETRY_DISABLED: true },
+ cwd: cwd,
+ });
+
+ spawned.stdout.setEncoding("utf8");
+
+ return spawned;
+}
+
+const wranglerPath = fileURLToPath(
+ new URL("../node_modules/wrangler/bin/wrangler.js", import.meta.url)
+);
+/** Returns a process running the Astro CLI. */
+export function wranglerCli(cwd) {
+ const spawned = execa(
+ wranglerPath,
+ [
+ "pages",
+ "dev",
+ "dist",
+ "--port",
+ "8788",
+ "--compatibility-date",
+ new Date().toISOString().slice(0, 10),
+ "--log-level",
+ "info",
+ ],
+ {
+ env: { CI: 1, CF_PAGES: 1 },
+ cwd: cwd,
+ }
+ );
+
+ spawned.stdout.setEncoding("utf8");
+ spawned.stderr.setEncoding("utf8");
+
+ return spawned;
+}
diff --git a/packages/integrations/cloudflare/test/basics.test.js b/packages/integrations/cloudflare/test/basics.test.js
deleted file mode 100644
index eb4509da1..000000000
--- a/packages/integrations/cloudflare/test/basics.test.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import { loadFixture, runCLI } from './test-utils.js';
-import { expect } from 'chai';
-import * as cheerio from 'cheerio';
-
-describe('Basic app', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- /** @type {import('./test-utils').WranglerCLI} */
- let cli;
-
- before(async function () {
- fixture = await loadFixture({
- root: './fixtures/basics/',
- });
- await fixture.build();
-
- cli = await runCLI('./fixtures/basics/', {
- silent: true,
- onTimeout: (ex) => {
- console.log(ex);
- // if fail to start, skip for now as it's very flaky
- this.skip();
- },
- });
- });
-
- after(async () => {
- await cli?.stop();
- });
-
- it('can render', async () => {
- let res = await fetch(`http://127.0.0.1:${cli.port}/`);
- expect(res.status).to.equal(200);
- let html = await res.text();
- let $ = cheerio.load(html);
- expect($('h1').text()).to.equal('Testing');
- expect($('#env').text()).to.equal('secret');
- });
-});
diff --git a/packages/integrations/cloudflare/test/cf.test.js b/packages/integrations/cloudflare/test/cf.test.js
deleted file mode 100644
index 0078f3024..000000000
--- a/packages/integrations/cloudflare/test/cf.test.js
+++ /dev/null
@@ -1,127 +0,0 @@
-import { loadFixture, runCLI } from './test-utils.js';
-import { expect } from 'chai';
-import * as cheerio from 'cheerio';
-import cloudflare from '../dist/index.js';
-
-describe('Wrangler Cloudflare Runtime', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- /** @type {import('./test-utils').WranglerCLI} */
- let cli;
-
- before(async function () {
- fixture = await loadFixture({
- root: './fixtures/cf/',
- output: 'server',
- adapter: cloudflare(),
- });
- await fixture.build();
-
- cli = await runCLI('./fixtures/cf/', {
- silent: true,
- onTimeout: (ex) => {
- console.log(ex);
- // if fail to start, skip for now as it's very flaky
- this.skip();
- },
- });
- });
-
- after(async () => {
- await cli?.stop();
- });
-
- it('Load cf and caches API', async () => {
- let res = await fetch(`http://127.0.0.1:${cli.port}/`);
- expect(res.status).to.equal(200);
- let html = await res.text();
- let $ = cheerio.load(html);
-
- expect($('#hasRuntime').text()).to.equal('true');
- expect($('#hasCache').text()).to.equal('true');
- });
-});
-
-describe('Astro Cloudflare Runtime', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let devServer;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/cf/',
- output: 'server',
- adapter: cloudflare({
- runtime: 'local',
- }),
- });
- process.chdir('./test/fixtures/cf');
- devServer = await fixture.startDevServer();
- });
-
- after(async () => {
- await devServer?.stop();
- });
-
- it('adds cf object', async () => {
- let res = await fixture.fetch('/');
- expect(res.status).to.equal(200);
- let html = await res.text();
- let $ = cheerio.load(html);
- expect($('#hasCF').text()).to.equal('true');
- });
-
- it('adds cache mocking', async () => {
- let res = await fixture.fetch('/caches');
- expect(res.status).to.equal(200);
- let html = await res.text();
- let $ = cheerio.load(html);
- expect($('#hasCACHE').text()).to.equal('true');
- });
-
- it('adds D1 mocking', async () => {
- expect(await fixture.pathExists('../.mf/d1')).to.be.true;
-
- let res = await fixture.fetch('/d1');
- expect(res.status).to.equal(200);
- let html = await res.text();
- let $ = cheerio.load(html);
- expect($('#hasDB').text()).to.equal('true');
- expect($('#hasPRODDB').text()).to.equal('true');
- expect($('#hasACCESS').text()).to.equal('true');
- });
-
- it('adds R2 mocking', async () => {
- expect(await fixture.pathExists('../.mf/r2')).to.be.true;
-
- let res = await fixture.fetch('/r2');
- expect(res.status).to.equal(200);
- let html = await res.text();
- let $ = cheerio.load(html);
- expect($('#hasBUCKET').text()).to.equal('true');
- expect($('#hasPRODBUCKET').text()).to.equal('true');
- expect($('#hasACCESS').text()).to.equal('true');
- });
-
- it('adds KV mocking', async () => {
- expect(await fixture.pathExists('../.mf/kv')).to.be.true;
-
- let res = await fixture.fetch('/kv');
- expect(res.status).to.equal(200);
- let html = await res.text();
- let $ = cheerio.load(html);
- expect($('#hasKV').text()).to.equal('true');
- expect($('#hasPRODKV').text()).to.equal('true');
- expect($('#hasACCESS').text()).to.equal('true');
- });
-
- it('adds DO mocking', async () => {
- expect(await fixture.pathExists('../.mf/do')).to.be.true;
-
- let res = await fixture.fetch('/do');
- expect(res.status).to.equal(200);
- let html = await res.text();
- let $ = cheerio.load(html);
- expect($('#hasDO').text()).to.equal('true');
- });
-});
diff --git a/packages/integrations/cloudflare/test/dev-runtime.test.js b/packages/integrations/cloudflare/test/dev-runtime.test.js
new file mode 100644
index 000000000..45bd5474d
--- /dev/null
+++ b/packages/integrations/cloudflare/test/dev-runtime.test.js
@@ -0,0 +1,82 @@
+import { expect } from "chai";
+import * as cheerio from "cheerio";
+import { fileURLToPath } from "node:url";
+import { astroCli } from "./_test-utils.js";
+
+const root = new URL("./fixtures/dev-runtime/", import.meta.url);
+describe("Runtime Astro Dev", () => {
+ let cli;
+ before(async () => {
+ cli = astroCli(fileURLToPath(root), "dev", "--host", "127.0.0.1");
+ await new Promise((resolve) => {
+ cli.stdout.on("data", (data) => {
+ if (data.includes("http://127.0.0.1:4321/")) {
+ resolve();
+ }
+ });
+ });
+ });
+
+ after((done) => {
+ cli.kill();
+ setTimeout(() => {
+ console.log("CLEANED");
+ done();
+ }, 1000);
+ });
+
+ it("exists", async () => {
+ let res = await fetch(`http://127.0.0.1:4321/`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasRuntime").text()).to.contain("true");
+ });
+
+ it("adds cf object", async () => {
+ let res = await fetch(`http://127.0.0.1:4321/`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasCF").text()).to.equal("true");
+ });
+
+ it("adds cache mocking", async () => {
+ let res = await fetch(`http://127.0.0.1:4321/caches`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasCACHE").text()).to.equal("true");
+ });
+
+ it("adds D1 mocking", async () => {
+ let res = await fetch(`http://127.0.0.1:4321/d1`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasDB").text()).to.equal("true");
+ expect($("#hasPRODDB").text()).to.equal("true");
+ expect($("#hasACCESS").text()).to.equal("true");
+ });
+
+ it("adds R2 mocking", async () => {
+ let res = await fetch(`http://127.0.0.1:4321/r2`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasBUCKET").text()).to.equal("true");
+ expect($("#hasPRODBUCKET").text()).to.equal("true");
+ expect($("#hasACCESS").text()).to.equal("true");
+ });
+
+ it("adds KV mocking", async () => {
+ let res = await fetch(`http://127.0.0.1:4321/kv`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasKV").text()).to.equal("true");
+ expect($("#hasPRODKV").text()).to.equal("true");
+ expect($("#hasACCESS").text()).to.equal("true");
+ });
+
+ it("adds DO mocking", async () => {
+ let res = await fetch(`http://127.0.0.1:4321/do`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasDO").text()).to.equal("true");
+ });
+});
diff --git a/packages/integrations/cloudflare/test/directory-mode.test.js b/packages/integrations/cloudflare/test/directory-mode.test.js
new file mode 100644
index 000000000..228e5e9f1
--- /dev/null
+++ b/packages/integrations/cloudflare/test/directory-mode.test.js
@@ -0,0 +1,32 @@
+import { expect } from 'chai';
+import { existsSync, readFileSync } from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { astroCli } from './_test-utils.js';
+
+const root = new URL('./fixtures/directory-mode/', import.meta.url);
+describe('Directory mode', () => {
+ before(async () => {
+ await astroCli(fileURLToPath(root), 'build');
+ });
+
+ it('generates functions folder inside the project root', () => {
+ const testURL = new URL('functions', root);
+ expect(existsSync(fileURLToPath(testURL))).to.be.true;
+ });
+
+ it('generates functions file inside the project root', () => {
+ const testURL = new URL('functions/[[path]].js', root);
+ expect(existsSync(fileURLToPath(testURL))).to.be.true;
+ });
+
+ it('generates a redirects file', () => {
+ const testURL = new URL('dist/_redirects', root);
+ try {
+ let _redirects = readFileSync(fileURLToPath(testURL), 'utf-8');
+ let parts = _redirects.split(/\s+/);
+ expect(parts).to.deep.equal(['/old', '/', '301']);
+ } catch (e) {
+ expect(false).to.equal(true);
+ }
+ });
+});
diff --git a/packages/integrations/cloudflare/test/directory.test.js b/packages/integrations/cloudflare/test/directory.test.js
deleted file mode 100644
index 8390699e3..000000000
--- a/packages/integrations/cloudflare/test/directory.test.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { loadFixture } from './test-utils.js';
-import { expect } from 'chai';
-import cloudflare from '../dist/index.js';
-
-/** @type {import('./test-utils').Fixture} */
-describe('mode: "directory"', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/basics/',
- output: 'server',
- adapter: cloudflare({ mode: 'directory' }),
- redirects: {
- '/old': '/',
- },
- });
- await fixture.build();
- });
-
- it('generates functions folder inside the project root', async () => {
- expect(await fixture.pathExists('../functions')).to.be.true;
- expect(await fixture.pathExists('../functions/[[path]].js')).to.be.true;
- });
-
- it('generates a redirects file', async () => {
- try {
- let _redirects = await fixture.readFile('/_redirects');
- let parts = _redirects.split(/\s+/);
- expect(parts).to.deep.equal(['/old', '/', '301']);
- } catch {
- expect(false).to.equal(true);
- }
- });
-});
diff --git a/packages/integrations/cloudflare/test/fixtures/cf/.dev.vars b/packages/integrations/cloudflare/test/fixtures/dev-runtime/.dev.vars
index 9296c384b..9296c384b 100644
--- a/packages/integrations/cloudflare/test/fixtures/cf/.dev.vars
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/.dev.vars
diff --git a/packages/integrations/cloudflare/test/fixtures/dev-runtime/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/dev-runtime/astro.config.mjs
new file mode 100644
index 000000000..71b246dec
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/astro.config.mjs
@@ -0,0 +1,10 @@
+import { defineConfig } from 'astro/config';
+import cloudflare from '@astrojs/cloudflare';
+
+
+export default defineConfig({
+ adapter: cloudflare({
+ runtime: 'local'
+ }),
+ output: 'server',
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/basics/package.json b/packages/integrations/cloudflare/test/fixtures/dev-runtime/package.json
index c7cc97455..a700fc27c 100644
--- a/packages/integrations/cloudflare/test/fixtures/basics/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/package.json
@@ -1,9 +1,9 @@
{
- "name": "@test/astro-cloudflare-basics",
+ "name": "@test/astro-cloudflare-dev-runtime",
"version": "0.0.0",
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "astro": "workspace:*"
+ "astro": "^3.2.3"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/env.d.ts
new file mode 100644
index 000000000..8c34fb45e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/env.d.ts
@@ -0,0 +1 @@
+/// <reference types="astro/client" /> \ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/caches.astro b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/caches.astro
index 743111721..743111721 100644
--- a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/caches.astro
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/caches.astro
diff --git a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/d1.astro b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/d1.astro
index a28940e9f..a28940e9f 100644
--- a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/d1.astro
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/d1.astro
diff --git a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/do.astro b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/do.astro
index e338c8e8f..e338c8e8f 100644
--- a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/do.astro
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/do.astro
diff --git a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/index.astro
index 5ba11985f..7d2ce1ef1 100644
--- a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/index.astro
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/index.astro
@@ -7,6 +7,7 @@ const runtime = Astro.locals.runtime;
</head>
<body>
<h1>Testing</h1>
+ <div id="hasRuntime">{!!runtime}</div>
<div id="hasCF">{!!runtime.cf?.colo}</div>
</body>
</html>
diff --git a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/kv.astro b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/kv.astro
index d21f163a0..d21f163a0 100644
--- a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/kv.astro
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/kv.astro
diff --git a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/r2.astro b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/r2.astro
index fbb9fc61b..fbb9fc61b 100644
--- a/packages/integrations/cloudflare/test/fixtures/cf/src/pages/r2.astro
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/src/pages/r2.astro
diff --git a/packages/integrations/cloudflare/test/fixtures/cf/wrangler.toml b/packages/integrations/cloudflare/test/fixtures/dev-runtime/wrangler.toml
index 17fd88ea5..17fd88ea5 100644
--- a/packages/integrations/cloudflare/test/fixtures/cf/wrangler.toml
+++ b/packages/integrations/cloudflare/test/fixtures/dev-runtime/wrangler.toml
diff --git a/packages/integrations/cloudflare/test/fixtures/directory-mode/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/directory-mode/astro.config.mjs
new file mode 100644
index 000000000..9a1408cb0
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/directory-mode/astro.config.mjs
@@ -0,0 +1,10 @@
+import { defineConfig } from 'astro/config';
+import cloudflare from '@astrojs/cloudflare';
+
+export default defineConfig({
+ output: 'server',
+ adapter: cloudflare({ mode: 'directory' }),
+ redirects: {
+ '/old': '/',
+ },
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/runtime/package.json b/packages/integrations/cloudflare/test/fixtures/directory-mode/package.json
index 71ac16647..e3d826df7 100644
--- a/packages/integrations/cloudflare/test/fixtures/runtime/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/directory-mode/package.json
@@ -1,9 +1,9 @@
{
- "name": "@test/astro-cloudflare-runtime",
+ "name": "@test/astro-cloudflare-directory-mode",
"version": "0.0.0",
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "astro": "workspace:*"
+ "astro": "^3.2.3"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/directory-mode/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/directory-mode/src/env.d.ts
new file mode 100644
index 000000000..8c34fb45e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/directory-mode/src/env.d.ts
@@ -0,0 +1 @@
+/// <reference types="astro/client" /> \ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/basics/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/directory-mode/src/pages/index.astro
index 8d372399c..8d372399c 100644
--- a/packages/integrations/cloudflare/test/fixtures/basics/src/pages/index.astro
+++ b/packages/integrations/cloudflare/test/fixtures/directory-mode/src/pages/index.astro
diff --git a/packages/integrations/cloudflare/test/fixtures/function-per-route/package.json b/packages/integrations/cloudflare/test/fixtures/function-per-route/package.json
index 54dded9dd..2c358cbcb 100644
--- a/packages/integrations/cloudflare/test/fixtures/function-per-route/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/function-per-route/package.json
@@ -4,6 +4,6 @@
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "astro": "workspace:*"
+ "astro": "^3.2.3"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/function-per-route/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/function-per-route/src/env.d.ts
new file mode 100644
index 000000000..8c34fb45e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/function-per-route/src/env.d.ts
@@ -0,0 +1 @@
+/// <reference types="astro/client" /> \ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/basics/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/hybrid/astro.config.mjs
index 407dc4355..8cb9d4504 100644
--- a/packages/integrations/cloudflare/test/fixtures/basics/astro.config.mjs
+++ b/packages/integrations/cloudflare/test/fixtures/hybrid/astro.config.mjs
@@ -1,10 +1,7 @@
import { defineConfig } from 'astro/config';
import cloudflare from '@astrojs/cloudflare';
-// test env var
-process.env.SECRET_STUFF = 'secret'
-
export default defineConfig({
adapter: cloudflare(),
- output: 'server'
+ output: 'hybrid',
});
diff --git a/packages/integrations/cloudflare/test/fixtures/cf/package.json b/packages/integrations/cloudflare/test/fixtures/hybrid/package.json
index cf8ae0082..c3a430c9e 100644
--- a/packages/integrations/cloudflare/test/fixtures/cf/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/hybrid/package.json
@@ -1,9 +1,9 @@
{
- "name": "@test/astro-cloudflare-cf",
+ "name": "@test/astro-cloudflare-hybrid",
"version": "0.0.0",
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "astro": "workspace:*"
+ "astro": "^3.2.3"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/hybrid/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/hybrid/src/env.d.ts
new file mode 100644
index 000000000..8c34fb45e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/hybrid/src/env.d.ts
@@ -0,0 +1 @@
+/// <reference types="astro/client" /> \ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/hybrid/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/hybrid/src/pages/index.astro
new file mode 100644
index 000000000..dfd71c3de
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/hybrid/src/pages/index.astro
@@ -0,0 +1,8 @@
+<html>
+<head>
+ <title>Testing</title>
+</head>
+<body>
+ <h1>Testing</h1>
+</body>
+</html>
diff --git a/packages/integrations/cloudflare/test/fixtures/hybrid/src/pages/one.astro b/packages/integrations/cloudflare/test/fixtures/hybrid/src/pages/one.astro
new file mode 100644
index 000000000..036ee25a3
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/hybrid/src/pages/one.astro
@@ -0,0 +1,11 @@
+---
+export const prerender = false;
+---
+<html>
+<head>
+ <title>Testing</title>
+</head>
+<body>
+ <h1>Testing</h1>
+</body>
+</html>
diff --git a/packages/integrations/cloudflare/test/fixtures/no-output/package.json b/packages/integrations/cloudflare/test/fixtures/no-output/package.json
index 569c30890..473ea0ce3 100644
--- a/packages/integrations/cloudflare/test/fixtures/no-output/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/no-output/package.json
@@ -4,6 +4,6 @@
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "astro": "workspace:*"
+ "astro": "^3.2.3"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/prerender/package.json b/packages/integrations/cloudflare/test/fixtures/prerender/package.json
index 3b2c5fef5..8cfbe8ae4 100644
--- a/packages/integrations/cloudflare/test/fixtures/prerender/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/prerender/package.json
@@ -4,6 +4,6 @@
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "astro": "workspace:*"
+ "astro": "^3.2.3"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/prerender/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/prerender/src/env.d.ts
new file mode 100644
index 000000000..8c34fb45e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/prerender/src/env.d.ts
@@ -0,0 +1 @@
+/// <reference types="astro/client" /> \ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/prerender/src/pages/one.astro b/packages/integrations/cloudflare/test/fixtures/prerender/src/pages/one.astro
index e11de7add..30386a625 100644
--- a/packages/integrations/cloudflare/test/fixtures/prerender/src/pages/one.astro
+++ b/packages/integrations/cloudflare/test/fixtures/prerender/src/pages/one.astro
@@ -1,5 +1,5 @@
---
-export const prerender = import.meta.env.PRERENDER;
+export const prerender = true;
---
<html>
<head>
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/package.json b/packages/integrations/cloudflare/test/fixtures/routes-json/package.json
index 4ff746f02..528c18a4d 100644
--- a/packages/integrations/cloudflare/test/fixtures/routes-json/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/package.json
@@ -4,6 +4,6 @@
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "astro": "workspace:*"
+ "astro": "^3.2.3"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/runtime/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/runtime/src/pages/index.astro
deleted file mode 100644
index aa73ab8ea..000000000
--- a/packages/integrations/cloudflare/test/fixtures/runtime/src/pages/index.astro
+++ /dev/null
@@ -1,15 +0,0 @@
----
-const runtime = Astro.locals.runtime;
-const env = runtime.env;
----
-<html>
- <head>
- <title>Testing</title>
- </head>
- <body>
- <h1>Testing</h1>
- <div id="env">{JSON.stringify(env)}</div>
- <div id="hasRuntime">{!!runtime.cf?.colo}</div>
- <div id="hasCache">{!!runtime.caches}</div>
- </body>
-</html>
diff --git a/packages/integrations/cloudflare/test/fixtures/wasm-directory/package.json b/packages/integrations/cloudflare/test/fixtures/wasm-directory/package.json
index 859aa4f40..8306750ee 100644
--- a/packages/integrations/cloudflare/test/fixtures/wasm-directory/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/wasm-directory/package.json
@@ -4,6 +4,6 @@
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "astro": "workspace:*"
+ "astro": "^3.2.3"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/wasm-function-per-route/package.json b/packages/integrations/cloudflare/test/fixtures/wasm-function-per-route/package.json
index 238c1e313..bafa40cc5 100644
--- a/packages/integrations/cloudflare/test/fixtures/wasm-function-per-route/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/wasm-function-per-route/package.json
@@ -4,6 +4,6 @@
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "astro": "workspace:*"
+ "astro": "^3.2.3"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/wasm/package.json b/packages/integrations/cloudflare/test/fixtures/wasm/package.json
index 4abd8513c..03bcc6e75 100644
--- a/packages/integrations/cloudflare/test/fixtures/wasm/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/wasm/package.json
@@ -4,6 +4,6 @@
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "astro": "workspace:*"
+ "astro": "^3.2.3"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json b/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json
index 55e344b21..5f9f339c2 100644
--- a/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json
+++ b/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json
@@ -4,8 +4,8 @@
"private": true,
"dependencies": {
"@astrojs/cloudflare": "workspace:*",
- "@astrojs/solid-js": "workspace:*",
- "astro": "workspace:*",
+ "@astrojs/solid-js": "^3.0.2",
+ "astro": "^3.2.3",
"solid-js": "^1.7.11"
}
}
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/.dev.vars b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/.dev.vars
new file mode 100644
index 000000000..9296c384b
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/.dev.vars
@@ -0,0 +1 @@
+DATABASE_URL="postgresql://lorem"
diff --git a/packages/integrations/cloudflare/test/fixtures/runtime/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/astro.config.mjs
index f92829843..f92829843 100644
--- a/packages/integrations/cloudflare/test/fixtures/runtime/astro.config.mjs
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/astro.config.mjs
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/package.json b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/package.json
new file mode 100644
index 000000000..3fb206e61
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/astro-cloudflare-wrangler-runtime",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "astro": "^3.2.3"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/src/env.d.ts
new file mode 100644
index 000000000..8c34fb45e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/src/env.d.ts
@@ -0,0 +1 @@
+/// <reference types="astro/client" /> \ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/src/pages/index.astro
new file mode 100644
index 000000000..8a3b20925
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/src/pages/index.astro
@@ -0,0 +1,15 @@
+---
+const runtime = Astro.locals.runtime;
+---
+<html>
+ <head>
+ <title>Testing</title>
+ </head>
+ <body>
+ <h1>Testing</h1>
+ <div id="hasRuntime">{!!runtime}</div>
+ <div id="hasENV">{!!runtime.env?.COOL}</div>
+ <div id="hasCF">{!!runtime.cf?.colo}</div>
+ <div id="hasCACHES">{!!runtime.caches}</div>
+ </body>
+</html>
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/wrangler.toml b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/wrangler.toml
new file mode 100644
index 000000000..ba0fa64c4
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-runtime/wrangler.toml
@@ -0,0 +1,4 @@
+name = "test"
+
+[vars]
+COOL = "ME"
diff --git a/packages/integrations/cloudflare/test/function-per-route.test.js b/packages/integrations/cloudflare/test/function-per-route.test.js
index f0287c717..19cbfde39 100644
--- a/packages/integrations/cloudflare/test/function-per-route.test.js
+++ b/packages/integrations/cloudflare/test/function-per-route.test.js
@@ -1,36 +1,33 @@
-import { loadFixture } from './test-utils.js';
import { expect } from 'chai';
+import { existsSync } from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { astroCli } from './_test-utils.js';
-/** @type {import('./test-utils.js').Fixture} */
-describe('Cloudflare SSR functionPerRoute', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
+const root = new URL('./fixtures/function-per-route/', import.meta.url);
+describe('Function per Route', () => {
before(async () => {
- fixture = await loadFixture({
- root: './fixtures/function-per-route/',
- });
- await fixture.build();
+ await astroCli(fileURLToPath(root), 'build');
});
- after(() => {
- fixture?.clean();
+ it('generates functions folder inside the project root', () => {
+ const testURL = new URL('functions', root);
+ expect(existsSync(fileURLToPath(testURL))).to.be.true;
});
- it('generates functions folders inside the project root, and checks that each page is emitted by astro', async () => {
- expect(await fixture.pathExists('../functions')).to.be.true;
- expect(await fixture.pathExists('../functions/index.js')).to.be.true;
- expect(await fixture.pathExists('../functions/blog/cool.js')).to.be.true;
- expect(await fixture.pathExists('../functions/blog/[post].js')).to.be.true;
- expect(await fixture.pathExists('../functions/[person]/[car].js')).to.be.true;
- expect(await fixture.pathExists('../functions/files/[[path]].js')).to.be.true;
- expect(await fixture.pathExists('../functions/[language]/files/[[path]].js')).to.be.true;
- expect(await fixture.pathExists('../functions/trpc/[trpc].js')).to.be.true;
- expect(await fixture.pathExists('../functions/javascript.js')).to.be.true;
- expect(await fixture.pathExists('../functions/test.json.js')).to.be.true;
+ it('generates functions bundles for each page', () => {
+ expect(existsSync(fileURLToPath(new URL('functions/index.js', root)))).to.be.true;
+ expect(existsSync(fileURLToPath(new URL('functions/blog/cool.js', root)))).to.be.true;
+ expect(existsSync(fileURLToPath(new URL('functions/blog/[post].js', root)))).to.be.true;
+ expect(existsSync(fileURLToPath(new URL('functions/[person]/[car].js', root)))).to.be.true;
+ expect(existsSync(fileURLToPath(new URL('functions/files/[[path]].js', root)))).to.be.true;
+ expect(existsSync(fileURLToPath(new URL('functions/[language]/files/[[path]].js', root)))).to.be.true;
+ expect(existsSync(fileURLToPath(new URL('functions/trpc/[trpc].js', root)))).to.be.true;
+ expect(existsSync(fileURLToPath(new URL('functions/javascript.js', root)))).to.be.true;
+ expect(existsSync(fileURLToPath(new URL('functions/test.json.js', root)))).to.be.true;
});
- it('generates pre-rendered files', async () => {
- expect(await fixture.pathExists('./prerender/index.html')).to.be.true;
+ it('generates html files for pre-rendered routes', () => {
+ expect(existsSync(fileURLToPath(new URL('dist/prerender/index.html', root)))).to.be.true;
});
});
diff --git a/packages/integrations/cloudflare/test/hybrid.test.js b/packages/integrations/cloudflare/test/hybrid.test.js
new file mode 100644
index 000000000..f0f0e01e0
--- /dev/null
+++ b/packages/integrations/cloudflare/test/hybrid.test.js
@@ -0,0 +1,22 @@
+import { readFileSync } from 'fs';
+import { astroCli } from './_test-utils.js';
+import { expect } from 'chai';
+import { fileURLToPath } from 'url';
+
+const root = new URL('./fixtures/hybrid/', import.meta.url);
+
+describe('Hybrid rendering', () => {
+ before(async () => {
+ await astroCli(fileURLToPath(root), 'build');
+ });
+
+ it('includes non prerendered routes in the routes.json config', async () => {
+ const foundRoutes = JSON.parse(readFileSync(fileURLToPath(new URL('dist/_routes.json', root))));
+
+ expect(foundRoutes).to.deep.equal({
+ version: 1,
+ include: ['/one', '/_image'],
+ exclude: [],
+ });
+ });
+});
diff --git a/packages/integrations/cloudflare/test/no-output.test.js b/packages/integrations/cloudflare/test/no-output.test.js
index af4d9c2b6..2320e0559 100644
--- a/packages/integrations/cloudflare/test/no-output.test.js
+++ b/packages/integrations/cloudflare/test/no-output.test.js
@@ -1,20 +1,14 @@
-import { loadFixture } from './test-utils.js';
import { expect } from 'chai';
+import { fileURLToPath } from 'node:url';
+import { astroCli } from './_test-utils.js';
-describe('Missing output config', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/no-output/',
- });
- });
+const root = new URL('./fixtures/no-output/', import.meta.url);
+describe('Missing output config', () => {
it('throws during the build', async () => {
let error = undefined;
try {
- await fixture.build();
+ await astroCli(fileURLToPath(root), 'build');
} catch (err) {
error = err;
}
diff --git a/packages/integrations/cloudflare/test/prerender.test.js b/packages/integrations/cloudflare/test/prerender.test.js
index 6c2b8c5bb..8ba43f9e5 100644
--- a/packages/integrations/cloudflare/test/prerender.test.js
+++ b/packages/integrations/cloudflare/test/prerender.test.js
@@ -1,25 +1,17 @@
-import { loadFixture } from './test-utils.js';
+import { readFileSync } from 'fs';
+import { astroCli } from './_test-utils.js';
import { expect } from 'chai';
+import { fileURLToPath } from 'url';
-describe('Prerendering', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
+const root = new URL('./fixtures/prerender/', import.meta.url);
+describe('Prerendering', () => {
before(async () => {
- process.env.PRERENDER = true;
- fixture = await loadFixture({
- root: './fixtures/prerender/',
- });
- await fixture.build();
- });
-
- after(() => {
- delete process.env.PRERENDER;
- fixture.clean();
+ await astroCli(fileURLToPath(root), 'build');
});
it('includes non prerendered routes in the routes.json config', async () => {
- const foundRoutes = JSON.parse(await fixture.readFile('/_routes.json'));
+ const foundRoutes = JSON.parse(readFileSync(fileURLToPath(new URL('dist/_routes.json', root))));
expect(foundRoutes).to.deep.equal({
version: 1,
@@ -28,31 +20,3 @@ describe('Prerendering', () => {
});
});
});
-
-describe('Hybrid rendering', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- process.env.PRERENDER = false;
- fixture = await loadFixture({
- root: './fixtures/prerender/',
- output: 'hybrid',
- });
- await fixture.build();
- });
-
- after(() => {
- delete process.env.PRERENDER;
- });
-
- it('includes non prerendered routes in the routes.json config', async () => {
- const foundRoutes = JSON.parse(await fixture.readFile('/_routes.json'));
-
- expect(foundRoutes).to.deep.equal({
- version: 1,
- include: ['/one', '/_image'],
- exclude: [],
- });
- });
-});
diff --git a/packages/integrations/cloudflare/test/routes-json.test.js b/packages/integrations/cloudflare/test/routes-json.test.js
index 9c5cfad4a..d4cab6d60 100644
--- a/packages/integrations/cloudflare/test/routes-json.test.js
+++ b/packages/integrations/cloudflare/test/routes-json.test.js
@@ -1,15 +1,13 @@
import { expect } from 'chai';
-import { loadFixture } from './test-utils.js';
-import cloudflare from '../dist/index.js';
+import { astroCli } from './_test-utils.js';
+
+const root = new URL('./fixtures/routes-json/', import.meta.url);
-/** @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/',
diff --git a/packages/integrations/cloudflare/test/runtime.test.js b/packages/integrations/cloudflare/test/runtime.test.js
deleted file mode 100644
index e0d77d5c6..000000000
--- a/packages/integrations/cloudflare/test/runtime.test.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import { loadFixture, runCLI } from './test-utils.js';
-import { expect } from 'chai';
-import * as cheerio from 'cheerio';
-import cloudflare from '../dist/index.js';
-
-describe('Runtime Locals', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
- /** @type {import('./test-utils.js').WranglerCLI} */
- let cli;
-
- before(async function () {
- fixture = await loadFixture({
- root: './fixtures/runtime/',
- output: 'server',
- adapter: cloudflare(),
- });
- await fixture.build();
-
- cli = await runCLI('./fixtures/runtime/', {
- silent: true,
- onTimeout: (ex) => {
- console.log(ex);
- // if fail to start, skip for now as it's very flaky
- this.skip();
- },
- });
- });
-
- after(async () => {
- await cli?.stop();
- });
-
- it('has CF and Caches', async () => {
- let res = await fetch(`http://127.0.0.1:${cli.port}/`);
- expect(res.status).to.equal(200);
- let html = await res.text();
- let $ = cheerio.load(html);
- expect($('#env').text()).to.contain('SECRET_STUFF');
- expect($('#env').text()).to.contain('secret');
- expect($('#hasRuntime').text()).to.contain('true');
- expect($('#hasCache').text()).to.equal('true');
- });
-});
diff --git a/packages/integrations/cloudflare/test/test-utils.js b/packages/integrations/cloudflare/test/test-utils.js
deleted file mode 100644
index 5e0c698f4..000000000
--- a/packages/integrations/cloudflare/test/test-utils.js
+++ /dev/null
@@ -1,169 +0,0 @@
-import { spawn } from 'node:child_process';
-import { fileURLToPath } from 'node:url';
-import { loadFixture as baseLoadFixture } from '../../../astro/test/test-utils.js';
-import * as net from 'node:net';
-export { fixLineEndings } from '../../../astro/test/test-utils.js';
-/**
- * @typedef {{ stop: Promise<void>, port: number }} WranglerCLI
- * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture
- */
-
-export function loadFixture(config) {
- if (config?.root) {
- config.root = new URL(config.root, import.meta.url);
- }
- return baseLoadFixture(config);
-}
-
-const wranglerPath = fileURLToPath(
- new URL('../node_modules/wrangler/bin/wrangler.js', import.meta.url)
-);
-
-let lastPort = 8788;
-
-/**
- * @returns {Promise<WranglerCLI>}
- */
-export async function runCLI(
- basePath,
- {
- silent,
- maxAttempts = 3,
- timeoutMillis = 2500, // really short because it often seems to just hang on the first try, but work subsequently, no matter the wait
- backoffFactor = 2, // | - 2.5s -- 5s ---- 10s -> onTimeout
- onTimeout = (ex) => {
- new Error(`Timed out starting the wrangler CLI after ${maxAttempts} tries.`, { cause: ex });
- },
- }
-) {
- let triesRemaining = maxAttempts;
- let timeout = timeoutMillis;
- let cli;
- let lastErr;
- while (triesRemaining > 0) {
- cli = await tryRunCLI(basePath, {
- silent,
- timeout,
- forceRotatePort: triesRemaining !== maxAttempts,
- });
- try {
- await cli.ready;
- return cli;
- } catch (err) {
- lastErr = err;
- console.error((err.message || err.name || err) + ' after ' + timeout + 'ms');
- cli.stop();
- triesRemaining -= 1;
- timeout *= backoffFactor;
- }
- }
- onTimeout(lastErr);
- return cli;
-}
-
-async function tryRunCLI(basePath, { silent, timeout, forceRotatePort = false }) {
- const port = await getNextOpenPort(lastPort + (forceRotatePort ? 1 : 0));
- lastPort = port;
-
- const fixtureDir = fileURLToPath(new URL(`${basePath}`, import.meta.url));
- const p = spawn(
- 'node',
- [
- wranglerPath,
- 'pages',
- 'dev',
- 'dist',
- '--port',
- port,
- '--log-level',
- 'info',
- '--persist-to',
- '.wrangler/state',
- ],
- {
- cwd: fixtureDir,
- }
- );
-
- p.stderr.setEncoding('utf-8');
- p.stdout.setEncoding('utf-8');
-
- const ready = new Promise(async (resolve, reject) => {
- const failed = setTimeout(() => {
- p.kill('SIGKILL');
- reject(new Error(`Timed out starting the wrangler CLI`));
- }, timeout);
-
- const success = () => {
- clearTimeout(failed);
- resolve();
- };
-
- p.on('exit', (code) => reject(`wrangler terminated unexpectedly with exit code ${code}`));
-
- p.stderr.on('data', (data) => {
- if (!silent) {
- process.stdout.write(data);
- }
- });
- let allData = '';
- p.stdout.on('data', (data) => {
- if (!silent) {
- process.stdout.write(data);
- }
- allData += data;
- if (allData.includes(`[mf:inf] Ready on`)) {
- success();
- }
- });
- });
-
- return {
- port,
- ready,
- stop() {
- return new Promise((resolve, reject) => {
- const timer = setTimeout(() => {
- p.kill('SIGKILL');
- }, 1000);
- p.on('close', () => {
- clearTimeout(timer);
- resolve();
- });
- p.on('error', (err) => reject(err));
- p.kill();
- });
- },
- };
-}
-
-const isPortOpen = async (port) => {
- return new Promise((resolve, reject) => {
- let s = net.createServer();
- s.once('error', (err) => {
- s.close();
- if (err['code'] == 'EADDRINUSE') {
- resolve(false);
- } else {
- reject(err);
- }
- });
- s.once('listening', () => {
- resolve(true);
- s.close();
- });
- s.listen(port, '0.0.0.0');
- });
-};
-
-const getNextOpenPort = async (startFrom) => {
- let openPort = null;
- while (startFrom < 65535 || !!openPort) {
- if (await isPortOpen(startFrom)) {
- openPort = startFrom;
- break;
- }
- startFrom++;
- }
- return openPort;
-};
diff --git a/packages/integrations/cloudflare/test/wasm-directory.test.js b/packages/integrations/cloudflare/test/wasm-directory.test.js
index 0f387a660..30d709ad3 100644
--- a/packages/integrations/cloudflare/test/wasm-directory.test.js
+++ b/packages/integrations/cloudflare/test/wasm-directory.test.js
@@ -1,36 +1,38 @@
-import { loadFixture, runCLI } from './test-utils.js';
-import { expect } from 'chai';
+import { expect } from "chai";
+import { fileURLToPath } from "node:url";
+import { astroCli, wranglerCli } from "./_test-utils.js";
-describe('Wasm directory mode import', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
- /** @type {import('./test-utils.js').WranglerCLI} */
- let cli;
+const root = new URL("./fixtures/wasm-directory/", import.meta.url);
- before(async function () {
- fixture = await loadFixture({
- root: './fixtures/wasm-directory/',
- });
- await fixture.build();
+describe("Wasm directory mode import", () => {
+ let wrangler;
+ before(async () => {
+ await astroCli(fileURLToPath(root), "build");
- cli = await runCLI('./fixtures/wasm-directory/', {
- silent: true,
- onTimeout: (ex) => {
- console.log(ex);
- // if fail to start, skip for now as it's very flaky
- this.skip();
- },
- });
- });
+ wrangler = wranglerCli(fileURLToPath(root));
+ await new Promise((resolve) => {
+ wrangler.stdout.on("data", (data) => {
+ console.log("[stdout]", data.toString());
+ if (data.toString().includes("http://127.0.0.1:8788")) resolve();
+ });
+ wrangler.stderr.on("data", (data) => {
+ console.log("[stderr]", data.toString());
+ });
+ });
+ });
- after(async () => {
- await cli?.stop();
- });
+ after((done) => {
+ wrangler.kill();
+ setTimeout(() => {
+ console.log("CLEANED");
+ done();
+ }, 1000);
+ });
- it('can render', async () => {
- let res = await fetch(`http://127.0.0.1:${cli.port}/`);
- expect(res.status).to.equal(200);
- const json = await res.json();
- expect(json).to.deep.equal({ answer: 42 });
- });
+ it("can render", async () => {
+ let res = await fetch(`http://127.0.0.1:8788/`);
+ expect(res.status).to.equal(200);
+ const json = await res.json();
+ expect(json).to.deep.equal({ answer: 42 });
+ });
});
diff --git a/packages/integrations/cloudflare/test/wasm-function-per-route.test.js b/packages/integrations/cloudflare/test/wasm-function-per-route.test.js
index f751f1ff4..140bb90b7 100644
--- a/packages/integrations/cloudflare/test/wasm-function-per-route.test.js
+++ b/packages/integrations/cloudflare/test/wasm-function-per-route.test.js
@@ -1,41 +1,43 @@
-import { loadFixture, runCLI } from './test-utils.js';
-import { expect } from 'chai';
+import { expect } from "chai";
+import { fileURLToPath } from "node:url";
+import { astroCli, wranglerCli } from "./_test-utils.js";
-describe('Wasm function per route import', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
- /** @type {import('./test-utils.js').WranglerCLI} */
- let cli;
+const root = new URL("./fixtures/wasm-function-per-route/", import.meta.url);
- before(async function () {
- fixture = await loadFixture({
- root: './fixtures/wasm-function-per-route/',
- });
- await fixture.build();
+describe("Wasm function per route import", () => {
+ let wrangler;
+ before(async () => {
+ await astroCli(fileURLToPath(root), "build");
- cli = await runCLI('./fixtures/wasm-function-per-route/', {
- silent: true,
- onTimeout: (ex) => {
- console.log(ex);
- // if fail to start, skip for now as it's very flaky
- this.skip();
- },
- });
- });
+ wrangler = wranglerCli(fileURLToPath(root));
+ await new Promise((resolve) => {
+ wrangler.stdout.on("data", (data) => {
+ console.log("[stdout]", data.toString());
+ if (data.toString().includes("http://127.0.0.1:8788")) resolve();
+ });
+ wrangler.stderr.on("data", (data) => {
+ console.log("[stderr]", data.toString());
+ });
+ });
+ });
- after(async () => {
- await cli?.stop();
- });
+ after((done) => {
+ wrangler.kill();
+ setTimeout(() => {
+ console.log("CLEANED");
+ done();
+ }, 1000);
+ });
- it('can render', async () => {
- let res = await fetch(`http://127.0.0.1:${cli.port}/`);
- expect(res.status).to.equal(200);
- let json = await res.json();
- expect(json).to.deep.equal({ answer: 42 });
+ it("can render", async () => {
+ let res = await fetch(`http://127.0.0.1:8788/`);
+ expect(res.status).to.equal(200);
+ let json = await res.json();
+ expect(json).to.deep.equal({ answer: 42 });
- res = await fetch(`http://127.0.0.1:${cli.port}/deeply/nested/route`);
- expect(res.status).to.equal(200);
- json = await res.json();
- expect(json).to.deep.equal({ answer: 84 });
- });
+ res = await fetch(`http://127.0.0.1:8788/deeply/nested/route`);
+ expect(res.status).to.equal(200);
+ json = await res.json();
+ expect(json).to.deep.equal({ answer: 84 });
+ });
});
diff --git a/packages/integrations/cloudflare/test/wasm.test.js b/packages/integrations/cloudflare/test/wasm.test.js
index 279a00cd1..7f440922e 100644
--- a/packages/integrations/cloudflare/test/wasm.test.js
+++ b/packages/integrations/cloudflare/test/wasm.test.js
@@ -1,85 +1,37 @@
-import { loadFixture, runCLI } from './test-utils.js';
-import { expect } from 'chai';
-import cloudflare from '../dist/index.js';
-
-describe('Wasm import', () => {
- describe('in cloudflare workerd', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
- /** @type {import('./test-utils.js').WranglerCLI} */
- let cli;
-
- before(async function () {
- fixture = await loadFixture({
- root: './fixtures/wasm/',
- });
- await fixture.build();
-
- cli = await runCLI('./fixtures/wasm/', {
- silent: true,
- onTimeout: (ex) => {
- console.log(ex);
- // if fail to start, skip for now as it's very flaky
- this.skip();
- },
- });
- });
-
- after(async () => {
- await cli?.stop();
- });
-
- it('can render', async () => {
- let res = await fetch(`http://127.0.0.1:${cli.port}/add/40/2`);
- expect(res.status).to.equal(200);
- const json = await res.json();
- expect(json).to.deep.equal({ answer: 42 });
- });
- });
- describe('astro dev server', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let devServer;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/wasm/',
- });
- devServer = undefined;
- });
-
- after(async () => {
- await devServer?.stop();
- });
-
- it('can serve wasm', async () => {
- devServer = await fixture.startDevServer();
- let res = await fetch(`http://localhost:${devServer.address.port}/add/60/3`);
- expect(res.status).to.equal(200);
- const json = await res.json();
- expect(json).to.deep.equal({ answer: 63 });
- });
-
- it('fails to build intelligently when wasm is disabled', async () => {
- let ex;
- try {
- await fixture.build({
- adapter: cloudflare({
- wasmModuleImports: false,
- }),
- });
- } catch (err) {
- ex = err;
- }
- expect(ex?.message).to.have.string('add `wasmModuleImports: true` to your astro config');
- });
-
- it('can import wasm in both SSR and SSG pages', async () => {
- await fixture.build({ output: 'hybrid' });
- const staticContents = await fixture.readFile('./hybrid');
- expect(staticContents).to.be.equal('{"answer":21}');
- const assets = await fixture.readdir('./_astro');
- expect(assets.map((x) => x.slice(x.lastIndexOf('.')))).to.contain('.wasm');
- });
- });
+import { expect } from "chai";
+import { fileURLToPath } from "node:url";
+import { astroCli, wranglerCli } from "./_test-utils.js";
+
+const root = new URL("./fixtures/wasm/", import.meta.url);
+
+describe("Wasm import", () => {
+ before(async function () {
+ await astroCli(fileURLToPath(root), "build");
+
+ wrangler = wranglerCli(fileURLToPath(root));
+ await new Promise((resolve) => {
+ wrangler.stdout.on("data", (data) => {
+ console.log("[stdout]", data.toString());
+ if (data.toString().includes("http://127.0.0.1:8788")) resolve();
+ });
+ wrangler.stderr.on("data", (data) => {
+ console.log("[stderr]", data.toString());
+ });
+ });
+ });
+
+ after((done) => {
+ wrangler.kill();
+ setTimeout(() => {
+ console.log("CLEANED");
+ done();
+ }, 1000);
+ });
+
+ it("can render", async () => {
+ let res = await fetch(`http://127.0.0.1:8788/add/40/2`);
+ expect(res.status).to.equal(200);
+ const json = await res.json();
+ expect(json).to.deep.equal({ answer: 42 });
+ });
});
diff --git a/packages/integrations/cloudflare/test/with-solid-js.test.js b/packages/integrations/cloudflare/test/with-solid-js.test.js
index 501a947d0..dd097b700 100644
--- a/packages/integrations/cloudflare/test/with-solid-js.test.js
+++ b/packages/integrations/cloudflare/test/with-solid-js.test.js
@@ -1,38 +1,40 @@
-import { loadFixture, runCLI } from './test-utils.js';
-import { expect } from 'chai';
-import * as cheerio from 'cheerio';
+import { expect } from "chai";
+import * as cheerio from "cheerio";
+import { fileURLToPath } from "node:url";
+import { astroCli, wranglerCli } from "./_test-utils.js";
-describe('With SolidJS', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- /** @type {import('./test-utils').WranglerCLI} */
- let cli;
+const root = new URL("./fixtures/with-solid-js/", import.meta.url);
- before(async function () {
- fixture = await loadFixture({
- root: './fixtures/with-solid-js/',
- });
- await fixture.build();
+describe("With SolidJS", () => {
+ let wrangler;
+ before(async () => {
+ await astroCli(fileURLToPath(root), "build");
- cli = await runCLI('./fixtures/with-solid-js/', {
- silent: true,
- onTimeout: (ex) => {
- console.log(ex);
- // if fail to start, skip for now as it's very flaky
- this.skip();
- },
- });
- });
+ wrangler = wranglerCli(fileURLToPath(root));
+ await new Promise((resolve) => {
+ wrangler.stdout.on("data", (data) => {
+ console.log("[stdout]", data.toString());
+ if (data.toString().includes("http://127.0.0.1:8788")) resolve();
+ });
+ wrangler.stderr.on("data", (data) => {
+ console.log("[stderr]", data.toString());
+ });
+ });
+ });
- after(async () => {
- await cli?.stop();
- });
+ after((done) => {
+ wrangler.kill();
+ setTimeout(() => {
+ console.log("CLEANED");
+ done();
+ }, 1000);
+ });
- it('renders the solid component', async () => {
- let res = await fetch(`http://127.0.0.1:${cli.port}/`);
- expect(res.status).to.equal(200);
- let html = await res.text();
- let $ = cheerio.load(html);
- expect($('.solid').text()).to.equal('Solid Content');
- });
+ it("renders the solid component", async () => {
+ let res = await fetch(`http://127.0.0.1:8788/`);
+ expect(res.status).to.equal(200);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($(".solid").text()).to.equal("Solid Content");
+ });
});
diff --git a/packages/integrations/cloudflare/test/wrangler-runtime.test.js b/packages/integrations/cloudflare/test/wrangler-runtime.test.js
new file mode 100644
index 000000000..c843cfd6c
--- /dev/null
+++ b/packages/integrations/cloudflare/test/wrangler-runtime.test.js
@@ -0,0 +1,61 @@
+import { expect } from "chai";
+import * as cheerio from "cheerio";
+import { fileURLToPath } from "node:url";
+import { astroCli, wranglerCli } from "./_test-utils.js";
+
+const root = new URL("./fixtures/wrangler-runtime/", import.meta.url);
+
+describe("Runtime Wrangler", () => {
+ let wrangler;
+
+ before(async () => {
+ await astroCli(fileURLToPath(root), "build");
+
+ wrangler = wranglerCli(fileURLToPath(root));
+ await new Promise((resolve) => {
+ wrangler.stdout.on("data", (data) => {
+ console.log("[stdout]", data.toString());
+ if (data.toString().includes("http://127.0.0.1:8788")) resolve();
+ });
+ wrangler.stderr.on("data", (data) => {
+ console.log("[stderr]", data.toString());
+ });
+ });
+ });
+
+ after((done) => {
+ wrangler.kill();
+ setTimeout(() => {
+ console.log("CLEANED");
+ done();
+ }, 1000);
+ });
+
+ it("exists", async () => {
+ let res = await fetch(`http://127.0.0.1:8788/`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasRuntime").text()).to.contain("true");
+ });
+
+ it("has environment variables", async () => {
+ let res = await fetch(`http://127.0.0.1:8788/`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasENV").text()).to.contain("true");
+ });
+
+ it("has Cloudflare request object", async () => {
+ let res = await fetch(`http://127.0.0.1:8788/`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasCF").text()).to.contain("true");
+ });
+
+ it("has Cloudflare cache", async () => {
+ let res = await fetch(`http://127.0.0.1:8788/`);
+ let html = await res.text();
+ let $ = cheerio.load(html);
+ expect($("#hasCACHES").text()).to.contain("true");
+ });
+});
diff --git a/packages/integrations/cloudflare/test/wrangler.toml b/packages/integrations/cloudflare/test/wrangler.toml
deleted file mode 100644
index 2c1acb55a..000000000
--- a/packages/integrations/cloudflare/test/wrangler.toml
+++ /dev/null
@@ -1,6 +0,0 @@
-# for tests only
-
-send_metrics = false
-
-[vars]
-SECRET_STUFF = "secret"