diff --git a/src/core/components/schemes.jsx b/src/core/components/schemes.jsx index 8be4180a..f9fe8f81 100644 --- a/src/core/components/schemes.jsx +++ b/src/core/components/schemes.jsx @@ -19,8 +19,9 @@ export default class Schemes extends React.Component { } componentWillReceiveProps(nextProps) { - if ( this.props.operationScheme && !nextProps.schemes.has(this.props.operationScheme) ) { - //fire 'change' event if our selected scheme is no longer an option + if ( !this.props.operationScheme || !nextProps.schemes.has(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/src/core/utils.js b/src/core/utils.js index 9e114dae..7cc5beda 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -41,7 +41,7 @@ export function fromJSOrdered (js) { return !isObject(js) ? js : Array.isArray(js) ? Im.Seq(js).map(fromJSOrdered).toList() : - Im.Seq(js).map(fromJSOrdered).toOrderedMap() + Im.OrderedMap(js).map(fromJSOrdered) } export function bindToState(obj, state) { diff --git a/test/components/schemes.js b/test/components/schemes.js new file mode 100644 index 00000000..a21c0628 --- /dev/null +++ b/test/components/schemes.js @@ -0,0 +1,41 @@ + +/* eslint-env mocha */ +import React from "react" +import expect, { createSpy } from "expect" +import { shallow } from "enzyme" +import { fromJS } from "immutable" +import Schemes from "components/schemes" + +describe("", function(){ + it("calls props.specActions.setScheme() when no operationScheme is selected", function(){ + + // Given + let props = { + specActions: { + setScheme: createSpy() + }, + schemes: fromJS([ + "http", + "https" + ]), + operationScheme: undefined, + path: "/test", + method: "get" + } + + // When + let wrapper = shallow() + + // Then operationScheme should default to first scheme in options list + expect(props.specActions.setScheme).toHaveBeenCalledWith("http", "/test" , "get") + + // When the operationScheme is no longer in the list of options + props.schemes = fromJS([ + "https" + ]) + wrapper.setProps(props) + + // Then operationScheme should default to first scheme in options list + expect(props.specActions.setScheme).toHaveBeenCalledWith("https", "/test", "get") + }) +}) diff --git a/test/core/utils.js b/test/core/utils.js index 65ed7435..acc5a14e 100644 --- a/test/core/utils.js +++ b/test/core/utils.js @@ -1,10 +1,10 @@ /* eslint-env mocha */ import expect from "expect" import { fromJS } from "immutable" -import { mapToList, validateNumber, validateInteger, validateParam, validateFile } from "core/utils" +import { mapToList, validateNumber, validateInteger, validateParam, validateFile, fromJSOrdered } from "core/utils" import win from "core/window" -describe("utils", function(){ +describe("utils", function() { describe("mapToList", function(){ @@ -544,4 +544,31 @@ describe("utils", function(){ expect( result ).toEqual( [] ) }) }) + + describe("fromJSOrdered", () => { + it("should create an OrderedMap from an object", () => { + const param = { + value: "test" + } + + const result = fromJSOrdered(param).toJS() + expect( result ).toEqual( { value: "test" } ) + }) + + it("should not use an object's length property for Map size", () => { + const param = { + length: 5 + } + + const result = fromJSOrdered(param).toJS() + expect( result ).toEqual( { length: 5 } ) + }) + + it("should create an OrderedMap from an array", () => { + const param = [1, 1, 2, 3, 5, 8] + + const result = fromJSOrdered(param).toJS() + expect( result ).toEqual( [1, 1, 2, 3, 5, 8] ) + }) + }) })