fix: non-typesafe spec selector (via #5121)

* add failing tests

* fix things
This commit is contained in:
kyle
2019-01-12 00:58:20 -06:00
committed by GitHub
parent babcfb6b39
commit 315819b2c9
4 changed files with 172 additions and 2 deletions

View File

@@ -46,7 +46,10 @@ const spec = state => {
export const definitions = onlyOAS3(createSelector(
spec,
spec => spec.getIn(["components", "schemas"]) || Map()
spec => {
const res = spec.getIn(["components", "schemas"])
return Map.isMap(res) ? res : Map()
}
))
export const hasHost = onlyOAS3((state) => {

View File

@@ -175,7 +175,10 @@ export const findDefinition = ( state, name ) => {
export const definitions = createSelector(
spec,
spec => spec.get("definitions") || Map()
spec => {
const res = spec.get("definitions")
return Map.isMap(res) ? res : Map()
}
)
export const basePath = createSelector(

View File

@@ -0,0 +1,99 @@
/* eslint-env mocha */
import expect, { createSpy } from "expect"
import { Map, fromJS } from "immutable"
import {
definitions
} from "corePlugins/oas3/spec-extensions/wrap-selectors"
describe("oas3 plugin - spec extensions - wrapSelectors", function(){
describe("definitions", function(){
it("should return definitions by default", function () {
// Given
const spec = fromJS({
openapi: "3.0.0",
components: {
schemas: {
a: {
type: "string"
},
b: {
type: "string"
}
}
}
})
const system = {
getSystem: () => system,
specSelectors: {
specJson: () => spec,
}
}
// When
let res = definitions(() => null, system)(fromJS({
json: spec
}))
// Then
expect(res.toJS()).toEqual({
a: {
type: "string"
},
b: {
type: "string"
}
})
})
it("should return an empty Map when missing definitions", function () {
// Given
const spec = fromJS({
openapi: "3.0.0"
})
const system = {
getSystem: () => system,
specSelectors: {
specJson: () => spec,
}
}
// When
let res = definitions(() => null, system)(fromJS({
json: spec
}))
// Then
expect(res.toJS()).toEqual({})
})
it("should return an empty Map when given non-object definitions", function () {
// Given
const spec = fromJS({
openapi: "3.0.0",
components: {
schemas: "..."
}
})
const system = {
getSystem: () => system,
specSelectors: {
specJson: () => spec,
}
}
// When
let res = definitions(() => null, system)(fromJS({
json: spec
}))
// Then
expect(res.toJS()).toEqual({})
})
})
})

View File

@@ -3,6 +3,7 @@ import expect from "expect"
import { fromJS } from "immutable"
import { fromJSOrdered } from "core/utils"
import {
definitions,
parameterValues,
contentTypeValues,
operationScheme,
@@ -21,6 +22,70 @@ import {
describe("spec plugin - selectors", function(){
describe("definitions", function(){
it("should return definitions by default", function(){
// Given
const spec = fromJS({
json: {
swagger: "2.0",
definitions: {
a: {
type: "string"
},
b: {
type: "string"
}
}
}
})
// When
let res = definitions(spec)
// Then
expect(res.toJS()).toEqual({
a: {
type: "string"
},
b: {
type: "string"
}
})
})
it("should return an empty Map when missing definitions", function(){
// Given
const spec = fromJS({
json: {
swagger: "2.0"
}
})
// When
let res = definitions(spec)
// Then
expect(res.toJS()).toEqual({})
})
it("should return an empty Map when given non-object definitions", function(){
// Given
const spec = fromJS({
json: {
swagger: "2.0",
definitions: "..."
}
})
// When
let res = definitions(spec)
// Then
expect(res.toJS()).toEqual({})
})
})
describe("parameterValue", function(){
it("should return Map({}) if no path found", function(){