/* This file is part of GNU Taler (C) 2021-2023 Taler Systems S.A. GNU Taler is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Taler; see the file COPYING. If not, see */ /** * * @author Sebastian Javier Marchano (sebasjm) */ import { MockEnvironment } from "@gnu-taler/web-util/lib/tests/mock"; import { ComponentChildren, FunctionalComponent, h, VNode } from "preact"; import { SWRConfig } from "swr"; import { ApiContextProvider } from "@gnu-taler/web-util/lib/index.browser"; import { BackendContextProvider } from "../context/backend.js"; import { InstanceContextProvider } from "../context/instance.js"; import { HttpResponseOk, RequestOptions, } from "@gnu-taler/web-util/lib/index.browser"; export class ApiMockEnvironment extends MockEnvironment { constructor(debug = false) { super(debug); } mockApiIfNeeded(): void { null; // do nothing } public buildTestingContext(): FunctionalComponent<{ children: ComponentChildren; }> { const __SAVE_REQUEST_AND_GET_MOCKED_RESPONSE = this.saveRequestAndGetMockedResponse.bind(this); return function TestingContext({ children, }: { children: ComponentChildren; }): VNode { async function request( base: string, path: string, options: RequestOptions = {}, ): Promise> { const _url = new URL(`${base}${path}`); // Object.entries(options.params ?? {}).forEach(([key, value]) => { // _url.searchParams.set(key, String(value)); // }); const mocked = __SAVE_REQUEST_AND_GET_MOCKED_RESPONSE( { method: options.method ?? "GET", url: _url.href, }, { qparam: options.params, auth: options.token, request: options.data, }, ); return { ok: true, data: (!mocked ? undefined : mocked.payload) as T, loading: false, clientError: false, serverError: false, info: { hasToken: !!options.token, status: !mocked ? 200 : mocked.status, url: _url.href, payload: options.data, }, }; } const SC: any = SWRConfig; return ( null, }} > new Map(), }} > {children} ); }; } }