diff --git a/src/core/components/layouts/base.jsx b/src/core/components/layouts/base.jsx index f502b88f..ea5fbce1 100644 --- a/src/core/components/layouts/base.jsx +++ b/src/core/components/layouts/base.jsx @@ -69,7 +69,10 @@ export default class BaseLayout extends React.Component {
{ schemes && schemes.size ? ( - + ) : null } { securityDefinitions ? ( diff --git a/src/core/components/schemes.jsx b/src/core/components/schemes.jsx index f9fe8f81..89ba0fbc 100644 --- a/src/core/components/schemes.jsx +++ b/src/core/components/schemes.jsx @@ -19,7 +19,7 @@ export default class Schemes extends React.Component { } componentWillReceiveProps(nextProps) { - if ( !this.props.operationScheme || !nextProps.schemes.has(this.props.operationScheme) ) { + if ( !this.props.operationScheme || !nextProps.schemes.includes(this.props.operationScheme) ) { // if we don't have a selected operationScheme or if our selected scheme is no longer an option, // then fire 'change' event and select the first scheme in the list of options this.setScheme(nextProps.schemes.first()) diff --git a/test/components/schemes.js b/test/components/schemes.js index a21c0628..8e0ebc1f 100644 --- a/test/components/schemes.js +++ b/test/components/schemes.js @@ -9,10 +9,12 @@ import Schemes from "components/schemes" describe("", function(){ it("calls props.specActions.setScheme() when no operationScheme is selected", function(){ + let setSchemeSpy = createSpy() + // Given let props = { specActions: { - setScheme: createSpy() + setScheme: setSchemeSpy }, schemes: fromJS([ "http", @@ -22,7 +24,7 @@ describe("", function(){ path: "/test", method: "get" } - + // When let wrapper = shallow() @@ -38,4 +40,33 @@ describe("", function(){ // Then operationScheme should default to first scheme in options list expect(props.specActions.setScheme).toHaveBeenCalledWith("https", "/test", "get") }) + + it.only("doesn't call props.specActions.setScheme() when schemes hasn't changed", function(){ + + let setSchemeSpy = createSpy() + + // Given + let props = { + specActions: { + setScheme: setSchemeSpy + }, + schemes: fromJS([ + "http", + "https" + ]), + operationScheme: "https" + } + + // When + let wrapper = shallow() + + // Should be called initially, to set the global state + expect(setSchemeSpy.calls.length).toEqual(1) + + // After an update + wrapper.instance().componentWillReceiveProps(props) + + // Should not be called again, since `operationScheme` is in schemes + expect(setSchemeSpy.calls.length).toEqual(1) + }) })