diff --git a/src/core/components/response.jsx b/src/core/components/response.jsx index a06f05f0..02662f90 100644 --- a/src/core/components/response.jsx +++ b/src/core/components/response.jsx @@ -1,7 +1,7 @@ import React from "react" import PropTypes from "prop-types" import { fromJS, Seq } from "immutable" -import { getSampleSchema } from "core/utils" +import { getSampleSchema, fromJSOrdered } from "core/utils" const getExampleComponent = ( sampleResponse, examples, HighlightCode ) => { if ( examples && examples.size ) { @@ -58,7 +58,6 @@ export default class Response extends React.Component { code, response, className, - fn, getComponent, specSelectors, @@ -117,7 +116,7 @@ export default class Response extends React.Component { value.toOrderedMap() ) } + schema={ fromJSOrdered(schema) } example={ example }/> ) : null} diff --git a/test/components/response.js b/test/components/response.js new file mode 100644 index 00000000..6919435a --- /dev/null +++ b/test/components/response.js @@ -0,0 +1,58 @@ +import React from "react" +import expect from "expect" +import { shallow } from "enzyme" +import { fromJS } from "immutable" +import Response from "components/response" +import ModelExample from "components/model-example" +import { inferSchema } from "corePlugins/samples/fn" + +describe("", function() { + const dummyComponent = () => null + const components = { + headers: dummyComponent, + highlightCode: dummyComponent, + modelExample: ModelExample, + Markdown: dummyComponent, + operationLink: dummyComponent, + contentType: dummyComponent + } + const props = { + getComponent: c => components[c], + specSelectors: { + isOAS3() { + return false + } + }, + fn: { + inferSchema + }, + contentType: "application/json", + className: "for-test", + response: fromJS({ + type: "object", + properties: { + // Note reverse order: c, b, a + "c": { + type: "integer" + }, + "b": { + type: "boolean" + }, + "a": { + type: "string" + } + } + }), + code: "200" + } + + it("renders the model-example schema properties in order", function() { + const wrapper = shallow() + const renderedModelExample = wrapper.find(ModelExample) + expect(renderedModelExample.length).toEqual(1) + + // Assert the schema's properties have maintained their order + const modelExampleSchemaProperties = renderedModelExample.props().schema.toJS().properties + expect( Object.keys(modelExampleSchemaProperties) ).toEqual(["c", "b", "a"]) + }) +}) \ No newline at end of file