async fetch()

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}`
        );
    }