Skip to content

Commit 6b3e3a7

Browse files
committed
refactor
1 parent 2ef83c7 commit 6b3e3a7

2 files changed

Lines changed: 29 additions & 22 deletions

File tree

src/github.test.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,10 @@ describe("GitHub", () => {
114114
expect(await git(remote, ["rev-parse", "refs/tags/v1.0.0"])).toBe(
115115
await git(repository, ["rev-parse", "v1.0.0"]),
116116
);
117-
expect(server.receivedAuthorizationHeaders.length).toBeGreaterThan(0);
118-
expect(server.receivedAuthorizationHeaders).toEqual(
119-
server.receivedAuthorizationHeaders.map(() => [
120-
getAuthorization(actionToken),
121-
]),
122-
);
117+
expect(server.requests.length).toBeGreaterThan(0);
118+
expect(
119+
server.requests.map((request) => request.headers.authorization),
120+
).toEqual(server.requests.map(() => [getAuthorization(actionToken)]));
123121
}, 15_000);
124122

125123
it("uses github-token instead of credentials embedded in the CLI push URL", async () => {
@@ -166,11 +164,9 @@ describe("GitHub", () => {
166164
expect(
167165
await git(remote, ["rev-parse", "refs/heads/changeset-release/main"]),
168166
).toBe(await git(repository, ["rev-parse", "HEAD"]));
169-
expect(server.receivedAuthorizationHeaders.length).toBeGreaterThan(0);
170-
expect(server.receivedAuthorizationHeaders).toEqual(
171-
server.receivedAuthorizationHeaders.map(() => [
172-
getAuthorization(actionToken),
173-
]),
174-
);
167+
expect(server.requests.length).toBeGreaterThan(0);
168+
expect(
169+
server.requests.map((request) => request.headers.authorization),
170+
).toEqual(server.requests.map(() => [getAuthorization(actionToken)]));
175171
}, 15_000);
176172
});

src/test-utils/gitHttpServer.ts

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,24 @@ import { spawn } from "node:child_process";
22
import http, { type IncomingMessage, type ServerResponse } from "node:http";
33
import type { AddressInfo } from "node:net";
44

5-
function getAuthorizationHeaders(request: IncomingMessage): string[] {
6-
const values: string[] = [];
5+
type RecordedRequest = {
6+
method: string;
7+
url: string;
8+
headers: Record<string, string[]>;
9+
};
10+
11+
function recordRequest(request: IncomingMessage): RecordedRequest {
12+
const headers: Record<string, string[]> = {};
713
for (let index = 0; index < request.rawHeaders.length; index += 2) {
8-
if (request.rawHeaders[index]?.toLowerCase() === "authorization") {
9-
values.push(request.rawHeaders[index + 1] ?? "");
10-
}
14+
const name = request.rawHeaders[index]?.toLowerCase();
15+
if (name === undefined) continue;
16+
(headers[name] ??= []).push(request.rawHeaders[index + 1] ?? "");
1117
}
12-
return values;
18+
return {
19+
method: request.method ?? "GET",
20+
url: request.url ?? "/",
21+
headers,
22+
};
1323
}
1424

1525
async function runGitHttpBackend(
@@ -92,10 +102,11 @@ export async function createGitHttpServer(options: {
92102
projectRoot: string;
93103
expectedAuthorization: string;
94104
}) {
95-
const receivedAuthorizationHeaders: string[][] = [];
105+
const requests: RecordedRequest[] = [];
96106
const server = http.createServer((request, response) => {
97-
const authorizationHeaders = getAuthorizationHeaders(request);
98-
receivedAuthorizationHeaders.push(authorizationHeaders);
107+
const recordedRequest = recordRequest(request);
108+
requests.push(recordedRequest);
109+
const authorizationHeaders = recordedRequest.headers.authorization ?? [];
99110

100111
if (
101112
authorizationHeaders.length !== 1 ||
@@ -125,7 +136,7 @@ export async function createGitHttpServer(options: {
125136

126137
return {
127138
origin: `http://127.0.0.1:${address.port}`,
128-
receivedAuthorizationHeaders,
139+
requests,
129140
async [Symbol.asyncDispose]() {
130141
await new Promise<void>((resolve, reject) => {
131142
server.close((error) => {

0 commit comments

Comments
 (0)