Add ability to record and replay mock code search requests (#2576)
This commit is contained in:
@@ -10,6 +10,7 @@ export enum RequestKind {
|
|||||||
GetVariantAnalysis = "getVariantAnalysis",
|
GetVariantAnalysis = "getVariantAnalysis",
|
||||||
GetVariantAnalysisRepo = "getVariantAnalysisRepo",
|
GetVariantAnalysisRepo = "getVariantAnalysisRepo",
|
||||||
GetVariantAnalysisRepoResult = "getVariantAnalysisRepoResult",
|
GetVariantAnalysisRepoResult = "getVariantAnalysisRepoResult",
|
||||||
|
CodeSearch = "codeSearch",
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface BasicErorResponse {
|
export interface BasicErorResponse {
|
||||||
@@ -69,12 +70,30 @@ export interface GetVariantAnalysisRepoResultRequest {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface CodeSearchRequest {
|
||||||
|
request: {
|
||||||
|
kind: RequestKind.CodeSearch;
|
||||||
|
query: string;
|
||||||
|
};
|
||||||
|
response: {
|
||||||
|
status: number;
|
||||||
|
body?: {
|
||||||
|
total_count?: number;
|
||||||
|
items?: Array<{
|
||||||
|
repository: Repository;
|
||||||
|
}>;
|
||||||
|
};
|
||||||
|
message?: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export type GitHubApiRequest =
|
export type GitHubApiRequest =
|
||||||
| GetRepoRequest
|
| GetRepoRequest
|
||||||
| SubmitVariantAnalysisRequest
|
| SubmitVariantAnalysisRequest
|
||||||
| GetVariantAnalysisRequest
|
| GetVariantAnalysisRequest
|
||||||
| GetVariantAnalysisRepoRequest
|
| GetVariantAnalysisRepoRequest
|
||||||
| GetVariantAnalysisRepoResultRequest;
|
| GetVariantAnalysisRepoResultRequest
|
||||||
|
| CodeSearchRequest;
|
||||||
|
|
||||||
export const isGetRepoRequest = (
|
export const isGetRepoRequest = (
|
||||||
request: GitHubApiRequest,
|
request: GitHubApiRequest,
|
||||||
@@ -99,3 +118,8 @@ export const isGetVariantAnalysisRepoResultRequest = (
|
|||||||
request: GitHubApiRequest,
|
request: GitHubApiRequest,
|
||||||
): request is GetVariantAnalysisRepoResultRequest =>
|
): request is GetVariantAnalysisRepoResultRequest =>
|
||||||
request.request.kind === RequestKind.GetVariantAnalysisRepoResult;
|
request.request.kind === RequestKind.GetVariantAnalysisRepoResult;
|
||||||
|
|
||||||
|
export const isCodeSearchRequest = (
|
||||||
|
request: GitHubApiRequest,
|
||||||
|
): request is CodeSearchRequest =>
|
||||||
|
request.request.kind === RequestKind.CodeSearch;
|
||||||
|
|||||||
@@ -245,6 +245,20 @@ async function createGitHubApiRequest(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const codeSearchMatch = url.match(/\/search\/code\?q=(?<query>.*)$/);
|
||||||
|
if (codeSearchMatch?.groups?.query) {
|
||||||
|
return {
|
||||||
|
request: {
|
||||||
|
kind: RequestKind.CodeSearch,
|
||||||
|
query: codeSearchMatch?.groups?.query,
|
||||||
|
},
|
||||||
|
response: {
|
||||||
|
status,
|
||||||
|
body: JSON.parse(body),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { readdir, readJson, readFile } from "fs-extra";
|
|||||||
import { DefaultBodyType, MockedRequest, rest, RestHandler } from "msw";
|
import { DefaultBodyType, MockedRequest, rest, RestHandler } from "msw";
|
||||||
import {
|
import {
|
||||||
GitHubApiRequest,
|
GitHubApiRequest,
|
||||||
|
isCodeSearchRequest,
|
||||||
isGetRepoRequest,
|
isGetRepoRequest,
|
||||||
isGetVariantAnalysisRepoRequest,
|
isGetVariantAnalysisRepoRequest,
|
||||||
isGetVariantAnalysisRepoResultRequest,
|
isGetVariantAnalysisRepoResultRequest,
|
||||||
@@ -25,6 +26,7 @@ export async function createRequestHandlers(
|
|||||||
createGetVariantAnalysisRequestHandler(requests),
|
createGetVariantAnalysisRequestHandler(requests),
|
||||||
createGetVariantAnalysisRepoRequestHandler(requests),
|
createGetVariantAnalysisRepoRequestHandler(requests),
|
||||||
createGetVariantAnalysisRepoResultRequestHandler(requests),
|
createGetVariantAnalysisRepoResultRequestHandler(requests),
|
||||||
|
createCodeSearchRequestHandler(requests),
|
||||||
];
|
];
|
||||||
|
|
||||||
return handlers;
|
return handlers;
|
||||||
@@ -193,3 +195,27 @@ function createGetVariantAnalysisRepoResultRequestHandler(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createCodeSearchRequestHandler(
|
||||||
|
requests: GitHubApiRequest[],
|
||||||
|
): RequestHandler {
|
||||||
|
const codeSearchRequests = requests.filter(isCodeSearchRequest);
|
||||||
|
let requestIndex = 0;
|
||||||
|
|
||||||
|
// During a code search, there are multiple request to get pages of results. We
|
||||||
|
// need to return different responses for each request, so keep an index of the
|
||||||
|
// request and return the appropriate response.
|
||||||
|
return rest.get(`${baseUrl}/search/code?q=*`, (_req, res, ctx) => {
|
||||||
|
const request = codeSearchRequests[requestIndex];
|
||||||
|
|
||||||
|
if (requestIndex < codeSearchRequests.length - 1) {
|
||||||
|
// If there are more requests to come, increment the index.
|
||||||
|
requestIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res(
|
||||||
|
ctx.status(request.response.status),
|
||||||
|
ctx.json(request.response.body),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"request": {
|
||||||
|
"kind": "codeSearch",
|
||||||
|
"query": "org%3Adotnet+project+language%3Acsharp&per_page=100&page=10"
|
||||||
|
},
|
||||||
|
"response": {
|
||||||
|
"status": 403,
|
||||||
|
"body": {
|
||||||
|
"message": "API rate limit exceeded for user ID 311693.",
|
||||||
|
"documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"request": {
|
||||||
|
"kind": "codeSearch",
|
||||||
|
"query": "org%3Adotnet+project+language%3Acsharp&per_page=100&page=10"
|
||||||
|
},
|
||||||
|
"response": {
|
||||||
|
"status": 403,
|
||||||
|
"body": {
|
||||||
|
"message": "API rate limit exceeded for user ID 311693.",
|
||||||
|
"documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user