From 6f2b2edfc7cd97227b9cea9fa9dff8269ba9c311 Mon Sep 17 00:00:00 2001 From: Dan Kent Date: Tue, 4 Feb 2025 15:45:25 -0500 Subject: [PATCH] Allow HTTP method to be specified for mockEndpointDynamic --- src/Frontend/test/driver.ts | 9 ++++++--- src/Frontend/test/mock-endpoint.ts | 10 +++++----- src/Frontend/test/preconditions/recoverability.ts | 10 +++++----- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/Frontend/test/driver.ts b/src/Frontend/test/driver.ts index 4c8a5289ba..af86bcb85c 100644 --- a/src/Frontend/test/driver.ts +++ b/src/Frontend/test/driver.ts @@ -1,11 +1,14 @@ -import { type PathParams } from "msw"; +import { DefaultBodyType, StrictRequest, type PathParams } from "msw"; type GoTo = (path: string) => Promise; type DisposeApp = () => void; + +export type Method = "get" | "post" | "patch" | "put" | "delete" | "options"; + export type MockEndpointOptions = { // eslint-disable-next-line @typescript-eslint/no-explicit-any body: Record | string | number | boolean | null | undefined; - method?: "get" | "post" | "patch" | "put" | "delete" | "options"; + method?: Method; status?: number; headers?: { [key: string]: string }; }; @@ -18,7 +21,7 @@ export type MockEndpointDynamicOptions = { }; type MockEndpoint = (path: string, options: MockEndpointOptions) => void; -type MockEndpointDynamic = (endpoint: string, callBack: (url: URL, params: PathParams) => MockEndpointDynamicOptions) => void; +type MockEndpointDynamic = (endpoint: string, method: Method, callBack: (url: URL, params: PathParams, request: StrictRequest) => Promise) => void; export type SetupFactoryOptions = { driver: Driver; diff --git a/src/Frontend/test/mock-endpoint.ts b/src/Frontend/test/mock-endpoint.ts index ac28ba8160..9eac041efa 100644 --- a/src/Frontend/test/mock-endpoint.ts +++ b/src/Frontend/test/mock-endpoint.ts @@ -1,7 +1,7 @@ -import { http, HttpResponse, type PathParams } from "msw"; +import { DefaultBodyType, http, HttpResponse, StrictRequest, type PathParams } from "msw"; import type { SetupWorker } from "msw/browser"; import { SetupServer } from "msw/node"; -import { MockEndpointDynamicOptions, MockEndpointOptions } from "./driver"; +import { MockEndpointDynamicOptions, MockEndpointOptions, Method } from "./driver"; export const makeMockEndpoint = ({ mockServer }: { mockServer: SetupServer | SetupWorker }) => @@ -11,11 +11,11 @@ export const makeMockEndpoint = export const makeMockEndpointDynamic = ({ mockServer }: { mockServer: SetupServer | SetupWorker }) => - (endpoint: string, callBack: (url: URL, params: PathParams) => MockEndpointDynamicOptions) => { + (endpoint: string, method: Method = "get", callBack: (url: URL, params: PathParams, request: StrictRequest) => Promise) => { mockServer.use( - http.get(endpoint, ({ request, params }) => { + http[method](endpoint, async ({ request, params }) => { const url = new URL(request.url.toString()); - const { body, status = 200, headers = {} } = callBack(url, params); + const { body, status = 200, headers = {} } = await callBack(url, params, request); return HttpResponse.json(body, { status: status, headers: headers }); }) ); diff --git a/src/Frontend/test/preconditions/recoverability.ts b/src/Frontend/test/preconditions/recoverability.ts index 3838116af6..7fcba01acb 100644 --- a/src/Frontend/test/preconditions/recoverability.ts +++ b/src/Frontend/test/preconditions/recoverability.ts @@ -156,20 +156,20 @@ export const hasFailedMessage = edit_of: "", }; - driver.mockEndpointDynamic(`${serviceControlUrl}errors`, (url) => { + driver.mockEndpointDynamic(`${serviceControlUrl}errors`, "get", (url) => { const status = url.searchParams.get("status"); if (status === "unresolved") { - return { + return Promise.resolve({ body: [failedMessage], headers: { "Total-Count": "1" }, - }; + }); } //For status=archived or status=retryissued - return { + return Promise.resolve({ body: [], headers: { "Total-Count": "0" }, - }; + }); }); driver.mockEndpoint(`${serviceControlUrl}messages/${withMessageId}/body`, {