From f929d4fdd6676e1d3f2bc08b106a90b4d5bf5882 Mon Sep 17 00:00:00 2001 From: Conor Lennon Date: Sun, 12 Nov 2017 20:35:15 +0000 Subject: [PATCH 1/7] Remove check that the response has a content-length when making a download link available. --- src/core/components/response-body.jsx | 3 --- 1 file changed, 3 deletions(-) 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) { From 40bd720eb4b6c62c67a330190eaed985e63eefae Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Tue, 28 Nov 2017 22:19:53 -0600 Subject: [PATCH 2/7] Correctly validate OAS3 parameters that lack a `schema` --- src/core/utils.js | 7 +++++-- test/core/utils.js | 7 ++----- 2 files changed, 7 insertions(+), 7 deletions(-) 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/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( [] ) From e17a5f40f58382b13d4485d209b178e33c0f62b9 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Wed, 29 Nov 2017 19:03:40 -0600 Subject: [PATCH 3/7] Add JsonSchemaForm tests, including one failing --- test/components/json-schema-form.js | 111 ++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 test/components/json-schema-form.js diff --git a/test/components/json-schema-form.js b/test/components/json-schema-form.js new file mode 100644 index 00000000..7bd528e7 --- /dev/null +++ b/test/components/json-schema-form.js @@ -0,0 +1,111 @@ +/* eslint-env mocha */ +import React from "react" +import expect, { createSpy } from "expect" +import { Select } 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} + +const getComponentStub = (name) => { + return components[name] || (() => { + console.error(`Couldn't find "${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").eq(1).text()).toEqual("true") + }) + }) +}) From 8d1d15ca4adf5399ef2a494b1b9708eae762e98c Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Wed, 29 Nov 2017 19:04:50 -0600 Subject: [PATCH 4/7] Simplify JsonSchemaform getComponent logic --- src/core/json-schema-components.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/core/json-schema-components.js b/src/core/json-schema-components.js index e8bf1e44..eeb294f3 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 () } } From 5224932cf9731f63f16623727fdda1fecd45edb9 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Wed, 29 Nov 2017 19:21:20 -0600 Subject: [PATCH 5/7] Fix failing test --- src/core/components/layout-utils.jsx | 2 +- src/core/json-schema-components.js | 4 ++-- test/components/json-schema-form.js | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) 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/json-schema-components.js b/src/core/json-schema-components.js index eeb294f3..222f4053 100644 --- a/src/core/json-schema-components.js +++ b/src/core/json-schema-components.js @@ -189,8 +189,8 @@ export class JsonSchema_boolean extends Component { return (