UNPKG

@swarmion/serverless-contracts

Version:

Generate and use type-safe contracts between your Serverless services.

79 lines (75 loc) 2.59 kB
// src/contracts/apiGateway/testUtils/mockHandlerInput.ts import { JSONSchemaFaker } from "json-schema-faker"; import seedrandom from "seedrandom"; import { getAPIGatewayEventRequestContextMock, getAPIGatewayV2EventRequestContextMock } from "@swarmion/serverless-helpers"; // src/contracts/apiGateway/utils/mockHandlerContext.ts var getHandlerContextMock = (args) => ( // @ts-expect-error only partial typing here { callbackWaitsForEmptyEventLoop: false, functionName: "", functionVersion: "", invokedFunctionArn: "", memoryLimitInMB: "", awsRequestId: "", logGroupName: "", logStreamName: "", ...args } ); // src/contracts/apiGateway/testUtils/utils/deepMerge.ts import _ from "lodash"; var deepMerge = (left, right) => _.mergeWith(left, right, keepUnchangedRefsOnly); var keepUnchangedRefsOnly = (objValue, srcValue) => { if (_.isPlainObject(objValue)) { return _.assignWith({}, objValue, srcValue, keepUnchangedRefsOnly); } return void 0; }; // src/contracts/apiGateway/testUtils/mockHandlerInput.ts var seed = "MySuperSwarmionSeed"; var setMockHandlerInputSeed = (inputSeed) => { seed = inputSeed; }; var getMockHandlerInput = (contract, partialEvent = {}, ...additionalArgs) => { JSONSchemaFaker.option({ random: seedrandom(seed) }); const defaultBody = getFakerDefault(contract.bodySchema); const defaultPathParameters = getFakerDefault( contract.pathParametersSchema ); const defaultQueryStringParameters = getFakerDefault( contract.queryStringParametersSchema ); const defaultHeaders = getFakerDefault(contract.headersSchema); const defaultRequestContext = contract.integrationType === "restApi" ? getAPIGatewayEventRequestContextMock() : getAPIGatewayV2EventRequestContextMock(); const defaultCustomRequestContext = getFakerDefault(contract.requestContextSchema) ?? {}; const defaultEvent = { pathParameters: defaultPathParameters, queryStringParameters: defaultQueryStringParameters, headers: defaultHeaders, body: defaultBody, requestContext: deepMerge( defaultRequestContext, defaultCustomRequestContext ) }; const event = deepMerge(defaultEvent, partialEvent); const stringifiedEvent = { ...event, body: event.body !== void 0 ? JSON.stringify(event.body) : void 0 }; return [ stringifiedEvent, getHandlerContextMock(), () => null, ...additionalArgs ]; }; var getFakerDefault = (schema) => schema !== void 0 ? JSONSchemaFaker.generate(schema) : void 0; export { getMockHandlerInput, setMockHandlerInputSeed };