Ver código fonte

Merge pull request #3294 from owenconti/bug/3072-error-response-fixes

#3072 - Body and headers on error responses
bubble
shockey 7 anos atrás
committed by GitHub
pai
commit
20ab734edf
5 arquivos alterados com 83 adições e 28 exclusões
  1. +1
    -3
      src/core/components/live-response.jsx
  2. +1
    -1
      src/core/components/response-body.jsx
  3. +22
    -22
      src/core/plugins/spec/actions.js
  4. +7
    -2
      src/core/plugins/spec/reducers.js
  5. +52
    -0
      test/core/plugins/spec-reducer.js

+ 1
- 3
src/core/components/live-response.jsx Ver arquivo

@@ -40,10 +40,8 @@ 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 = response.get("text")
const duration = response.get("duration")

const body = isError ? response.get("response").get("text") : response.get("text")

const headersKeys = Object.keys(headers)
const contentType = headers["content-type"]



+ 1
- 1
src/core/components/response-body.jsx Ver arquivo

@@ -6,7 +6,7 @@ export default class ResponseBody extends React.Component {

static propTypes = {
content: PropTypes.any.isRequired,
contentType: PropTypes.string.isRequired,
contentType: PropTypes.string,
getComponent: PropTypes.func.isRequired,
headers: PropTypes.object,
url: PropTypes.string


+ 22
- 22
src/core/plugins/spec/actions.js Ver arquivo

@@ -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"
})
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)
})
.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)
}
return specActions.updateResolved(spec)
})
}

export const formatIntoYaml = () => ({specActions, specSelectors}) => {


+ 7
- 2
src/core/plugins/spec/reducers.js Ver arquivo

@@ -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


+ 52
- 0
test/core/plugins/spec-reducer.js Ver arquivo

@@ -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)
})
})
})

Carregando…
Cancelar
Salvar