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/product.ts | 69 ++++++---------------- 1 file changed, 18 insertions(+), 51 deletions(-) (limited to 'packages/merchant-backoffice-ui/src/hooks/product.ts') diff --git a/packages/merchant-backoffice-ui/src/hooks/product.ts b/packages/merchant-backoffice-ui/src/hooks/product.ts index fb7889834..af8ad74f3 100644 --- a/packages/merchant-backoffice-ui/src/hooks/product.ts +++ b/packages/merchant-backoffice-ui/src/hooks/product.ts @@ -14,18 +14,9 @@ GNU Taler; see the file COPYING. If not, see */ import useSWR, { useSWRConfig } from "swr"; -import { useBackendContext } from "../context/backend.js"; -import { useInstanceContext } from "../context/instance.js"; import { MerchantBackend, WithId } from "../declaration.js"; -import { - fetcher, - HttpError, - HttpResponse, - HttpResponseOk, - multiFetcher, - request, - useMatchMutate, -} from "./backend.js"; +import { HttpError, HttpResponse, HttpResponseOk } from "../utils/request.js"; +import { useBackendInstanceRequest, useMatchMutate } from "./backend.js"; export interface ProductAPI { createProduct: ( @@ -45,19 +36,14 @@ export interface ProductAPI { export function useProductAPI(): ProductAPI { const mutateAll = useMatchMutate(); const { mutate } = useSWRConfig(); - const { url: baseUrl, token: adminToken } = 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 createProduct = async ( data: MerchantBackend.Products.ProductAddDetail, ): Promise => { - const res = await request(`${url}/private/products`, { - method: "post", - token, + const res = await request(`/private/products`, { + method: "POST", data, }); @@ -68,9 +54,8 @@ export function useProductAPI(): ProductAPI { productId: string, data: MerchantBackend.Products.ProductPatchDetail, ): Promise => { - const r = await request(`${url}/private/products/${productId}`, { - method: "patch", - token, + const r = await request(`/private/products/${productId}`, { + method: "PATCH", data, }); @@ -78,20 +63,18 @@ export function useProductAPI(): ProductAPI { }; const deleteProduct = async (productId: string): Promise => { - await request(`${url}/private/products/${productId}`, { - method: "delete", - token, + await request(`/private/products/${productId}`, { + method: "DELETE", }); - await mutate([`/private/products`, token, url]); + await mutate([`/private/products`]); }; const lockProduct = async ( productId: string, data: MerchantBackend.Products.LockRequest, ): Promise => { - await request(`${url}/private/products/${productId}/lock`, { - method: "post", - token, + await request(`/private/products/${productId}/lock`, { + method: "POST", data, }); @@ -104,17 +87,12 @@ export function useProductAPI(): ProductAPI { export function useInstanceProducts(): HttpResponse< (MerchantBackend.Products.ProductDetail & WithId)[] > { - 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, multiFetcher } = useBackendInstanceRequest(); const { data: list, error: listError } = useSWR< HttpResponseOk, HttpError - >([`/private/products`, token, url], fetcher, { + >([`/private/products`], fetcher, { refreshInterval: 0, refreshWhenHidden: false, revalidateOnFocus: false, @@ -128,7 +106,7 @@ export function useInstanceProducts(): HttpResponse< const { data: products, error: productError } = useSWR< HttpResponseOk[], HttpError - >([paths, token, url], multiFetcher, { + >([paths], multiFetcher, { refreshInterval: 0, refreshWhenHidden: false, revalidateOnFocus: false, @@ -144,7 +122,7 @@ export function useInstanceProducts(): HttpResponse< //take the id from the queried url return { ...d.data, - id: d.info?.url.replace(/.*\/private\/products\//, "") || "", + id: d.info?.url.href.replace(/.*\/private\/products\//, "") || "", }; }); return { ok: true, data: dataWithId }; @@ -155,23 +133,12 @@ export function useInstanceProducts(): HttpResponse< export function useProductDetails( productId: string, ): 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/products/${productId}`, token, url], fetcher, { + >([`/private/products/${productId}`], fetcher, { refreshInterval: 0, refreshWhenHidden: false, revalidateOnFocus: false, -- cgit v1.2.3