Files
wehub-resource-sync 70bf21e064
Deploy (to testing) and Test Playground Preview Worker / Deploy Playground Preview Worker (testing) (push) Has been skipped
Deploy Workers Shared Staging / Deploy Workers Shared Staging (push) Failing after 0s
Prerelease / build (push) Has been skipped
Handle Changesets / Handle Changesets (push) Has been cancelled
Semgrep OSS scan / semgrep-oss (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:30:11 +08:00

251 lines
6.5 KiB
TypeScript

import { NpmPackageManager } from "@cloudflare/workers-utils";
import { mockConsoleMethods } from "@cloudflare/workers-utils/test-helpers";
import { dedent } from "ts-dedent";
import { describe, test } from "vitest";
import { Astro } from "../src/frameworks/astro";
import { Static } from "../src/frameworks/static";
import { buildOperationsSummary } from "../src/run";
import { createMockContext } from "./helpers/mock-context";
import type { RawConfig } from "@cloudflare/workers-utils";
const testRawConfig: RawConfig = {
$schema: "node_modules/wrangler/config-schema.json",
name: "worker-name",
compatibility_date: "2025-01-01",
observability: {
enabled: true,
},
};
describe("autoconfig run - buildOperationsSummary()", () => {
const std = mockConsoleMethods();
const context = createMockContext();
describe("interactive mode", () => {
test("presents a summary for a simple project where only a wrangler.jsonc file needs to be created", async ({
expect,
}) => {
const summary = await buildOperationsSummary(
{
workerName: "worker-name",
projectPath: "<PROJECT_PATH>",
configured: false,
outputDir: "public",
framework: new Static({ id: "static", name: "Static" }),
packageManager: NpmPackageManager,
},
testRawConfig,
{
build: "npm run build",
deploy: "npx wrangler deploy",
version: "npx wrangler versions upload",
},
context
);
expect(std.out).toMatchInlineSnapshot(`
"
📄 Create wrangler.jsonc:
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "worker-name",
"compatibility_date": "2025-01-01",
"observability": {
"enabled": true
}
}
"
`);
expect(summary).toMatchInlineSnapshot(`
{
"buildCommand": "npm run build",
"deployCommand": "npx wrangler deploy",
"frameworkId": "static",
"outputDir": "public",
"scripts": {},
"versionCommand": "npx wrangler versions upload",
"wranglerConfig": {
"$schema": "node_modules/wrangler/config-schema.json",
"compatibility_date": "2025-01-01",
"name": "worker-name",
"observability": {
"enabled": true,
},
},
"wranglerInstall": false,
}
`);
});
test("shows that wrangler will be added as a devDependency when not already installed as such", async ({
expect,
}) => {
const summary = await buildOperationsSummary(
{
workerName: "worker-name",
projectPath: "<PROJECT_PATH>",
packageJson: {
name: "my-project",
devDependencies: {},
},
configured: false,
outputDir: "dist",
framework: new Static({ id: "static", name: "Static" }),
packageManager: NpmPackageManager,
},
testRawConfig,
{
build: "npm run build",
deploy: "npx wrangler deploy",
version: "npx wrangler versions upload",
},
context
);
expect(std.out).toContain(
dedent`
📦 Install packages:
- wrangler (devDependency)
`
);
expect(summary).toMatchInlineSnapshot(`
{
"buildCommand": "npm run build",
"deployCommand": "npx wrangler deploy",
"frameworkId": "static",
"outputDir": "dist",
"scripts": {
"deploy": "wrangler deploy",
"preview": "wrangler dev",
},
"versionCommand": "npx wrangler versions upload",
"wranglerConfig": {
"$schema": "node_modules/wrangler/config-schema.json",
"compatibility_date": "2025-01-01",
"name": "worker-name",
"observability": {
"enabled": true,
},
},
"wranglerInstall": true,
}
`);
});
test("when a package.json is present wrangler@latest will be unconditionally installed (even if already present)", async ({
expect,
}) => {
const summary = await buildOperationsSummary(
{
workerName: "worker-name",
projectPath: "<PROJECT_PATH>",
packageJson: {
name: "my-project",
devDependencies: {
wrangler: "^4.0.0",
},
},
configured: false,
outputDir: "out",
framework: new Static({ id: "static", name: "Static" }),
packageManager: NpmPackageManager,
},
testRawConfig,
{
build: "npm run build",
deploy: "npx wrangler deploy",
version: "npx wrangler versions upload",
},
context
);
expect(std.out).toContain(
dedent`
📦 Install packages:
- wrangler (devDependency)
`
);
expect(summary).toMatchInlineSnapshot(`
{
"buildCommand": "npm run build",
"deployCommand": "npx wrangler deploy",
"frameworkId": "static",
"outputDir": "out",
"scripts": {
"deploy": "wrangler deploy",
"preview": "wrangler dev",
},
"versionCommand": "npx wrangler versions upload",
"wranglerConfig": {
"$schema": "node_modules/wrangler/config-schema.json",
"compatibility_date": "2025-01-01",
"name": "worker-name",
"observability": {
"enabled": true,
},
},
"wranglerInstall": true,
}
`);
});
test("shows that when needed a framework specific configuration will be run", async ({
expect,
}) => {
const summary = await buildOperationsSummary(
{
workerName: "worker-name",
projectPath: "<PROJECT_PATH>",
framework: new Astro({ id: "astro", name: "Astro" }),
configured: false,
outputDir: "dist",
packageManager: NpmPackageManager,
},
testRawConfig,
{
build: "npm run build",
deploy: "npx wrangler deploy",
},
context
);
expect(std.out).toContain(
'🛠️ Configuring project for Astro with "astro add cloudflare"'
);
expect(summary.frameworkConfiguration).toBe(
'Configuring project for Astro with "astro add cloudflare"'
);
expect(summary.frameworkId).toBe("astro");
});
test("doesn't show the framework specific configuration step for the Static framework", async ({
expect,
}) => {
const summary = await buildOperationsSummary(
{
workerName: "worker-name",
projectPath: "<PROJECT_PATH>",
framework: new Static({ id: "static", name: "Static" }),
configured: false,
outputDir: "public",
packageManager: NpmPackageManager,
},
testRawConfig,
{
build: "npm run build",
deploy: "npx wrangler deploy",
},
context
);
expect(std.out).not.toContain("🛠️ Configuring project for");
expect(summary.frameworkConfiguration).toBeUndefined();
});
});
});