diff --git a/src/core/plugins/oas3/spec-extensions/wrap-selectors.js b/src/core/plugins/oas3/spec-extensions/wrap-selectors.js index e252bcc2..19a18317 100644 --- a/src/core/plugins/oas3/spec-extensions/wrap-selectors.js +++ b/src/core/plugins/oas3/spec-extensions/wrap-selectors.js @@ -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) => { diff --git a/src/core/plugins/spec/selectors.js b/src/core/plugins/spec/selectors.js index a7410844..0274e213 100644 --- a/src/core/plugins/spec/selectors.js +++ b/src/core/plugins/spec/selectors.js @@ -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( diff --git a/test/core/plugins/oas3/wrap-spec-selectors.js b/test/core/plugins/oas3/wrap-spec-selectors.js new file mode 100644 index 00000000..24cc3db1 --- /dev/null +++ b/test/core/plugins/oas3/wrap-spec-selectors.js @@ -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({}) + }) + }) + +}) diff --git a/test/core/plugins/spec/selectors.js b/test/core/plugins/spec/selectors.js index 2bb603ab..0244bcff 100644 --- a/test/core/plugins/spec/selectors.js +++ b/test/core/plugins/spec/selectors.js @@ -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(){