143 lines
4.1 KiB
JavaScript
143 lines
4.1 KiB
JavaScript
import expect from "expect"
|
|
import validateHelper, { expectNoErrors } from "./validate-helper.js"
|
|
|
|
describe("validation plugin - semantic - parameters", function() {
|
|
this.timeout(10 * 1000 ) // For swagger-ui startup
|
|
|
|
it("should return an error when an array type parameter omits an `items` property", () => {
|
|
const spec = {
|
|
swagger: "2.0",
|
|
"paths": {
|
|
"/pets": {
|
|
"get": {
|
|
"parameters": [
|
|
{
|
|
"name": "tags",
|
|
"in": "query",
|
|
"description": "tags to filter by",
|
|
"type": "array"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return validateHelper(spec)
|
|
.then(system => {
|
|
const allErrors = system.errSelectors.allErrors().toJS()
|
|
const firstError = allErrors[0]
|
|
expect(allErrors.length).toEqual(1)
|
|
expect(firstError.path).toEqual(["paths", "/pets", "get", "parameters", "0"])
|
|
expect(firstError.message).toMatch(/.*type.*array.*require.*items/)
|
|
})
|
|
})
|
|
|
|
describe("Operations cannot have both a 'body' parameter and a 'formData' parameter", () => {
|
|
it("should complain about having both in the same operation", function(){
|
|
const spec = {
|
|
swagger: "2.0",
|
|
paths: {
|
|
"/": {
|
|
get: {
|
|
consumes: ["multipart/form-data"],
|
|
parameters: [
|
|
{ in: "formData" },
|
|
{ in: "body" },
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return validateHelper(spec)
|
|
.then(system => {
|
|
const allErrors = system.errSelectors.allErrors().toJS()
|
|
const firstError = allErrors[0]
|
|
expect(allErrors.length).toEqual(1)
|
|
expect(firstError.message).toEqual(`Parameters cannot have both a "in: body" and "in: formData", as "formData" _will_ be the body`)
|
|
expect(firstError.path).toEqual(["paths", "/", "get", "parameters"])
|
|
})
|
|
})
|
|
it("should not complain about having only a body parameter in the same operation", function(){
|
|
const spec = {
|
|
swagger: "2.0",
|
|
paths: {
|
|
"/": {
|
|
get: {
|
|
consumes: ["multipart/form-data"],
|
|
parameters: [
|
|
{ in: "body" },
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return expectNoErrors(spec)
|
|
})
|
|
it("should not complain about having only a formData parameter in the same operation", function(){
|
|
const spec = {
|
|
swagger: "2.0",
|
|
paths: {
|
|
"/": {
|
|
get: {
|
|
consumes: ["multipart/form-data"],
|
|
parameters: [
|
|
{ in: "formData" },
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return expectNoErrors(spec)
|
|
})
|
|
})
|
|
|
|
describe("Operations must have only one body parameter", () => {
|
|
it("should complain about having two body parameters in the same operation", function(){
|
|
const spec = {
|
|
swagger: "2.0",
|
|
paths: {
|
|
"/": {
|
|
get: {
|
|
consumes: ["multipart/form-data"],
|
|
parameters: [
|
|
{ in: "body" },
|
|
{ in: "body" },
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return validateHelper(spec)
|
|
.then(system => {
|
|
const allErrors = system.errSelectors.allErrors().toJS()
|
|
const firstError = allErrors[0]
|
|
expect(allErrors.length).toEqual(1)
|
|
expect(firstError.message).toEqual(`Multiple body parameters are not allowed.`)
|
|
expect(firstError.path).toEqual(["paths", "/", "get", "parameters"])
|
|
})
|
|
})
|
|
it("should not complain about having one body parameter in the same operation", function(){
|
|
const spec = {
|
|
swagger: "2.0",
|
|
paths: {
|
|
"/": {
|
|
get: {
|
|
consumes: ["multipart/form-data"],
|
|
parameters: [
|
|
{ in: "body" }
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return expectNoErrors(spec)
|
|
})
|
|
})
|
|
})
|