From e9d94e02d8ab45f418fb75be9a08cc1197cb972d Mon Sep 17 00:00:00 2001 From: feenr Date: Mon, 6 Nov 2017 10:43:43 -0500 Subject: [PATCH 01/20] Add new tests for object-model --- test/components/object-model.js | 69 +++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 test/components/object-model.js diff --git a/test/components/object-model.js b/test/components/object-model.js new file mode 100644 index 00000000..8cc44d2a --- /dev/null +++ b/test/components/object-model.js @@ -0,0 +1,69 @@ +import React from "react" +import expect from "expect" +import { shallow } from "enzyme" +import { fromJS } from "immutable" +import ObjectModel from "components/object-model" +import ModelExample from "components/model-example" +import Immutable from "immutable" +import Model from "components/model" +import ModelCollapse from "components/model-collapse" +import { inferSchema } from "corePlugins/samples/fn" + +describe("", function() { + const dummyComponent = () => null + const components = { + "JumpToPath" : dummyComponent, + "Markdown" : dummyComponent, + "Model" : Model, + "ModelCollapse" : ModelCollapse + } + const props = { + getComponent: c => components[c], + isRef : false, + schema: Immutable.fromJS( + { + "properties": { + // Note reverse order: c, b, a + c: { + type: "integer", + name: "c" + }, + b: { + type: "boolean", + name: "b" + }, + a: { + type: "string", + name: "a" + } + } + } + ), + specSelectors: { + isOAS3(){ + return false + } + }, + className: "for-test" + } + it("renders a callapsible header", function(){ + const wrapper = shallow() + const renderedModelCollapse = wrapper.find(ModelCollapse) + expect(renderedModelCollapse.length).toEqual(1) + }) + + it("renders the object properties in order", function() { + const wrapper = shallow() + const renderedModel = wrapper.find(Model) + expect(renderedModel.length).toEqual(3) + + // Assert the schema's properties have maintained their order + //const modelExampleSchemaProperties = renderedModel.props().schema.toJS().properties + console.log(renderedModel.get(0).props); + + expect(renderedModel.get(0).props.schema.get("name")).toEqual("c") + expect(renderedModel.get(1).props.schema.get("name")).toEqual("b") + expect(renderedModel.get(2).props.schema.get("name")).toEqual("a") + //expect( Object.keySeq(modelExampleSchemaProperties) ).toEqual(["c", "b", "a"]) + }) +}) \ No newline at end of file From 7fe07591b285179334b53cf9228b92117a92d345 Mon Sep 17 00:00:00 2001 From: feenr Date: Mon, 6 Nov 2017 12:32:32 -0500 Subject: [PATCH 02/20] Update the pre-req version of node in CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3acb80b0..3b6d0c15 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,7 @@ We love contributions from our community of users! This document explains our gu #### Environment setup -0. Install Node.js (4 or newer) and npm (3 or newer). +0. Install Node.js (6 or newer) and npm (3 or newer). 1. Make a fork of Swagger-UI on GitHub, then clone your fork to your machine. 2. Run `npm install` in your Swagger-UI directory. 3. Run `npm run dev`. `localhost:3200` should open automatically. From bcad5b583e7edcc87b94ecf79dd1bd41b97d10b5 Mon Sep 17 00:00:00 2001 From: feenr Date: Mon, 6 Nov 2017 12:41:14 -0500 Subject: [PATCH 03/20] Remove commented out and debug code --- test/components/object-model.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/test/components/object-model.js b/test/components/object-model.js index 8cc44d2a..7d85cc92 100644 --- a/test/components/object-model.js +++ b/test/components/object-model.js @@ -56,14 +56,8 @@ describe("", function() { const wrapper = shallow() const renderedModel = wrapper.find(Model) expect(renderedModel.length).toEqual(3) - - // Assert the schema's properties have maintained their order - //const modelExampleSchemaProperties = renderedModel.props().schema.toJS().properties - console.log(renderedModel.get(0).props); - expect(renderedModel.get(0).props.schema.get("name")).toEqual("c") expect(renderedModel.get(1).props.schema.get("name")).toEqual("b") expect(renderedModel.get(2).props.schema.get("name")).toEqual("a") - //expect( Object.keySeq(modelExampleSchemaProperties) ).toEqual(["c", "b", "a"]) }) }) \ No newline at end of file From cca8ddb5d583825b65841b058155001f372921a0 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Mon, 6 Nov 2017 14:39:21 -0800 Subject: [PATCH 04/20] Add nyc coverage reporting --- .gitignore | 1 + package.json | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 8c713860..48fbe5ff 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ node_modules .idea .deps_check .DS_Store +.nyc_output npm-debug.log* .eslintcache package-lock.json diff --git a/package.json b/package.json index b406256c..396f219c 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "test-in-node": "npm run lint-errors && npm run just-test-in-node", "just-test": "karma start --config karma.conf.js", "just-test-in-node": "mocha --recursive --compilers js:babel-core/register test/core test/components test/bugs test/swagger-ui-dist-package test/xss", + "just-check-coverage": "nyc npm run just-test-in-node", "test-e2e": "sleep 3 && nightwatch test/e2e/scenarios/ --config test/e2e/nightwatch.json", "e2e-initial-render": "nightwatch test/e2e/scenarios/ --config test/e2e/nightwatch.json --group initial-render", "mock-api": "json-server --watch test/e2e/db.json --port 3204", @@ -152,5 +153,9 @@ ], "optionalDependencies": { "webpack-dev-server": "2.5.0" + }, + "nyc": { + "all": true, + "include": ["**/src/core/plugins/**.js"] } } From 21bf5919a91041f48825c309e6a491e18c38b1c7 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Mon, 6 Nov 2017 20:42:47 -0800 Subject: [PATCH 05/20] Rewire AuthorizeOperationBtn; create new selector for filtering definitions --- .../auth/authorize-operation-btn.jsx | 28 +++++++------------ src/core/components/operation.jsx | 11 ++++++-- src/core/plugins/auth/selectors.js | 7 +++++ 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/core/components/auth/authorize-operation-btn.jsx b/src/core/components/auth/authorize-operation-btn.jsx index 7c2f2448..760bac2a 100644 --- a/src/core/components/auth/authorize-operation-btn.jsx +++ b/src/core/components/auth/authorize-operation-btn.jsx @@ -1,25 +1,23 @@ import React from "react" import PropTypes from "prop-types" -import ImPropTypes from "react-immutable-proptypes" export default class AuthorizeOperationBtn extends React.Component { + static propTypes = { + isAuthorized: PropTypes.bool.isRequired, + onClick: PropTypes.func + } + onClick =(e) => { e.stopPropagation() + let { onClick } = this.props - let { security, authActions, authSelectors } = this.props - let definitions = authSelectors.getDefinitionsByNames(security) - - authActions.showDefinitions(definitions) + if(onClick) { + onClick() + } } render() { - let { security, authSelectors } = this.props - - let isAuthorized = authSelectors.isAuthorized(security) - - if(isAuthorized === null) { - return null - } + let { isAuthorized } = this.props return ( ) + control.push() + control.push() } return ( From 16e756bed774f3607bb6ec41690da7b593d8842b Mon Sep 17 00:00:00 2001 From: Greg Thompson Date: Tue, 7 Nov 2017 11:15:37 -0600 Subject: [PATCH 14/20] disallow null value --- src/core/components/content-type.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/components/content-type.jsx b/src/core/components/content-type.jsx index 4a5e7349..6f81f671 100644 --- a/src/core/components/content-type.jsx +++ b/src/core/components/content-type.jsx @@ -37,7 +37,7 @@ export default class ContentType extends React.Component { return (
- { contentTypes.map( (val) => { return }).toArray()} From d96bd29d0cec4341206e715c8e134fbf78bda176 Mon Sep 17 00:00:00 2001 From: Greg Thompson Date: Tue, 7 Nov 2017 11:16:41 -0600 Subject: [PATCH 15/20] pass required getConfig to parameter-row --- src/core/plugins/oas3/wrap-components/parameters.jsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/core/plugins/oas3/wrap-components/parameters.jsx b/src/core/plugins/oas3/wrap-components/parameters.jsx index a825f530..ac61e90f 100644 --- a/src/core/plugins/oas3/wrap-components/parameters.jsx +++ b/src/core/plugins/oas3/wrap-components/parameters.jsx @@ -22,6 +22,7 @@ class Parameters extends Component { specActions: PropTypes.object.isRequired, operation: PropTypes.object.isRequired, getComponent: PropTypes.func.isRequired, + getConfigs: PropTypes.func.isRequired, specSelectors: PropTypes.object.isRequired, oas3Actions: PropTypes.object.isRequired, oas3Selectors: PropTypes.object.isRequired, @@ -86,6 +87,7 @@ class Parameters extends Component { fn, getComponent, + getConfigs, specSelectors, oas3Actions, oas3Selectors, @@ -137,6 +139,7 @@ class Parameters extends Component { eachMap(parameters, (parameter) => ( Date: Tue, 7 Nov 2017 11:17:05 -0600 Subject: [PATCH 16/20] contentType prop not required --- src/core/plugins/oas3/components/request-body.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/plugins/oas3/components/request-body.jsx b/src/core/plugins/oas3/components/request-body.jsx index 7094e068..5b20a50c 100644 --- a/src/core/plugins/oas3/components/request-body.jsx +++ b/src/core/plugins/oas3/components/request-body.jsx @@ -50,7 +50,7 @@ RequestBody.propTypes = { getComponent: PropTypes.func.isRequired, getConfigs: PropTypes.func.isRequired, specSelectors: PropTypes.object.isRequired, - contentType: PropTypes.string.isRequired, + contentType: PropTypes.string, isExecute: PropTypes.bool.isRequired, onChange: PropTypes.func.isRequired } From 8b8c9b744d662bb011d8089298064e44496c309e Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Tue, 7 Nov 2017 20:12:19 -0800 Subject: [PATCH 17/20] Make `Model` a PureComponent --- src/core/components/model.jsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/components/model.jsx b/src/core/components/model.jsx index 73163388..3d5de80f 100644 --- a/src/core/components/model.jsx +++ b/src/core/components/model.jsx @@ -1,7 +1,7 @@ -import React, { Component } from "react" +import React, { PureComponent } from "react" import PropTypes from "prop-types" -export default class Model extends Component { +export default class Model extends PureComponent { static propTypes = { schema: PropTypes.object.isRequired, getComponent: PropTypes.func.isRequired, @@ -35,7 +35,7 @@ export default class Model extends Component { const PrimitiveModel = getComponent("PrimitiveModel") let type = "object" let $$ref = schema && schema.get("$$ref") - + // If we weren't passed a `name` but have a ref, grab the name from the ref if ( !name && $$ref ) { name = this.getModelName( $$ref ) @@ -44,11 +44,11 @@ export default class Model extends Component { if ( !schema && $$ref ) { schema = this.getRefSchema( name ) } - + const deprecated = specSelectors.isOAS3() && schema.get("deprecated") isRef = isRef !== undefined ? isRef : !!$$ref type = schema && schema.get("type") || type - + switch(type) { case "object": return Date: Wed, 8 Nov 2017 07:41:23 -0500 Subject: [PATCH 18/20] Update react-collapse and react-motion --- package.json | 4 ++-- src/core/components/debug.jsx | 2 +- src/core/components/errors.jsx | 2 +- src/core/components/layout-utils.jsx | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index dd30067d..3987317b 100644 --- a/package.json +++ b/package.json @@ -61,13 +61,13 @@ "react-addons-perf": "^15.4.0", "react-addons-shallow-compare": "0.14.8", "react-addons-test-utils": "^15.6.2", - "react-collapse": "2.3.1", + "react-collapse": "^4.0.3", "react-dom": "^15.6.2", "react-height": "^2.0.0", "react-hot-loader": "1.3.1", "react-immutable-proptypes": "2.1.0", "react-markdown": "^2.5.0", - "react-motion": "0.4.4", + "react-motion": "^0.5.2", "react-object-inspector": "0.2.1", "react-redux": "^4.x.x", "react-split-pane": "0.1.57", diff --git a/src/core/components/debug.jsx b/src/core/components/debug.jsx index 6cb7d5d7..382f2cac 100644 --- a/src/core/components/debug.jsx +++ b/src/core/components/debug.jsx @@ -1,6 +1,6 @@ import React from "react" import PropTypes from "prop-types" -import Collapse from "react-collapse" +import { Collapse } from "react-collapse" import { presets } from "react-motion" import ObjectInspector from "react-object-inspector" import Perf from "react-addons-perf" diff --git a/src/core/components/errors.jsx b/src/core/components/errors.jsx index bea01ba9..c72dd2fd 100644 --- a/src/core/components/errors.jsx +++ b/src/core/components/errors.jsx @@ -1,7 +1,7 @@ import React from "react" import PropTypes from "prop-types" import { List } from "immutable" -import Collapse from "react-collapse" +import { Collapse } from "react-collapse" export default class Errors extends React.Component { diff --git a/src/core/components/layout-utils.jsx b/src/core/components/layout-utils.jsx index f80e0c90..d1adfeb1 100644 --- a/src/core/components/layout-utils.jsx +++ b/src/core/components/layout-utils.jsx @@ -1,6 +1,6 @@ import React from "react" import PropTypes from "prop-types" -import OriCollapse from "react-collapse" +import { Collapse as OriCollapse } from "react-collapse" function xclass(...args) { return args.filter(a => !!a).join(" ").trim() From d063987883d0514acf42e4c5240580a08d08520b Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Wed, 8 Nov 2017 22:41:29 -0800 Subject: [PATCH 19/20] Use React.cloneElement to give array elements keys instead of hardcoding --- src/plugins/topbar/topbar.jsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/topbar/topbar.jsx b/src/plugins/topbar/topbar.jsx index 32b2a34f..9c18ad08 100644 --- a/src/plugins/topbar/topbar.jsx +++ b/src/plugins/topbar/topbar.jsx @@ -1,4 +1,4 @@ -import React from "react" +import React, { cloneElement } from "react" import PropTypes from "prop-types" //import "./topbar.less" @@ -112,7 +112,7 @@ export default class Topbar extends React.Component { }) control.push( -
From 49457fe089c9c3d4f0fb59a09486c05c6d681594 Mon Sep 17 00:00:00 2001 From: kyle Date: Wed, 8 Nov 2017 22:48:20 -0800 Subject: [PATCH 20/20] Correct typo in test description --- test/components/object-model.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/components/object-model.js b/test/components/object-model.js index 7d85cc92..d926d04c 100644 --- a/test/components/object-model.js +++ b/test/components/object-model.js @@ -46,7 +46,7 @@ describe("", function() { }, className: "for-test" } - it("renders a callapsible header", function(){ + it("renders a collapsible header", function(){ const wrapper = shallow() const renderedModelCollapse = wrapper.find(ModelCollapse) expect(renderedModelCollapse.length).toEqual(1) @@ -60,4 +60,4 @@ describe("", function() { expect(renderedModel.get(1).props.schema.get("name")).toEqual("b") expect(renderedModel.get(2).props.schema.get("name")).toEqual("a") }) -}) \ No newline at end of file +})