mappersmith
Version:
It is a lightweight rest client for node.js and the browser
1 lines • 9.41 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/mocks/mock-resource.js"],"sourcesContent":["import { configs } from '../mappersmith'\nimport MockRequest from './mock-request'\nimport Request from '../request'\n\nconst VALUE_NOT_MATCHED = '<MAPPERSMITH_VALUE_NOT_MATCHED>'\n\n/**\n * @param {Integer} id\n * @param {Object} client - the client generated by {@link forge}\n */\nfunction MockResource(id, client) {\n if (!client || !client._manifest) {\n throw new Error('[Mappersmith Test] \"mockClient\" received an invalid client')\n }\n\n this.id = id\n this.manifest = client._manifest\n this.resourceName = null\n this.methodName = null\n this.requestParams = {}\n this.responseData = null\n this.responseHandler = null\n this.responseHeaders = {}\n this.responseStatus = 200\n this.responseStatusHandler = null\n this.mockRequest = null\n this.asyncFinalRequest = null\n this.pendingMiddlewareExecution = true\n}\n\nMockResource.prototype = {\n /**\n * @return {MockResource}\n */\n resource(resourceName) {\n this.resourceName = resourceName\n return this\n },\n\n /**\n * @return {MockResource}\n */\n method(methodName) {\n this.methodName = methodName\n return this\n },\n\n /**\n * @return {MockResource}\n */\n with(requestParams) {\n this.requestParams = requestParams\n return this\n },\n\n /**\n * @return {MockResource}\n */\n headers(responseHeaders) {\n this.responseHeaders = responseHeaders\n return this\n },\n\n /**\n * @return {MockResource}\n */\n status(responder) {\n if (typeof responder === 'function') {\n this.responseStatusHandler = responder\n } else {\n this.responseStatus = responder\n }\n return this\n },\n\n /**\n * @return {MockResource}\n */\n response(responder) {\n if (typeof responder === 'function') {\n this.responseHandler = responder\n } else {\n this.responseData = responder\n }\n return this\n },\n\n /**\n * @return {Promise<MockAssert>}\n */\n assertObjectAsync() {\n return this.createAsyncRequest().then((finalRequest) => {\n this.asyncFinalRequest = finalRequest\n this.pendingMiddlewareExecution = false\n return this.toMockRequest().assertObject()\n })\n },\n\n /**\n * @return {MockAssert}\n */\n assertObject() {\n // The middleware \"prepareRequest\" phase is always async, so the middleware\n // stack will never run when assertObject is used\n return this.toMockRequest().assertObject()\n },\n\n /**\n * @return {MockRequest}\n */\n toMockRequest() {\n const finalRequest = this.asyncFinalRequest ? this.asyncFinalRequest : this.createRequest()\n\n const responseStatus = this.responseStatusHandler || this.responseStatus\n\n if (!this.mockRequest) {\n this.mockRequest = new MockRequest(this.id, {\n method: finalRequest.method(),\n url: this.generateUrlMatcher(finalRequest),\n body: finalRequest.body(),\n headers: finalRequest.headers(),\n response: {\n status: responseStatus,\n headers: this.responseHeaders,\n body: this.responseData,\n handler: this.responseHandler,\n },\n })\n }\n\n return this.mockRequest\n },\n\n /**\n * @private\n */\n generateUrlMatcher(finalRequest) {\n const params = finalRequest.params()\n const hasParamMatchers = Object.keys(params).find((key) => typeof params[key] === 'function')\n\n if (!hasParamMatchers) {\n return finalRequest.url()\n }\n\n const urlMatcher = (requestUrl, requestParams) => {\n const additionalParams = this.evaluateParamMatchers(params, requestParams)\n const testRequest = finalRequest.enhance({ params: additionalParams })\n return testRequest.url() === requestUrl\n }\n\n return urlMatcher\n },\n\n /**\n * @private\n */\n executeMiddlewareStack() {\n return this.createAsyncRequest().then((finalRequest) => {\n this.asyncFinalRequest = finalRequest\n\n if (this.mockRequest) {\n const urlMatcher = this.generateUrlMatcher(finalRequest)\n this.mockRequest.url = urlMatcher\n this.mockRequest.body = finalRequest.body()\n this.pendingMiddlewareExecution = false\n }\n })\n },\n\n /**\n * @private\n */\n evaluateParamMatchers(mockParams, requestParams) {\n return Object.keys(mockParams).reduce((obj, key) => {\n const matcher = mockParams[key]\n\n if (typeof matcher !== 'function') {\n return obj\n }\n\n const value = requestParams[key]\n // Only evaluate if key was provided in request params.\n // Otherwise we always consider it not to match.\n if (key in requestParams && matcher(value)) {\n obj[key] = value\n } else {\n obj[key] = VALUE_NOT_MATCHED\n }\n\n return obj\n }, {})\n },\n\n /**\n * @private\n * It never runs the middleware stack\n */\n createRequest() {\n const methodDescriptor = this.manifest.createMethodDescriptor(\n this.resourceName,\n this.methodName\n )\n return new Request(methodDescriptor, this.requestParams)\n },\n\n /**\n * @private\n * Always runs the middleware stack\n */\n createAsyncRequest() {\n const methodDescriptor = this.manifest.createMethodDescriptor(\n this.resourceName,\n this.methodName\n )\n const initialRequest = new Request(methodDescriptor, this.requestParams)\n const middleware = this.manifest.createMiddleware({\n resourceName: this.resourceName,\n resourceMethod: this.methodName,\n mockRequest: true,\n })\n const abort = (error) => {\n throw error\n }\n const getInitialRequest = () => configs.Promise.resolve(initialRequest)\n const prepareRequest = middleware.reduce(\n (next, middleware) => () =>\n configs.Promise.resolve().then(() => middleware.prepareRequest(next, abort)),\n getInitialRequest\n )\n\n return prepareRequest()\n },\n}\n\nexport default MockResource\n"],"mappings":"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","names":["middleware"]}