From 4cc8422d549b06360131497f65680dc7ae8ac37c Mon Sep 17 00:00:00 2001 From: Max Kurapov Date: Mon, 25 Mar 2024 22:41:22 +0100 Subject: [PATCH] chore(openapi): add test for middleware options --- packages/openapi/src/middleware.test.ts | 64 ++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/packages/openapi/src/middleware.test.ts b/packages/openapi/src/middleware.test.ts index d0a23362..3ab851bc 100644 --- a/packages/openapi/src/middleware.test.ts +++ b/packages/openapi/src/middleware.test.ts @@ -2,7 +2,13 @@ import Koa from 'koa' import * as httpMocks from 'node-mocks-http' import { v4 as uuid } from 'uuid' import assert from 'assert' -import { createOpenAPI, OpenAPI, HttpMethod } from './' +import { + createOpenAPI, + OpenAPI, + HttpMethod, + RequestValidator, + ResponseValidator +} from './' import { createValidatorMiddleware, OpenAPIValidatorMiddlewareError @@ -246,6 +252,62 @@ describe('OpenAPI Validator', (): void => { expect(next).toHaveBeenCalled() }) + test.each` + validateRequest | validateResponse + ${true} | ${true} + ${true} | ${false} + ${false} | ${true} + ${false} | ${false} + `( + 'calls validators correctly with validateRequest=$validateRequest and validateResponse=$validateResponse', + async ({ validateRequest, validateResponse }): Promise => { + const ctx = createContext( + { + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json' + } + }, + {} + ) + addTestSignatureHeaders(ctx) + ctx.request['body'] = { walletAddress: WALLET_ADDRESS } + + const mockRequestValidator = jest.fn() + + jest + .spyOn(openApi, 'createRequestValidator') + .mockReturnValueOnce( + mockRequestValidator as unknown as RequestValidator + ) + + const mockResponseValidator = jest.fn() + + jest + .spyOn(openApi, 'createResponseValidator') + .mockReturnValueOnce( + mockResponseValidator as unknown as ResponseValidator + ) + + await createValidatorMiddleware( + openApi, + { + path: PATH, + method: HttpMethod.POST + }, + { validateRequest, validateResponse } + )(ctx, next) + + expect(mockRequestValidator).toHaveBeenCalledTimes( + validateRequest ? 1 : 0 + ) + expect(mockResponseValidator).toHaveBeenCalledTimes( + validateResponse ? 1 : 0 + ) + expect(next).toHaveBeenCalled() + } + ) + const body = { id: `https://${accountId}/incoming-payments/${uuid()}`, walletAddress: 'https://openpayments.guide/alice',