Skip to content

Commit 9764a93

Browse files
committed
Store ZIP bodies as files
1 parent 130d8ef commit 9764a93

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

extensions/ql-vscode/src/mocks/gh-api-request.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ export interface GetVariantAnalysisRepoResultRequest {
6464
},
6565
response: {
6666
status: number,
67-
body?: ArrayBuffer
67+
body?: Buffer | string,
68+
contentType: string,
6869
}
6970
}
7071

extensions/ql-vscode/src/mocks/recorder.ts

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import { MockedRequest } from 'msw';
55
import { SetupServerApi } from 'msw/node';
66
import { IsomorphicResponse } from '@mswjs/interceptors';
77

8+
import { Headers } from 'headers-polyfill';
9+
810
import { DisposableObject } from '../pure/disposable-object';
911

10-
import { GitHubApiRequest, RequestKind } from './gh-api-request';
12+
import { GetVariantAnalysisRepoResultRequest, GitHubApiRequest, RequestKind } from './gh-api-request';
1113

1214
export class Recorder extends DisposableObject {
1315
private readonly allRequests = new Map<string, MockedRequest>();
@@ -70,7 +72,28 @@ export class Recorder extends DisposableObject {
7072

7173
const fileName = `${i}-${request.request.kind}.json`;
7274
const filePath = path.join(scenarioDirectory, fileName);
73-
await fs.writeFile(filePath, JSON.stringify(request, null, 2));
75+
76+
let writtenRequest = {
77+
...request
78+
};
79+
80+
if (shouldWriteBodyToFile(writtenRequest)) {
81+
const extension = writtenRequest.response.contentType === 'application/zip' ? 'zip' : 'bin';
82+
83+
const bodyFileName = `${i}-${writtenRequest.request.kind}.body.${extension}`;
84+
const bodyFilePath = path.join(scenarioDirectory, bodyFileName);
85+
await fs.writeFile(bodyFilePath, writtenRequest.response.body);
86+
87+
writtenRequest = {
88+
...writtenRequest,
89+
response: {
90+
...writtenRequest.response,
91+
body: `file:${bodyFileName}`,
92+
},
93+
};
94+
}
95+
96+
await fs.writeFile(filePath, JSON.stringify(writtenRequest, null, 2));
7497
}
7598

7699
this.stop();
@@ -93,7 +116,7 @@ export class Recorder extends DisposableObject {
93116
return;
94117
}
95118

96-
const gitHubApiRequest = createGitHubApiRequest(request.url.toString(), response.status, response.body);
119+
const gitHubApiRequest = createGitHubApiRequest(request.url.toString(), response.status, response.body, response.headers);
97120
if (!gitHubApiRequest) {
98121
return;
99122
}
@@ -102,7 +125,7 @@ export class Recorder extends DisposableObject {
102125
}
103126
}
104127

105-
function createGitHubApiRequest(url: string, status: number, body: string): GitHubApiRequest | undefined {
128+
function createGitHubApiRequest(url: string, status: number, body: string, headers: Headers): GitHubApiRequest | undefined {
106129
if (!url) {
107130
return undefined;
108131
}
@@ -167,10 +190,15 @@ function createGitHubApiRequest(url: string, status: number, body: string): GitH
167190
},
168191
response: {
169192
status,
170-
body: body as unknown as ArrayBuffer,
193+
body: Buffer.from(body),
194+
contentType: headers.get('content-type') ?? 'application/octet-stream',
171195
}
172196
};
173197
}
174198

175199
return undefined;
176200
}
201+
202+
function shouldWriteBodyToFile(request: GitHubApiRequest): request is GetVariantAnalysisRepoResultRequest {
203+
return request.response.body instanceof Buffer;
204+
}

0 commit comments

Comments
 (0)