Ekapp/swagger/test/unit/plugins/validate-semantic/security.js

147 lines
3.5 KiB
JavaScript

import expect from "expect"
import validateHelper, { expectNoErrorsOrWarnings } from "./validate-helper.js"
describe("validation plugin - semantic - security scopes", function() {
this.timeout(10 * 1000) // For the slow validateHelper startup ( via swagger-ui )
it("should return an error when an operation references a non-existing security scope", () => {
const spec = {
"swagger": "2.0",
"securityDefinitions": {
"api_key": {
"type": "apiKey",
"name": "apikey",
"in": "query",
"scopes": {
"asdf": "blah blah"
}
}
},
"paths": {
"/": {
"get": {
"description": "asdf",
"security": [
{
"api_key": [
"write:pets"
]
}
]
}
}
}
}
return validateHelper(spec)
.then(system => {
const allErrors = system.errSelectors.allErrors().toJS()
expect(allErrors.length).toEqual(1)
const firstError = allErrors[0]
expect(firstError.path).toEqual(["paths", "/", "get", "security", "0", "0"])
expect(firstError.message).toEqual("Security scope definition write:pets could not be resolved")
})
})
it("should return an error when an operation references a security definition with no scopes", () => {
const spec = {
"swagger": "2.0",
"securityDefinitions": {
"api_key": {
"type": "apiKey",
"name": "apikey",
"in": "query"
}
},
"paths": {
"/": {
"get": {
"description": "asdf",
"security": [
{
"api_key": [
"write:pets"
]
}
]
}
}
}
}
return validateHelper(spec)
.then(system => {
const allErrors = system.errSelectors.allErrors().toJS()
expect(allErrors.length).toEqual(1)
const firstError = allErrors[0]
expect(firstError.path).toEqual(["paths", "/", "get", "security", "0", "0"])
expect(firstError.message).toMatch("Security scope definition write:pets could not be resolved")
})
})
it("should not return an error when an operation references an existing security scope", () => {
const spec = {
"swagger": "2.0",
"securityDefinitions": {
"api_key": {
"type": "apiKey",
"name": "apikey",
"in": "query",
"scopes": {
"write:pets": "write to pets"
}
}
},
"paths": {
"/": {
"get": {
"description": "asdf",
"security": [
{
"api_key": [
"write:pets"
]
}
]
}
}
}
}
return expectNoErrorsOrWarnings(spec)
})
it("should not return an error when an top-level security references an existing security scope", () => {
const spec = {
"swagger": "2.0",
"securityDefinitions": {
"api_key": {
"type": "apiKey",
"name": "apikey",
"in": "query",
"scopes": {
"write:pets": ""
}
}
},
"security": [
{
"api_key": [
"write:pets"
]
}
],
"paths": {
"/": {
"get": {
"description": "asdf"
}
}
}
}
return expectNoErrorsOrWarnings(spec)
})
})