diff --git a/.github/issue_template.md b/.github/issue_template.md index 1b519695..77c30a7e 100644 --- a/.github/issue_template.md +++ b/.github/issue_template.md @@ -1,3 +1,63 @@ -When reporting an issue, please provide the following details: -- swagger-ui version -- a swagger file reproducing the issue + + + + + +| Q | A +| ------------------------------- | ------- +| Bug or feature request? | +| Which Swagger/OpenAPI version? | +| Which Swagger-UI version? | +| How did you install Swagger-UI? | +| Which broswer & version? | +| Which operating system? | + + +### Demonstration API definition + + + + + +```yaml +your: "API definition goes here" +``` + +### Configuration (browser query string, constructor, config.yaml) + + +```js +{ + "your": { "constructorConfig": "here" } +} +``` + +`?yourQueryStringConfig=here` + +### Expected Behavior + + + +### Current Behavior + + + +### Possible Solution + + + +### Context + + diff --git a/src/core/components/layouts/base.jsx b/src/core/components/layouts/base.jsx index f502b88f..268ef46c 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/operation.jsx b/src/core/components/operation.jsx index fc182a1e..4f6534db 100644 --- a/src/core/components/operation.jsx +++ b/src/core/components/operation.jsx @@ -229,7 +229,7 @@ export default class Operation extends PureComponent { path={ path } method={ method } specActions={ specActions } - operationScheme={ operationScheme } /> + currentScheme={ operationScheme } />
: null } diff --git a/src/core/components/schemes.jsx b/src/core/components/schemes.jsx index f9fe8f81..ed0947fe 100644 --- a/src/core/components/schemes.jsx +++ b/src/core/components/schemes.jsx @@ -6,9 +6,9 @@ export default class Schemes extends React.Component { static propTypes = { specActions: PropTypes.object.isRequired, schemes: PropTypes.object.isRequired, + currentScheme: PropTypes.string.isRequired, path: PropTypes.string, method: PropTypes.string, - operationScheme: PropTypes.string } componentWillMount() { @@ -19,8 +19,8 @@ export default class Schemes extends React.Component { } componentWillReceiveProps(nextProps) { - 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, + if ( !this.props.currentScheme || !nextProps.schemes.includes(this.props.currentScheme) ) { + // if we don't have a selected currentScheme 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..f8f5730c 100644 --- a/test/components/schemes.js +++ b/test/components/schemes.js @@ -7,35 +7,66 @@ import { fromJS } from "immutable" import Schemes from "components/schemes" describe("", function(){ - it("calls props.specActions.setScheme() when no operationScheme is selected", function(){ + it("calls props.specActions.setScheme() when no currentScheme is selected", function(){ + + let setSchemeSpy = createSpy() // Given let props = { specActions: { - setScheme: createSpy() + setScheme: setSchemeSpy }, schemes: fromJS([ "http", "https" ]), - operationScheme: undefined, + currentScheme: undefined, path: "/test", method: "get" } - + // When let wrapper = shallow() - // Then operationScheme should default to first scheme in options list + // Then currentScheme 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 + // When the currentScheme 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 + // Then currentScheme should default to first scheme in options list, again expect(props.specActions.setScheme).toHaveBeenCalledWith("https", "/test", "get") }) + + it("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" + ]), + currentScheme: "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 `currentScheme` is in schemes + expect(setSchemeSpy.calls.length).toEqual(1) + }) })