diff --git a/src/core/components/parameter-row.jsx b/src/core/components/parameter-row.jsx
index d935e91eec0..f6e3860eb3b 100644
--- a/src/core/components/parameter-row.jsx
+++ b/src/core/components/parameter-row.jsx
@@ -107,40 +107,43 @@ export default class ParameterRow extends Component {
let paramWithMeta = specSelectors.parameterWithMeta(pathMethod, param.get("name"), param.get("in"))
- let schema = param.get("schema")
- let type = isOAS3 && isOAS3() ? param.getIn(["schema", "type"]) : param.get("type")
+ let schema = isOAS3 && isOAS3() ? param.get("schema") : param
+ let type = schema.get("type")
let isFormData = inType === "formData"
let isFormDataSupported = "FormData" in win
let required = param.get("required")
- let itemType = param.getIn(isOAS3 && isOAS3() ? ["schema", "items", "type"] : ["items", "type"])
+ let itemType = schema.getIn(["items", "type"])
let value = paramWithMeta ? paramWithMeta.get("value") : ""
let extensions = getExtensions(param)
let paramItems // undefined
- let paramItemsEnum // undefined
- let isDisplayParamItemsEnum = false
+ let paramEnum // undefined
+ let paramDefaultValue // undefined
+ let paramExample // undefined
+ let isDisplayParamEnum = false
+
if ( param !== undefined ) {
- paramItems = param.get("items")
+ paramItems = schema.get("items")
}
- if ( paramItems !== undefined ) {
- paramItemsEnum = param.get("items").get("enum")
+
+ if (paramItems !== undefined) {
+ paramEnum = paramItems.get("enum")
+ paramDefaultValue = paramItems.get("default")
+ } else {
+ paramEnum = schema.get("enum")
}
- if ( paramItemsEnum !== undefined ) {
- if (paramItemsEnum.size > 0) {
- isDisplayParamItemsEnum = true
- }
+
+ if ( paramEnum !== undefined && paramEnum.size > 0) {
+ isDisplayParamEnum = true
}
// Default and Example Value for readonly doc
- let paramDefaultValue // undefined
- let paramExample // undefined
if ( param !== undefined ) {
- paramDefaultValue = param.get("default")
+ paramDefaultValue = schema.get("default")
paramExample = param.get("example")
- }
-
- if (isDisplayParamItemsEnum) { // if we have an array, default value is in "items"
- paramDefaultValue = paramItems.get("default")
+ if (paramExample === undefined) {
+ paramExample = param.get("x-example")
+ }
}
return (
@@ -159,23 +162,18 @@ export default class ParameterRow extends Component {
-
+ { param.get("description") ? : null }
- { (bodyParam || !isExecute) && isDisplayParamItemsEnum ?
- Available values: " + paramItemsEnum.map(function(item) {
+ { (bodyParam || !isExecute) && isDisplayParamEnum ?
+ Available values : " + paramEnum.map(function(item) {
return item
}).toArray().join(", ")}/>
: null
}
{ (bodyParam || !isExecute) && paramDefaultValue !== undefined ?
- Default value: " + paramDefaultValue}/>
- : null
- }
-
- { (bodyParam || !isExecute) && paramExample !== undefined ?
- Example: " + paramExample}/>
+ Default value : " + paramDefaultValue}/>
: null
}
@@ -189,7 +187,7 @@ export default class ParameterRow extends Component {
description={param.get("description") ? `${param.get("name")} - ${param.get("description")}` : `${param.get("name")}`}
onChange={ this.onChangeWrapper }
errors={ paramWithMeta.get("errors") }
- schema={ isOAS3 && isOAS3() ? param.get("schema") : param }/>
+ schema={ schema }/>
}
diff --git a/src/core/components/providers/markdown.jsx b/src/core/components/providers/markdown.jsx
index 9707ece686d..a4bca726d06 100644
--- a/src/core/components/providers/markdown.jsx
+++ b/src/core/components/providers/markdown.jsx
@@ -2,11 +2,12 @@ import React from "react"
import PropTypes from "prop-types"
import Remarkable from "remarkable"
import sanitize from "sanitize-html"
+import cx from "classnames"
// eslint-disable-next-line no-useless-escape
const isPlainText = (str) => /^[A-Z\s0-9!?\.]+$/gi.test(str)
-function Markdown({ source }) {
+function Markdown({ source, className = "" }) {
if(isPlainText(source)) {
// If the source text is not Markdown,
// let's save some time and just render it.
@@ -28,12 +29,13 @@ function Markdown({ source }) {
}
return (
-
+
)
}
Markdown.propTypes = {
- source: PropTypes.string.isRequired
+ source: PropTypes.string.isRequired,
+ className: PropTypes.string.isRequired
}
export default Markdown
diff --git a/src/core/plugins/oas3/wrap-components/markdown.js b/src/core/plugins/oas3/wrap-components/markdown.js
index 2d7f27e7666..9bfdffb931d 100644
--- a/src/core/plugins/oas3/wrap-components/markdown.js
+++ b/src/core/plugins/oas3/wrap-components/markdown.js
@@ -1,11 +1,12 @@
import React from "react"
import PropTypes from "prop-types"
import ReactMarkdown from "react-markdown"
+import cx from "classnames"
import { Parser, HtmlRenderer } from "commonmark"
import { OAS3ComponentWrapFactory } from "../helpers"
import { sanitizer } from "core/components/providers/markdown"
-export const Markdown = ({ source }) => {
+export const Markdown = ({ source, className = "" }) => {
if ( source ) {
const parser = new Parser()
const writer = new HtmlRenderer()
@@ -19,14 +20,15 @@ export const Markdown = ({ source }) => {
return (
)
}
return null
}
Markdown.propTypes = {
- source: PropTypes.string
+ source: PropTypes.string,
+ className: PropTypes.string,
}
-export default OAS3ComponentWrapFactory(Markdown)
\ No newline at end of file
+export default OAS3ComponentWrapFactory(Markdown)
diff --git a/test/e2e/scenarios/features/parameter-enum-rendering.js b/test/e2e/scenarios/features/parameter-enum-rendering.js
new file mode 100644
index 00000000000..e478794d6d2
--- /dev/null
+++ b/test/e2e/scenarios/features/parameter-enum-rendering.js
@@ -0,0 +1,58 @@
+describe("parameter enum rendering", function () {
+ describe("swagger 2.0", () => {
+ beforeEach(function (client, done) {
+ client
+ .url("localhost:3230")
+ .waitForElementVisible(".download-url-input", 10000)
+ .pause(1000)
+ .clearValue(".download-url-input")
+ .setValue(".download-url-input", "http://localhost:3230/test-specs/features/parameter-enum-rendering.swagger.yaml")
+ .click("button.download-url-button")
+ .pause(1000)
+
+ done()
+ })
+ afterEach(function (client, done) {
+ done()
+ })
+ it("reveals a string parameter's enums and defaults when viewing that parameter", function (client) {
+ client.waitForElementVisible(".opblock-tag-section", 10000)
+ .assert.containsText(".opblock-summary-path span", "/report")
+ .click(".opblock")
+ .waitForElementVisible(".opblock.is-open", 5000)
+ .pause(500)
+ .assert.containsText("div.parameter__enum", "today, yesterday, lastweek")
+ .assert.containsText("div.parameter__default", "today")
+
+ client.end()
+ })
+ })
+ describe("openapi 3.0", () => {
+ beforeEach(function (client, done) {
+ client
+ .url("localhost:3230")
+ .waitForElementVisible(".download-url-input", 10000)
+ .pause(1000)
+ .clearValue(".download-url-input")
+ .setValue(".download-url-input", "http://localhost:3230/test-specs/features/parameter-enum-rendering.openapi.yaml")
+ .click("button.download-url-button")
+ .pause(1000)
+
+ done()
+ })
+ afterEach(function (client, done) {
+ done()
+ })
+ it("reveals a string parameter's enums and defaults when viewing that parameter", function (client) {
+ client.waitForElementVisible(".opblock-tag-section", 10000)
+ .assert.containsText(".opblock-summary-path span", "/report")
+ .click(".opblock")
+ .waitForElementVisible(".opblock.is-open", 5000)
+ .pause(500)
+ .assert.containsText("div.parameter__enum", "today, yesterday, lastweek")
+ .assert.containsText("div.parameter__default", "today")
+
+ client.end()
+ })
+ })
+})
diff --git a/test/e2e/specs/features/parameter-enum-rendering.openapi.yaml b/test/e2e/specs/features/parameter-enum-rendering.openapi.yaml
new file mode 100644
index 00000000000..444cf19cad2
--- /dev/null
+++ b/test/e2e/specs/features/parameter-enum-rendering.openapi.yaml
@@ -0,0 +1,21 @@
+openapi: 3.0.0
+info:
+ title: test
+ version: 0.0.0
+paths:
+ /report:
+ get:
+ parameters:
+ - in: query
+ name: rel_date
+ required: true
+ schema:
+ type: string
+ default: today
+ enum:
+ - today
+ - yesterday
+ - lastweek
+ responses:
+ '200':
+ description: OK
diff --git a/test/e2e/specs/features/parameter-enum-rendering.swagger.yaml b/test/e2e/specs/features/parameter-enum-rendering.swagger.yaml
new file mode 100644
index 00000000000..b81c88d99f9
--- /dev/null
+++ b/test/e2e/specs/features/parameter-enum-rendering.swagger.yaml
@@ -0,0 +1,20 @@
+swagger: '2.0'
+info:
+ title: test
+ version: 0.0.0
+paths:
+ /report:
+ get:
+ parameters:
+ - in: query
+ name: rel_date
+ required: true
+ type: string
+ default: today
+ enum:
+ - today
+ - yesterday
+ - lastweek
+ responses:
+ 200:
+ description: OK
|