live-response.jsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /* eslint-env mocha */
  2. import React from "react"
  3. import { fromJSOrdered } from "core/utils"
  4. import expect, { createSpy } from "expect"
  5. import { shallow } from "enzyme"
  6. import Curl from "components/curl"
  7. import LiveResponse from "components/live-response"
  8. import ResponseBody from "components/response-body"
  9. describe("<LiveResponse/>", function () {
  10. let request = fromJSOrdered({
  11. credentials: "same-origin",
  12. headers: {
  13. accept: "application/xml"
  14. },
  15. url: "http://petstore.swagger.io/v2/pet/1"
  16. })
  17. let mutatedRequest = fromJSOrdered({
  18. credentials: "same-origin",
  19. headers: {
  20. accept: "application/xml",
  21. mutated: "header"
  22. },
  23. url: "http://mutated.petstore.swagger.io/v2/pet/1"
  24. })
  25. let requests = {
  26. request: request,
  27. mutatedRequest: mutatedRequest
  28. }
  29. const tests = [
  30. { showMutatedRequest: true, expected: { request: "mutatedRequest", requestForCalls: 0, mutatedRequestForCalls: 1 } },
  31. { showMutatedRequest: false, expected: { request: "request", requestForCalls: 1, mutatedRequestForCalls: 0 } }
  32. ]
  33. tests.forEach(function (test) {
  34. it("passes " + test.expected.request + " to Curl when showMutatedRequest = " + test.showMutatedRequest, function () {
  35. // Given
  36. let response = fromJSOrdered({
  37. status: 200,
  38. url: "http://petstore.swagger.io/v2/pet/1",
  39. headers: {
  40. "content-type": "application/xml"
  41. },
  42. text: "<response/>",
  43. duration: 50
  44. })
  45. let mutatedRequestForSpy = createSpy().andReturn(mutatedRequest)
  46. let requestForSpy = createSpy().andReturn(request)
  47. let components = {
  48. curl: Curl,
  49. responseBody: ResponseBody
  50. }
  51. let props = {
  52. response: response,
  53. specSelectors: {
  54. mutatedRequestFor: mutatedRequestForSpy,
  55. requestFor: requestForSpy,
  56. },
  57. pathMethod: ["/one", "get"],
  58. getComponent: (c) => {
  59. return components[c]
  60. },
  61. displayRequestDuration: true,
  62. getConfigs: () => ({ showMutatedRequest: test.showMutatedRequest })
  63. }
  64. // When
  65. let wrapper = shallow(<LiveResponse {...props} />)
  66. // Then
  67. expect(mutatedRequestForSpy.calls.length).toEqual(test.expected.mutatedRequestForCalls)
  68. expect(requestForSpy.calls.length).toEqual(test.expected.requestForCalls)
  69. const curl = wrapper.find(Curl)
  70. expect(curl.length).toEqual(1)
  71. expect(curl.props().request).toBe(requests[test.expected.request])
  72. const expectedUrl = requests[test.expected.request].get("url")
  73. expect(wrapper.find("div.request-url pre.microlight").text()).toEqual(expectedUrl)
  74. let duration = wrapper.find("Duration")
  75. expect(duration.length).toEqual(1)
  76. expect(duration.props().duration).toEqual(50)
  77. expect(duration.html())
  78. .toEqual("<div><h5>Request duration</h5><pre class=\"microlight\">50 ms</pre></div>")
  79. let responseHeaders = wrapper.find("Headers")
  80. expect(duration.length).toEqual(1)
  81. expect(responseHeaders.props().headers.length).toEqual(1)
  82. expect(responseHeaders.props().headers[0].key).toEqual("content-type")
  83. expect(responseHeaders.html())
  84. .toEqual("<div><h5>Response headers</h5><pre class=\"microlight\"><span class=\"headerline\"> content-type: application/xml </span></pre></div>")
  85. })
  86. })
  87. })