in packages/bonito-core/src/http/mock-http-client.ts [24:77]
async fetch(
urlOrRequest: string | HttpRequestInit,
requestProps?: HttpRequestInit
): Promise<HttpResponse> {
const props = requestProps ?? {};
let url: string;
if (typeof urlOrRequest === "string") {
url = urlOrRequest;
} else {
if (!urlOrRequest.url) {
throw new Error("Fetch failed: Must specify a URL");
}
url = urlOrRequest.url;
}
url = normalizeUrl(url);
const key = this._getKeyFromRequest(url, props);
const expected = this._expectedResponses[key];
if (expected && expected.length > 0) {
const response = expected.shift();
if (!response) {
throw new MockHttpResponseError(
`Expected response was null or undefined: ${key}`
);
}
if (expected.length === 0) {
delete this._expectedResponses[key];
}
if (
props.body &&
typeof props.body === "string" &&
this._expectedRequestBodies[props.body]
) {
const expectedBody = this._expectedRequestBodies[props.body];
expectedBody.refCount--;
if (expectedBody.refCount === 0) {
// Nothing references this request body anymore so we can clear it
delete this._expectedRequestBodies[props.body];
}
}
return response;
}
const expectedKeys = Object.keys(this._expectedResponses);
let expectedMessage: string;
if (expectedKeys.length > 0) {
expectedMessage = `Expected one of:\n${expectedKeys.join("\n")}`;
} else {
expectedMessage = "There are no more expected requests.";
}
throw new MockHttpResponseError(
`Unexpected mock request: ${key}. ${expectedMessage}`
);
}