diff --git a/src/core/components/layout-utils.jsx b/src/core/components/layout-utils.jsx
index d1adfeb1..1601681f 100644
--- a/src/core/components/layout-utils.jsx
+++ b/src/core/components/layout-utils.jsx
@@ -183,7 +183,7 @@ export class Select extends React.Component {
{ allowEmptyValue ? : null }
{
allowedValues.map(function (item, key) {
- return
+ return
})
}
diff --git a/src/core/components/response-body.jsx b/src/core/components/response-body.jsx
index a8518629..1e48f4e5 100644
--- a/src/core/components/response-body.jsx
+++ b/src/core/components/response-body.jsx
@@ -57,9 +57,6 @@ export default class ResponseBody extends React.Component {
(headers["Content-Description"] && (/File Transfer/i).test(headers["Content-Description"])) ||
(headers["content-description"] && (/File Transfer/i).test(headers["content-description"]))) {
- let contentLength = headers["content-length"] || headers["Content-Length"]
- if ( !(+contentLength) ) return null
-
const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent)
if (!isSafari && "Blob" in window) {
diff --git a/src/core/json-schema-components.js b/src/core/json-schema-components.js
index e8bf1e44..07fcada2 100644
--- a/src/core/json-schema-components.js
+++ b/src/core/json-schema-components.js
@@ -36,7 +36,7 @@ export class JsonSchemaForm extends Component {
let { type, format="" } = schema
- let Comp = getComponent(`JsonSchema_${type}_${format}`) || getComponent(`JsonSchema_${type}`) || getComponent("JsonSchema_string")
+ let Comp = (format ? getComponent(`JsonSchema_${type}_${format}`) : getComponent(`JsonSchema_${type}`)) || getComponent("JsonSchema_string")
return
}
@@ -68,19 +68,19 @@ export class JsonSchema_string extends Component {
const isDisabled = schema["in"] === "formData" && !("FormData" in window)
const Input = getComponent("Input")
if (schema["type"] === "file") {
- return ()
}
else {
- return ()
}
}
@@ -189,8 +189,8 @@ export class JsonSchema_boolean extends Component {
return ()
}
}
diff --git a/src/core/utils.js b/src/core/utils.js
index 70dd3cfe..5f86f6d4 100644
--- a/src/core/utils.js
+++ b/src/core/utils.js
@@ -473,6 +473,9 @@ export const validateParam = (param, isXml, isOAS3 = false) => {
let required = param.get("required")
let paramDetails = isOAS3 ? param.get("schema") : param
+
+ if(!paramDetails) return errors
+
let maximum = paramDetails.get("maximum")
let minimum = paramDetails.get("minimum")
let type = paramDetails.get("type")
@@ -480,7 +483,7 @@ export const validateParam = (param, isXml, isOAS3 = false) => {
let maxLength = paramDetails.get("maxLength")
let minLength = paramDetails.get("minLength")
let pattern = paramDetails.get("pattern")
-
+
/*
If the parameter is required OR the parameter has a value (meaning optional, but filled in)
@@ -506,7 +509,7 @@ export const validateParam = (param, isXml, isOAS3 = false) => {
let err = validatePattern(value, pattern)
if (err) errors.push(err)
}
-
+
if (maxLength || maxLength === 0) {
let err = validateMaxLength(value, maxLength)
if (err) errors.push(err)
diff --git a/test/components/json-schema-form.js b/test/components/json-schema-form.js
new file mode 100644
index 00000000..ba551919
--- /dev/null
+++ b/test/components/json-schema-form.js
@@ -0,0 +1,154 @@
+/* eslint-env mocha */
+import React from "react"
+import expect, { createSpy } from "expect"
+import { Select, Input } from "components/layout-utils"
+import { render } from "enzyme"
+import * as JsonSchemaComponents from "core/json-schema-components"
+import { JsonSchemaForm } from "core/json-schema-components"
+
+const components = {...JsonSchemaComponents, Select, Input}
+
+const getComponentStub = (name) => {
+ if(components[name]) return components[name]
+
+ return null
+}
+
+describe("", function(){
+ describe("strings", function() {
+ it("should render the correct options for a string enum parameter", function(){
+
+ let props = {
+ getComponent: getComponentStub,
+ value: "",
+ onChange: () => {},
+ keyName: "",
+ fn: {},
+ schema: {
+ type: "string",
+ enum: ["one", "two"]
+ }
+ }
+
+ let wrapper = render()
+
+ expect(wrapper.find("select").length).toEqual(1)
+ expect(wrapper.find("select option").length).toEqual(3)
+ expect(wrapper.find("select option").eq(0).text()).toEqual("--")
+ expect(wrapper.find("select option").eq(1).text()).toEqual("one")
+ expect(wrapper.find("select option").eq(2).text()).toEqual("two")
+ })
+
+ it("should render the correct options for a required string enum parameter", function(){
+
+ let props = {
+ getComponent: getComponentStub,
+ value: "",
+ onChange: () => {},
+ keyName: "",
+ fn: {},
+ required: true,
+ schema: {
+ type: "string",
+ enum: ["one", "two"]
+ }
+ }
+
+ let wrapper = render()
+
+ expect(wrapper.find("select").length).toEqual(1)
+ expect(wrapper.find("select option").length).toEqual(2)
+ expect(wrapper.find("select option").eq(0).text()).toEqual("one")
+ expect(wrapper.find("select option").eq(1).text()).toEqual("two")
+ })
+ })
+ describe("booleans", function() {
+ it("should render the correct options for a boolean parameter", function(){
+
+ let props = {
+ getComponent: getComponentStub,
+ value: "",
+ onChange: () => {},
+ keyName: "",
+ fn: {},
+ schema: {
+ type: "boolean"
+ }
+ }
+
+ let wrapper = render()
+
+ expect(wrapper.find("select").length).toEqual(1)
+ expect(wrapper.find("select option").length).toEqual(3)
+ expect(wrapper.find("select option").eq(0).text()).toEqual("--")
+ expect(wrapper.find("select option").eq(1).text()).toEqual("true")
+ expect(wrapper.find("select option").eq(2).text()).toEqual("false")
+ })
+
+ it("should render the correct options for a required enum boolean parameter", function(){
+
+ let props = {
+ getComponent: getComponentStub,
+ value: "",
+ onChange: () => {},
+ keyName: "",
+ fn: {},
+ required: true,
+ schema: {
+ type: "boolean",
+ enum: ["true"]
+ }
+ }
+
+ let wrapper = render()
+
+ expect(wrapper.find("select").length).toEqual(1)
+ expect(wrapper.find("select option").length).toEqual(1)
+ expect(wrapper.find("select option").first().text()).toEqual("true")
+ })
+ })
+ describe("unknown types", function() {
+ it("should render unknown types as strings", function(){
+
+ let props = {
+ getComponent: getComponentStub,
+ value: "yo",
+ onChange: () => {},
+ keyName: "",
+ fn: {},
+ schema: {
+ type: "NotARealType"
+ }
+ }
+
+
+ let wrapper = render()
+
+ expect(wrapper.find("input").length).toEqual(1)
+ // expect(wrapper.find("select input").length).toEqual(1)
+ // expect(wrapper.find("select option").first().text()).toEqual("true")
+ })
+
+ it("should render unknown types as strings when a format is passed", function(){
+
+ let props = {
+ getComponent: getComponentStub,
+ value: "yo",
+ onChange: () => {},
+ keyName: "",
+ fn: {},
+ schema: {
+ type: "NotARealType",
+ format: "NotARealFormat"
+ }
+ }
+
+
+ let wrapper = render()
+
+ expect(wrapper.find("input").length).toEqual(1)
+ // expect(wrapper.find("select input").length).toEqual(1)
+ // expect(wrapper.find("select option").first().text()).toEqual("true")
+ })
+ })
+})
diff --git a/test/core/utils.js b/test/core/utils.js
index 73861845..5248af1c 100644
--- a/test/core/utils.js
+++ b/test/core/utils.js
@@ -321,14 +321,11 @@ describe("utils", function() {
}
it("should check the isOAS3 flag when validating parameters", function() {
- // This should "skip" validation because there is no `schema.type` property
+ // This should "skip" validation because there is no `schema` property
// and we are telling `validateParam` this is an OAS3 spec
param = fromJS({
value: "",
- required: true,
- schema: {
- notTheTypeProperty: "string"
- }
+ required: true
})
result = validateParam( param, false, true )
expect( result ).toEqual( [] )