Skip to content

Commit 9bf6646

Browse files
committed
add tests
1 parent 8919028 commit 9bf6646

2 files changed

Lines changed: 84 additions & 1 deletion

File tree

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { describe, expect, it, vi, beforeEach } from "vitest";
2+
import type { FetchEvent } from "./types.ts";
3+
4+
vi.mock("h3", () => ({
5+
parseCookies: vi.fn(() => ({})),
6+
parseSetCookie: vi.fn(),
7+
}));
8+
9+
vi.mock("solid-js/web", () => ({
10+
renderToString: vi.fn(),
11+
provideRequestEvent: vi.fn((_event, fn) => fn()),
12+
}));
13+
14+
vi.mock("solidstart:server-fn-manifest", () => ({
15+
getServerFnById: vi.fn(),
16+
}));
17+
18+
vi.mock("./handler.ts", () => ({
19+
createPageEvent: vi.fn(),
20+
}));
21+
22+
vi.mock("./fetchEvent.ts", () => ({
23+
getFetchEvent: vi.fn(),
24+
mergeResponseHeaders: vi.fn(),
25+
}));
26+
27+
function createMockFetchEvent(headers: Record<string, string> = {}): FetchEvent {
28+
return {
29+
request: new Request("http://localhost/test", { headers }),
30+
response: {
31+
headers: {
32+
getSetCookie: () => [],
33+
},
34+
},
35+
nativeEvent: {},
36+
} as FetchEvent;
37+
}
38+
39+
describe("createSingleFlightHeaders", () => {
40+
let createSingleFlightHeaders: (sourceEvent: FetchEvent) => Headers;
41+
42+
beforeEach(async () => {
43+
vi.clearAllMocks();
44+
const module = await import("./server-functions-handler.ts");
45+
createSingleFlightHeaders = module.createSingleFlightHeaders;
46+
});
47+
48+
it("should create a new Headers object instead of returning the original", () => {
49+
const sourceEvent = createMockFetchEvent({
50+
"content-type": "application/json",
51+
});
52+
53+
const result = createSingleFlightHeaders(sourceEvent);
54+
55+
expect(result).not.toBe(sourceEvent.request.headers);
56+
});
57+
58+
it("should not mutate the original request headers", () => {
59+
const originalHeaders = new Headers({
60+
"content-type": "application/json",
61+
"cookie": "session=abc123",
62+
"cf-ray": "abc123",
63+
"cf-cache-status": "HIT",
64+
});
65+
const sourceEvent: FetchEvent = {
66+
request: new Request("http://localhost/test", { headers: originalHeaders }),
67+
response: {
68+
headers: {
69+
getSetCookie: () => [],
70+
},
71+
},
72+
nativeEvent: {},
73+
} as FetchEvent;
74+
75+
const originalCookieHeader = sourceEvent.request.headers.get("cookie");
76+
const originalCfRay = sourceEvent.request.headers.get("cf-ray");
77+
78+
createSingleFlightHeaders(sourceEvent);
79+
80+
expect(sourceEvent.request.headers.get("cookie")).toBe(originalCookieHeader);
81+
expect(sourceEvent.request.headers.get("cf-ray")).toBe(originalCfRay);
82+
});
83+
});

packages/start/src/server/server-functions-handler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ function handleNoJS(result: any, request: Request, parsed: any[], thrown?: boole
195195
}
196196

197197
let App: any;
198-
function createSingleFlightHeaders(sourceEvent: FetchEvent) {
198+
export function createSingleFlightHeaders(sourceEvent: FetchEvent) {
199199
// cookie handling logic is pretty simplistic so this might be imperfect
200200
// unclear if h3 internals are available on all platforms but we need a way to
201201
// update request headers on the underlying H3 event.

0 commit comments

Comments
 (0)