From a2668c22f0d18386fc988f27299172145d9fa15d Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 3 Jan 2023 01:57:39 -0300 Subject: refactor better QA removed axios, use fetch removed jest, added mocha and chai moved the default request handler to runtime dependency (so it can be replaced for testing) refactored ALL the test to the standard web-utils all hooks now use ONE request handler moved the tests from test folder to src --- .../merchant-backoffice-ui/src/hooks/instance.ts | 113 ++++++++------------- 1 file changed, 43 insertions(+), 70 deletions(-) (limited to 'packages/merchant-backoffice-ui/src/hooks/instance.ts') diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.ts b/packages/merchant-backoffice-ui/src/hooks/instance.ts index ab59487de..3c05472d0 100644 --- a/packages/merchant-backoffice-ui/src/hooks/instance.ts +++ b/packages/merchant-backoffice-ui/src/hooks/instance.ts @@ -15,14 +15,11 @@ */ import useSWR, { useSWRConfig } from "swr"; import { useBackendContext } from "../context/backend.js"; -import { useInstanceContext } from "../context/instance.js"; import { MerchantBackend } from "../declaration.js"; +import { HttpError, HttpResponse, HttpResponseOk } from "../utils/request.js"; import { - fetcher, - HttpError, - HttpResponse, - HttpResponseOk, - request, + useBackendBaseRequest, + useBackendInstanceRequest, useMatchMutate, } from "./backend.js"; @@ -36,15 +33,14 @@ interface InstanceAPI { } export function useAdminAPI(): AdminAPI { - const { url, token } = useBackendContext(); + const { request } = useBackendBaseRequest(); const mutateAll = useMatchMutate(); const createInstance = async ( instance: MerchantBackend.Instances.InstanceConfigurationMessage, ): Promise => { - await request(`${url}/management/instances`, { - method: "post", - token, + await request(`/management/instances`, { + method: "POST", data: instance, }); @@ -52,18 +48,16 @@ export function useAdminAPI(): AdminAPI { }; const deleteInstance = async (id: string): Promise => { - await request(`${url}/management/instances/${id}`, { - method: "delete", - token, + await request(`/management/instances/${id}`, { + method: "DELETE", }); mutateAll(/\/management\/instances/); }; const purgeInstance = async (id: string): Promise => { - await request(`${url}/management/instances/${id}`, { - method: "delete", - token, + await request(`/management/instances/${id}`, { + method: "DELETE", params: { purge: "YES", }, @@ -85,14 +79,14 @@ export interface AdminAPI { export function useManagementAPI(instanceId: string): InstanceAPI { const mutateAll = useMatchMutate(); - const { url, token, updateLoginStatus } = useBackendContext(); + const { updateToken } = useBackendContext(); + const { request } = useBackendBaseRequest(); const updateInstance = async ( instance: MerchantBackend.Instances.InstanceReconfigurationMessage, ): Promise => { - await request(`${url}/management/instances/${instanceId}`, { - method: "patch", - token, + await request(`/management/instances/${instanceId}`, { + method: "PATCH", data: instance, }); @@ -100,18 +94,16 @@ export function useManagementAPI(instanceId: string): InstanceAPI { }; const deleteInstance = async (): Promise => { - await request(`${url}/management/instances/${instanceId}`, { - method: "delete", - token, + await request(`/management/instances/${instanceId}`, { + method: "DELETE", }); mutateAll(/\/management\/instances/); }; const clearToken = async (): Promise => { - await request(`${url}/management/instances/${instanceId}/auth`, { - method: "post", - token, + await request(`/management/instances/${instanceId}/auth`, { + method: "POST", data: { method: "external" }, }); @@ -119,13 +111,12 @@ export function useManagementAPI(instanceId: string): InstanceAPI { }; const setNewToken = async (newToken: string): Promise => { - await request(`${url}/management/instances/${instanceId}/auth`, { - method: "post", - token, + await request(`/management/instances/${instanceId}/auth`, { + method: "POST", data: { method: "token", token: newToken }, }); - updateLoginStatus(url, newToken); + updateToken(newToken); mutateAll(/\/management\/instances/); }; @@ -139,71 +130,59 @@ export function useInstanceAPI(): InstanceAPI { token: adminToken, updateLoginStatus, } = useBackendContext(); - const { token: instanceToken, id, admin } = useInstanceContext(); - - const { url, token } = !admin - ? { url: baseUrl, token: adminToken } - : { url: `${baseUrl}/instances/${id}`, token: instanceToken }; + const { request } = useBackendInstanceRequest(); const updateInstance = async ( instance: MerchantBackend.Instances.InstanceReconfigurationMessage, ): Promise => { - await request(`${url}/private/`, { - method: "patch", - token, + await request(`/private/`, { + method: "PATCH", data: instance, }); if (adminToken) mutate(["/private/instances", adminToken, baseUrl], null); - mutate([`/private/`, token, url], null); + mutate([`/private/`], null); }; const deleteInstance = async (): Promise => { - await request(`${url}/private/`, { - method: "delete", - token: adminToken, + await request(`/private/`, { + method: "DELETE", + // token: adminToken, }); if (adminToken) mutate(["/private/instances", adminToken, baseUrl], null); - mutate([`/private/`, token, url], null); + mutate([`/private/`], null); }; const clearToken = async (): Promise => { - await request(`${url}/private/auth`, { - method: "post", - token, + await request(`/private/auth`, { + method: "POST", data: { method: "external" }, }); - mutate([`/private/`, token, url], null); + mutate([`/private/`], null); }; const setNewToken = async (newToken: string): Promise => { - await request(`${url}/private/auth`, { - method: "post", - token, + await request(`/private/auth`, { + method: "POST", data: { method: "token", token: newToken }, }); updateLoginStatus(baseUrl, newToken); - mutate([`/private/`, token, url], null); + mutate([`/private/`], null); }; return { updateInstance, deleteInstance, setNewToken, clearToken }; } export function useInstanceDetails(): HttpResponse { - const { url: baseUrl, token: baseToken } = useBackendContext(); - const { token: instanceToken, id, admin } = useInstanceContext(); - - const { url, token } = !admin - ? { url: baseUrl, token: baseToken } - : { url: `${baseUrl}/instances/${id}`, token: instanceToken }; + const { fetcher } = useBackendInstanceRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk, HttpError - >([`/private/`, token, url], fetcher, { + >([`/private/`], fetcher, { refreshInterval: 0, refreshWhenHidden: false, revalidateOnFocus: false, @@ -225,17 +204,12 @@ type KYCStatus = | { type: "redirect"; status: MerchantBackend.Instances.AccountKycRedirects }; export function useInstanceKYCDetails(): HttpResponse { - const { url: baseUrl, token: baseToken } = useBackendContext(); - const { token: instanceToken, id, admin } = useInstanceContext(); - - const { url, token } = !admin - ? { url: baseUrl, token: baseToken } - : { url: `${baseUrl}/instances/${id}`, token: instanceToken }; + const { fetcher } = useBackendInstanceRequest(); const { data, error } = useSWR< HttpResponseOk, HttpError - >([`/private/kyc`, token, url], fetcher, { + >([`/private/kyc`], fetcher, { refreshInterval: 5000, refreshWhenHidden: false, revalidateOnFocus: false, @@ -258,12 +232,12 @@ export function useInstanceKYCDetails(): HttpResponse { export function useManagedInstanceDetails( instanceId: string, ): HttpResponse { - const { url, token } = useBackendContext(); + const { request } = useBackendBaseRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk, HttpError - >([`/management/instances/${instanceId}`, token, url], fetcher, { + >([`/management/instances/${instanceId}`], request, { refreshInterval: 0, refreshWhenHidden: false, revalidateOnFocus: false, @@ -281,13 +255,12 @@ export function useManagedInstanceDetails( } export function useBackendInstances(): HttpResponse { - const { url } = useBackendContext(); - const { token } = useInstanceContext(); + const { request } = useBackendBaseRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk, HttpError - >(["/management/instances", token, url], fetcher); + >(["/management/instances"], request); if (isValidating) return { loading: true, data: data?.data }; if (data) return data; -- cgit v1.2.3