Skip to content

Commit 11b29b5

Browse files
committed
Add tests for reversed plugin order
1 parent afc627d commit 11b29b5

File tree

1 file changed

+70
-27
lines changed

1 file changed

+70
-27
lines changed

integration/vite-plugin-cloudflare-test.ts

Lines changed: 70 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,70 @@ import { type Files, test, viteConfig } from "./helpers/vite.js";
66
const tsx = dedent;
77
const css = dedent;
88

9-
test.describe("vite-plugin-cloudflare", () => {
9+
function defineFiles({
10+
reversePlugins = false,
11+
}: { reversePlugins?: boolean } = {}): Files {
1012
const files: Files = async ({ port }) => ({
1113
"vite.config.ts": tsx`
12-
import { defineConfig } from "vite";
13-
import { cloudflare } from "@cloudflare/vite-plugin";
14-
import { reactRouter } from "@react-router/dev/vite";
15-
16-
export default defineConfig({
17-
${await viteConfig.server({ port })}
18-
plugins: [
19-
cloudflare({ viteEnvironment: { name: "ssr" } }),
20-
reactRouter(),
21-
],
22-
});
23-
`,
14+
import { defineConfig } from "vite";
15+
import { cloudflare } from "@cloudflare/vite-plugin";
16+
import { reactRouter } from "@react-router/dev/vite";
17+
18+
export default defineConfig({
19+
${await viteConfig.server({ port })}
20+
plugins: [
21+
cloudflare({ viteEnvironment: { name: "ssr" } }),
22+
reactRouter(),
23+
]${reversePlugins ? ".reverse()" : ""},
24+
});
25+
`,
2426
"app/routes/env.tsx": tsx`
25-
import type { Route } from "./+types/env";
26-
export function loader({ context }: Route.LoaderArgs) {
27-
return { message: context.cloudflare.env.VALUE_FROM_CLOUDFLARE };
28-
}
29-
export default function EnvRoute({ loaderData }: Route.RouteComponentProps) {
30-
return <div data-loader-message>{loaderData.message}</div>;
31-
}
32-
`,
27+
import type { Route } from "./+types/env";
28+
export function loader({ context }: Route.LoaderArgs) {
29+
return { message: context.cloudflare.env.VALUE_FROM_CLOUDFLARE };
30+
}
31+
export default function EnvRoute({ loaderData }: Route.RouteComponentProps) {
32+
return <div data-loader-message>{loaderData.message}</div>;
33+
}
34+
`,
3335
"app/routes/css-side-effect/route.tsx": tsx`
34-
import "./styles.css";
35-
36-
export default function CssSideEffectRoute() {
37-
return <div className="css-side-effect" data-css-side-effect>CSS Side Effect</div>;
38-
}
39-
`,
36+
import "./styles.css";
37+
38+
export default function CssSideEffectRoute() {
39+
return <div className="css-side-effect" data-css-side-effect>CSS Side Effect</div>;
40+
}
41+
`,
4042
"app/routes/css-side-effect/styles.css": css`
4143
.css-side-effect {
4244
padding: 20px;
4345
}
4446
`,
4547
});
48+
return files;
49+
}
4650

51+
test.describe("vite-plugin-cloudflare", () => {
4752
test("handles Cloudflare env", async ({ dev, page }) => {
53+
const files = defineFiles();
54+
const { port } = await dev(files, "vite-plugin-cloudflare-template");
55+
56+
await page.goto(`http://localhost:${port}/env`, {
57+
waitUntil: "networkidle",
58+
});
59+
60+
// Ensure no errors on page load
61+
expect(page.errors).toEqual([]);
62+
63+
await expect(page.locator("[data-loader-message]")).toHaveText(
64+
"Hello from Cloudflare"
65+
);
66+
});
67+
68+
test("handles Cloudflare env with plugin order reversed", async ({
69+
dev,
70+
page,
71+
}) => {
72+
const files = defineFiles({ reversePlugins: true });
4873
const { port } = await dev(files, "vite-plugin-cloudflare-template");
4974

5075
await page.goto(`http://localhost:${port}/env`, {
@@ -66,6 +91,7 @@ test.describe("vite-plugin-cloudflare", () => {
6691
dev,
6792
page,
6893
}) => {
94+
const files = defineFiles();
6995
const { port } = await dev(files, "vite-plugin-cloudflare-template");
7096

7197
await page.goto(`http://localhost:${port}/css-side-effect`, {
@@ -78,4 +104,21 @@ test.describe("vite-plugin-cloudflare", () => {
78104
);
79105
});
80106
});
107+
108+
test("handles CSS side effects during SSR in dev with plugin order reversed", async ({
109+
dev,
110+
page,
111+
}) => {
112+
const files = defineFiles({ reversePlugins: true });
113+
const { port } = await dev(files, "vite-plugin-cloudflare-template");
114+
115+
await page.goto(`http://localhost:${port}/css-side-effect`, {
116+
waitUntil: "networkidle",
117+
});
118+
119+
await expect(page.locator("[data-css-side-effect]")).toHaveCSS(
120+
"padding",
121+
"20px"
122+
);
123+
});
81124
});

0 commit comments

Comments
 (0)