Skip to content

Commit 4109da6

Browse files
authored
Add support for automodel requests in the mock API server (#2674)
1 parent 7530920 commit 4109da6

File tree

3 files changed

+65
-1
lines changed

3 files changed

+65
-1
lines changed

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export enum RequestKind {
1111
GetVariantAnalysisRepo = "getVariantAnalysisRepo",
1212
GetVariantAnalysisRepoResult = "getVariantAnalysisRepoResult",
1313
CodeSearch = "codeSearch",
14+
AutoModel = "autoModel",
1415
}
1516

1617
interface BasicErorResponse {
@@ -87,13 +88,27 @@ interface CodeSearchRequest {
8788
};
8889
}
8990

91+
interface AutoModelRequest {
92+
request: {
93+
kind: RequestKind.AutoModel;
94+
};
95+
response: {
96+
status: number;
97+
body?: {
98+
candidates: string;
99+
};
100+
message?: string;
101+
};
102+
}
103+
90104
export type GitHubApiRequest =
91105
| GetRepoRequest
92106
| SubmitVariantAnalysisRequest
93107
| GetVariantAnalysisRequest
94108
| GetVariantAnalysisRepoRequest
95109
| GetVariantAnalysisRepoResultRequest
96-
| CodeSearchRequest;
110+
| CodeSearchRequest
111+
| AutoModelRequest;
97112

98113
export const isGetRepoRequest = (
99114
request: GitHubApiRequest,
@@ -123,3 +138,8 @@ export const isCodeSearchRequest = (
123138
request: GitHubApiRequest,
124139
): request is CodeSearchRequest =>
125140
request.request.kind === RequestKind.CodeSearch;
141+
142+
export const isAutoModelRequest = (
143+
request: GitHubApiRequest,
144+
): request is AutoModelRequest =>
145+
request.request.kind === RequestKind.AutoModel;

extensions/ql-vscode/src/variant-analysis/gh-api/mocks/recorder.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,21 @@ async function createGitHubApiRequest(
259259
};
260260
}
261261

262+
const autoModelMatch = url.match(
263+
/\/repos\/github\/codeql\/code-scanning\/codeql\/auto-model/,
264+
);
265+
if (autoModelMatch) {
266+
return {
267+
request: {
268+
kind: RequestKind.AutoModel,
269+
},
270+
response: {
271+
status,
272+
body: JSON.parse(body),
273+
},
274+
};
275+
}
276+
262277
return undefined;
263278
}
264279

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { readdir, readJson, readFile } from "fs-extra";
33
import { DefaultBodyType, MockedRequest, rest, RestHandler } from "msw";
44
import {
55
GitHubApiRequest,
6+
isAutoModelRequest,
67
isCodeSearchRequest,
78
isGetRepoRequest,
89
isGetVariantAnalysisRepoRequest,
@@ -27,6 +28,7 @@ export async function createRequestHandlers(
2728
createGetVariantAnalysisRepoRequestHandler(requests),
2829
createGetVariantAnalysisRepoResultRequestHandler(requests),
2930
createCodeSearchRequestHandler(requests),
31+
createAutoModelRequestHandler(requests),
3032
];
3133

3234
return handlers;
@@ -219,3 +221,30 @@ function createCodeSearchRequestHandler(
219221
);
220222
});
221223
}
224+
225+
function createAutoModelRequestHandler(
226+
requests: GitHubApiRequest[],
227+
): RequestHandler {
228+
const autoModelRequests = requests.filter(isAutoModelRequest);
229+
let requestIndex = 0;
230+
231+
// During automodeling there can be multiple API requests for each batch
232+
// of candidates we want to model. We need to return different responses for each request,
233+
// so keep an index of the request and return the appropriate response.
234+
return rest.get(
235+
`${baseUrl}/code-scanning/codeql/auto-model`,
236+
(_req, res, ctx) => {
237+
const request = autoModelRequests[requestIndex];
238+
239+
if (requestIndex < autoModelRequests.length - 1) {
240+
// If there are more requests to come, increment the index.
241+
requestIndex++;
242+
}
243+
244+
return res(
245+
ctx.status(request.response.status),
246+
ctx.json(request.response.body),
247+
);
248+
},
249+
);
250+
}

0 commit comments

Comments
 (0)