Skip to content

Commit

Permalink
feat(sample-gen): yaml sample generation (#6858)
Browse files Browse the repository at this point in the history
* feat(sample-gen): yaml sample generation

if content / media type matches yaml or yml it will generate stringified sample like for json
in addition to that it will generate yaml out of the json sample

Signed-off-by: mathis-m <mathis.michel@outlook.de>

* test(unit-jest): getSampleSchema should handle yaml
  • Loading branch information
mathis-m committed Jan 25, 2021
1 parent e877580 commit 470e2fe
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
24 changes: 23 additions & 1 deletion src/core/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import cssEscape from "css.escape"
import getParameterSchema from "../helpers/get-parameter-schema"
import randomBytes from "randombytes"
import shaJs from "sha.js"
import YAML from "js-yaml"


const DEFAULT_RESPONSE_KEY = "default"
Expand Down Expand Up @@ -581,6 +582,25 @@ const getStringifiedSampleForSchema = (schema, config, contentType, exampleOverr
: res
}

const getYamlSampleSchema = (schema, config, contentType, exampleOverride) => {
const jsonExample = getStringifiedSampleForSchema(schema, config, contentType, exampleOverride)
let yamlString
try {
yamlString = YAML.safeDump(YAML.safeLoad(jsonExample), {

lineWidth: -1 // don't generate line folds
})
if(yamlString[yamlString.length - 1] === "\n") {
yamlString = yamlString.slice(0, yamlString.length - 1)
}
} catch (e) {
console.error(e)
return "error: could not generate yaml example"
}
return yamlString
.replace(/\t/g, " ")
}

export const getSampleSchema = (schema, contentType="", config={}, exampleOverride = undefined) => {
if(schema && isFunc(schema.toJS))
schema = schema.toJS()
Expand All @@ -590,7 +610,9 @@ export const getSampleSchema = (schema, contentType="", config={}, exampleOverri
if (/xml/.test(contentType)) {
return getXmlSampleSchema(schema, config, exampleOverride)
}

if (/(yaml|yml)/.test(contentType)) {
return getYamlSampleSchema(schema, config, contentType, exampleOverride)
}
return getStringifiedSampleForSchema(schema, config, contentType, exampleOverride)
}

Expand Down
16 changes: 16 additions & 0 deletions test/unit/core/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -1581,6 +1581,22 @@ describe("utils", () => {
const actual = JSON.parse(res)
expect(actual.test).toEqual(123)
})

it("should return yaml example if yaml is contained in the content-type", () => {
const res = getSampleSchema({
type: "object",
}, "text/yaml", {}, {test: 123})

expect(res).toEqual("test: 123")
})

it("should return yaml example if yml is contained in the content-type", () => {
const res = getSampleSchema({
type: "object",
}, "text/yml", {}, {test: 123})

expect(res).toEqual("test: 123")
})
})

describe("paramToIdentifier", () => {
Expand Down

0 comments on commit 470e2fe

Please sign in to comment.