diff --git a/src/core/components/live-response.jsx b/src/core/components/live-response.jsx index 550208fa..624360a0 100644 --- a/src/core/components/live-response.jsx +++ b/src/core/components/live-response.jsx @@ -27,9 +27,7 @@ export default class LiveResponse extends React.Component { const headers = response.get("headers").toJS() const notDocumented = response.get("notDocumented") const isError = response.get("error") - - const body = isError ? response.get("response").get("text") : response.get("text") - + const body = response.get("text") const headersKeys = Object.keys(headers) const contentType = headers["content-type"] diff --git a/src/core/plugins/spec/actions.js b/src/core/plugins/spec/actions.js index d531630a..8484ea82 100644 --- a/src/core/plugins/spec/actions.js +++ b/src/core/plugins/spec/actions.js @@ -92,28 +92,28 @@ export const resolveSpec = (json, url) => ({specActions, specSelectors, errActio let specStr = specSelectors.specStr() return resolve({fetch, spec: json, baseDoc: url, modelPropertyMacro, parameterMacro }) - .then( ({spec, errors}) => { - errActions.clear({ - type: "thrown" - }) + .then( ({spec, errors}) => { + errActions.clear({ + type: "thrown" + }) - if(errors.length > 0) { - let preparedErrors = errors - .map(err => { - console.error(err) - err.line = err.fullPath ? getLineNumberForPath(specStr, err.fullPath) : null - err.path = err.fullPath ? err.fullPath.join(".") : null - err.level = "error" - err.type = "thrown" - err.source = "resolver" - Object.defineProperty(err, "message", { enumerable: true, value: err.message }) - return err - }) - errActions.newThrownErrBatch(preparedErrors) - } + if(errors.length > 0) { + let preparedErrors = errors + .map(err => { + console.error(err) + err.line = err.fullPath ? getLineNumberForPath(specStr, err.fullPath) : null + err.path = err.fullPath ? err.fullPath.join(".") : null + err.level = "error" + err.type = "thrown" + err.source = "resolver" + Object.defineProperty(err, "message", { enumerable: true, value: err.message }) + return err + }) + errActions.newThrownErrBatch(preparedErrors) + } - return specActions.updateResolved(spec) - }) + return specActions.updateResolved(spec) + }) } export const formatIntoYaml = () => ({specActions, specSelectors}) => { diff --git a/src/core/plugins/spec/reducers.js b/src/core/plugins/spec/reducers.js index 6bc51d53..d9670d7b 100644 --- a/src/core/plugins/spec/reducers.js +++ b/src/core/plugins/spec/reducers.js @@ -75,7 +75,12 @@ export default { [SET_RESPONSE]: (state, { payload: { res, path, method } } ) =>{ let result if ( res.error ) { - result = Object.assign({error: true}, res.err) + result = Object.assign({ + error: true, + name: res.err.name, + message: res.err.message, + statusCode: res.err.statusCode + }, res.err.response) } else { result = res } @@ -86,7 +91,7 @@ export default { let newState = state.setIn( [ "responses", path, method ], fromJSOrdered(result) ) // ImmutableJS messes up Blob. Needs to reset its value. - if (res.data instanceof win.Blob) { + if (win.Blob && res.data instanceof win.Blob) { newState = newState.setIn( [ "responses", path, method, "text" ], res.data) } return newState diff --git a/test/core/plugins/spec-reducer.js b/test/core/plugins/spec-reducer.js index 32113543..09e73b7c 100644 --- a/test/core/plugins/spec-reducer.js +++ b/test/core/plugins/spec-reducer.js @@ -69,4 +69,56 @@ describe("spec plugin - reducer", function(){ expect(result.toJS()).toEqual(state.toJS()) }) }) + + describe("set response value", function() { + it("should combine the response and error objects", () => { + const setResponse = reducer["spec_set_response"] + + const path = "/pet/post" + const method = "POST" + + const state = fromJS({}) + const result = setResponse(state, { + payload: { + path: path, + method: method, + res: { + error: true, + err: { + message: "Not Found", + name: "Error", + response: { + data: "response data", + headers: { + key: "value" + }, + ok: false, + status: 404, + statusText: "Not Found" + }, + status: 404, + statusCode: 404 + } + } + } + }) + + let expectedResult = { + error: true, + message: "Not Found", + name: "Error", + data: "response data", + headers: { + key: "value" + }, + ok: false, + status: 404, + statusCode: 404, + statusText: "Not Found" + } + + const response = result.getIn(["responses", path, method]).toJS() + expect(response).toEqual(expectedResult) + }) + }) })