Compare commits
14
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b6da05c4a | ||
|
|
067f51bf04 | ||
|
|
6abc50ce66 | ||
|
|
8e510b84f4 | ||
|
|
5789c8d17f | ||
|
|
973c1254a1 | ||
|
|
567154dcb9 | ||
|
|
f13db314ea | ||
|
|
e303ce4cf2 | ||
|
|
d97fc6c502 | ||
|
|
aa66d4b9e3 | ||
|
|
232d39e3fc | ||
|
|
6951c0e649 | ||
|
|
afabbcea46 |
@@ -41,6 +41,10 @@
|
||||
{
|
||||
"expose": "less",
|
||||
"src": "src/less"
|
||||
},
|
||||
{
|
||||
"expose": "base",
|
||||
"src": "npm:getbase/src/less/base"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -13,15 +13,11 @@
|
||||
}
|
||||
},
|
||||
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:react/recommended"
|
||||
],
|
||||
"extends": ["eslint:recommended", "plugin:react/recommended"],
|
||||
|
||||
"plugins": [
|
||||
"react",
|
||||
"mocha",
|
||||
"import"
|
||||
"mocha"
|
||||
],
|
||||
|
||||
"rules": {
|
||||
@@ -38,7 +34,6 @@
|
||||
"no-console": ["error", { allow: ["warn", "error"] }],
|
||||
"react/jsx-no-bind": 1,
|
||||
"react/display-name": 0,
|
||||
"mocha/no-exclusive-tests": "error",
|
||||
"import/no-extraneous-dependencies": [2]
|
||||
"mocha/no-exclusive-tests": "error"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,14 @@ about: Suggest an new feature or enhancement for this project
|
||||
|
||||
---
|
||||
|
||||
### Q&A (please complete the following information)
|
||||
- OS: [e.g. macOS]
|
||||
- Browser: [e.g. chrome, safari]
|
||||
- Version: [e.g. 22]
|
||||
- Method of installation: [e.g. npm, dist assets]
|
||||
- Swagger-UI version: [e.g. 3.10.0]
|
||||
- Swagger/OpenAPI version: [e.g. Swagger 2.0, OpenAPI 3.0]
|
||||
|
||||
### Content & configuration
|
||||
|
||||
Swagger/OpenAPI definition:
|
||||
|
||||
@@ -15,8 +15,6 @@ before_deploy:
|
||||
- npm run build
|
||||
env:
|
||||
- DOCKER_IMAGE_NAME=swaggerapi/swagger-ui
|
||||
script:
|
||||
- npm test
|
||||
deploy:
|
||||
- provider: npm
|
||||
email: apiteam@swagger.io
|
||||
@@ -54,5 +52,3 @@ after_success:
|
||||
docker push $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG;
|
||||
fi;
|
||||
fi;
|
||||
- npm run build-bundle
|
||||
- bundlesize
|
||||
@@ -20,7 +20,7 @@ The OpenAPI Specification has undergone 5 revisions since initial creation in 20
|
||||
|
||||
Swagger UI Version | Release Date | OpenAPI Spec compatibility | Notes
|
||||
------------------ | ------------ | -------------------------- | -----
|
||||
3.17.3 | 2018-06-16 | 2.0, 3.0 | [tag v3.17.3](https://github.com/swagger-api/swagger-ui/tree/v3.17.3)
|
||||
3.17.1 | 2018-06-16 | 2.0, 3.0 | [tag v3.17.1](https://github.com/swagger-api/swagger-ui/tree/v3.17.1)
|
||||
3.0.21 | 2017-07-26 | 2.0 | [tag v3.0.21](https://github.com/swagger-api/swagger-ui/tree/v3.0.21)
|
||||
2.2.10 | 2017-01-04 | 1.1, 1.2, 2.0 | [tag v2.2.10](https://github.com/swagger-api/swagger-ui/tree/v2.2.10)
|
||||
2.1.5 | 2016-07-20 | 1.1, 1.2, 2.0 | [tag v2.1.5](https://github.com/swagger-api/swagger-ui/tree/v2.1.5)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Swagger UI</title>
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
|
||||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
||||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||
|
||||
Vendored
+1
@@ -4,6 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Swagger UI</title>
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
|
||||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
||||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||
|
||||
Vendored
+70
-43
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+3
-3
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+2
-2
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
@@ -73,7 +73,6 @@ module.exports = function(rules, options) {
|
||||
uglifyOptions: {
|
||||
mangle: specialOptions.mangle,
|
||||
beautify: !specialOptions.mangle,
|
||||
keep_fnames: true
|
||||
},
|
||||
sourceMap: true,
|
||||
}),
|
||||
@@ -142,7 +141,9 @@ module.exports = function(rules, options) {
|
||||
"node_modules"
|
||||
],
|
||||
extensions: [".web.js", ".js", ".jsx", ".json", ".less"],
|
||||
alias: {}
|
||||
alias: {
|
||||
base: "getbase/src/less/base",
|
||||
}
|
||||
},
|
||||
|
||||
devtool: specialOptions.sourcemaps ? "nosource-source-map" : false,
|
||||
|
||||
Generated
+4594
-387
File diff suppressed because it is too large
Load Diff
+11
-19
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "swagger-ui",
|
||||
"version": "3.17.3",
|
||||
"version": "3.17.1",
|
||||
"main": "dist/swagger-ui.js",
|
||||
"repository": "git@github.com:swagger-api/swagger-ui.git",
|
||||
"contributors": [
|
||||
@@ -14,7 +14,7 @@
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"scripts": {
|
||||
"build": "run-p --aggregate-output build-core build-bundle build-standalone",
|
||||
"build": "npm run build-core && npm run build-bundle && npm run build-standalone",
|
||||
"build-bundle": "webpack --config webpack-dist-bundle.config.js --colors",
|
||||
"build-core": "webpack --config webpack-dist.config.js --colors",
|
||||
"build-standalone": "webpack --config webpack-dist-standalone.config.js --colors",
|
||||
@@ -24,19 +24,19 @@
|
||||
"hot-server": "webpack-dev-server --host 0.0.0.0 --config webpack-hot-dev-server.config.js --inline --hot --progress --content-base dev-helpers/",
|
||||
"deps-license": "license-checker --production --csv --out $npm_package_config_deps_check_dir/licenses.csv && license-checker --development --csv --out $npm_package_config_deps_check_dir/licenses-dev.csv",
|
||||
"deps-size": "webpack -p --config webpack.check.js --json | webpack-bundle-size-analyzer >| $npm_package_config_deps_check_dir/sizes.txt",
|
||||
"deps-check": "run-s deps-license deps-size",
|
||||
"deps-check": "npm run deps-license && npm run deps-size",
|
||||
"lint": "eslint --cache --ext '.js,.jsx' src test",
|
||||
"lint-errors": "eslint --cache --quiet --ext '.js,.jsx' src test",
|
||||
"lint-fix": "eslint --cache --ext '.js,.jsx' src test --fix",
|
||||
"test": "run-s just-test-in-node lint-errors",
|
||||
"test-in-node": "run-s lint-errors just-test-in-node",
|
||||
"just-test-in-node": "mocha --require test/setup.js --recursive --compilers js:babel-core/register --require source-map-support test/core test/components test/bugs test/swagger-ui-dist-package test/xss",
|
||||
"test": "npm run just-test-in-node && npm run lint-errors",
|
||||
"test-in-node": "npm run lint-errors && npm run just-test-in-node",
|
||||
"just-test-in-node": "mocha --require test/setup.js --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",
|
||||
"hot-e2e-server": "webpack-dev-server --port 3230 --content-base test/e2e/helpers --host 0.0.0.0 --config webpack-hot-dev-server.config.js --inline --hot --progress",
|
||||
"e2e": "run-p -r hot-e2e-server mock-api test-e2e",
|
||||
"e2e": "npm-run-all --parallel -r hot-e2e-server mock-api test-e2e",
|
||||
"open-static": "node -e 'require(\"open\")(\"http://localhost:3002\")'",
|
||||
"serve-static": "http-server dist/ -i -a 0.0.0.0 -p 3002",
|
||||
"start": "npm-run-all --parallel serve-static open-static"
|
||||
@@ -72,9 +72,9 @@
|
||||
"redux": "^3.x.x",
|
||||
"redux-immutable": "3.0.8",
|
||||
"remarkable": "^1.7.1",
|
||||
"reselect": "^2.5.4",
|
||||
"reselect": "^3.0.1",
|
||||
"serialize-error": "^2.1.0",
|
||||
"swagger-client": "^3.8.7",
|
||||
"swagger-client": "^3.8.5",
|
||||
"url-parse": "^1.1.8",
|
||||
"xml": "1.0.1",
|
||||
"xml-but-prettier": "^1.0.1",
|
||||
@@ -94,14 +94,13 @@
|
||||
"babel-preset-react": "^6.23.0",
|
||||
"babel-preset-stage-0": "^6.22.0",
|
||||
"babel-runtime": "^6.23.0",
|
||||
"bundlesize": "^0.17.0",
|
||||
"chromedriver": "^2.38.3",
|
||||
"copy-webpack-plugin": "^4.0.1",
|
||||
"css-loader": "^0.28.11",
|
||||
"deepmerge": "^2.1.0",
|
||||
"enzyme": "^2.7.1",
|
||||
"eslint": "^4.1.1",
|
||||
"eslint-plugin-import": "^2.13.0",
|
||||
"eslint-plugin-import": "^2.6.0",
|
||||
"eslint-plugin-mocha": "^4.11.0",
|
||||
"eslint-plugin-react": "~7.7.0",
|
||||
"expect": "^1.20.2",
|
||||
@@ -154,12 +153,5 @@
|
||||
"include": [
|
||||
"**/src/core/plugins/**.js"
|
||||
]
|
||||
},
|
||||
"bundlesize": [
|
||||
{
|
||||
"path": "./dist/swagger-ui-bundle.js",
|
||||
"maxSize": "1.5 MB",
|
||||
"compression": "none"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"rules": {
|
||||
"import/no-extraneous-dependencies": [
|
||||
2,
|
||||
{
|
||||
"devDependencies": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,6 @@ export default class Models extends Component {
|
||||
const ModelWrapper = getComponent("ModelWrapper")
|
||||
const Collapse = getComponent("Collapse")
|
||||
const ModelCollapse = getComponent("ModelCollapse")
|
||||
const JumpToPath = getComponent("JumpToPath")
|
||||
|
||||
return <section className={ showModels ? "models is-open" : "models"}>
|
||||
<h4 onClick={() => layoutActions.show("models", !showModels)}>
|
||||
@@ -65,13 +64,11 @@ export default class Models extends Component {
|
||||
this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(), name])
|
||||
}
|
||||
|
||||
const specPath = Im.List([...specPathBase, name])
|
||||
|
||||
const content = <ModelWrapper name={ name }
|
||||
expandDepth={ defaultModelsExpandDepth }
|
||||
schema={ schema || Im.Map() }
|
||||
displayName={displayName}
|
||||
specPath={specPath}
|
||||
specPath={Im.List([...specPathBase, name])}
|
||||
getComponent={ getComponent }
|
||||
specSelectors={ specSelectors }
|
||||
getConfigs = {getConfigs}
|
||||
@@ -85,7 +82,6 @@ export default class Models extends Component {
|
||||
</span>
|
||||
|
||||
return <div id={ `model-${name}` } className="model-container" key={ `models-section-${name}` }>
|
||||
<span className="models-jump-to-path"><JumpToPath specPath={specPath} /></span>
|
||||
<ModelCollapse
|
||||
classes="model-box"
|
||||
collapsedContent={this.getCollapsedContent(name)}
|
||||
|
||||
@@ -63,7 +63,6 @@ export default class Operations extends React.Component {
|
||||
return (
|
||||
<OperationTag
|
||||
key={"operation-" + tag}
|
||||
myProp={"whatever"}
|
||||
tagObj={tagObj}
|
||||
tag={tag}
|
||||
layoutSelectors={layoutSelectors}
|
||||
|
||||
@@ -21,8 +21,8 @@ export default class TryItOutButton extends React.Component {
|
||||
return (
|
||||
<div className="try-out">
|
||||
{
|
||||
enabled ? <button className="btn try-out__btn cancel" onClick={ onCancelClick }>Cancel</button>
|
||||
: <button className="btn try-out__btn" onClick={ onTryoutClick }>Try it out </button>
|
||||
enabled ? <button className="btn try-out__btn cancel" onClick={ onTryoutClick }>Cancel</button>
|
||||
: <button className="btn try-out__btn" onClick={ onCancelClick }>Try it out </button>
|
||||
}
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -113,11 +113,11 @@ export default class OperationContainer extends PureComponent {
|
||||
layoutActions.show(["operations", tag, operationId], !isShown)
|
||||
}
|
||||
|
||||
onCancelClick=() => {
|
||||
onTryoutClick =() => {
|
||||
this.setState({tryItOutEnabled: !this.state.tryItOutEnabled})
|
||||
}
|
||||
|
||||
onTryoutClick =() => {
|
||||
onCancelClick =() => {
|
||||
let { specActions, path, method } = this.props
|
||||
this.setState({tryItOutEnabled: !this.state.tryItOutEnabled})
|
||||
specActions.clearValidateParams([path, method])
|
||||
|
||||
@@ -111,7 +111,7 @@ export class JsonSchema_array extends PureComponent {
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context)
|
||||
this.state = { value: valueOrEmptyList(props.value)}
|
||||
this.state = {value: props.value}
|
||||
}
|
||||
|
||||
componentWillReceiveProps(props) {
|
||||
@@ -135,7 +135,7 @@ export class JsonSchema_array extends PureComponent {
|
||||
|
||||
addItem = () => {
|
||||
this.setState(state => {
|
||||
state.value = valueOrEmptyList(state.value)
|
||||
state.value = state.value || List()
|
||||
return {
|
||||
value: state.value.push("")
|
||||
}
|
||||
@@ -174,7 +174,7 @@ export class JsonSchema_array extends PureComponent {
|
||||
|
||||
return (
|
||||
<div>
|
||||
{ !value || !value.count || value.count() < 1 ? null :
|
||||
{ !value || value.count() < 1 ? null :
|
||||
value.map( (item,i) => {
|
||||
let schema = Object.assign({}, itemSchema)
|
||||
if ( errors.length ) {
|
||||
@@ -264,7 +264,3 @@ export class JsonSchema_object extends PureComponent {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function valueOrEmptyList(value) {
|
||||
return List.isList(value) ? value : List()
|
||||
}
|
||||
@@ -10,7 +10,6 @@ const RequestBody = ({
|
||||
getComponent,
|
||||
getConfigs,
|
||||
specSelectors,
|
||||
fn,
|
||||
contentType,
|
||||
isExecute,
|
||||
specPath,
|
||||
@@ -36,12 +35,7 @@ const RequestBody = ({
|
||||
return null
|
||||
}
|
||||
|
||||
if(
|
||||
contentType === "application/octet-stream"
|
||||
|| contentType.indexOf("image/") === 0
|
||||
|| contentType.indexOf("audio/") === 0
|
||||
|| contentType.indexOf("video/") === 0
|
||||
) {
|
||||
if(contentType === "application/octet-stream") {
|
||||
const Input = getComponent("Input")
|
||||
|
||||
if(!isExecute) {
|
||||
@@ -91,7 +85,6 @@ const RequestBody = ({
|
||||
<td className="col parameters-col_description">
|
||||
{isExecute ?
|
||||
<JsonSchemaForm
|
||||
fn={fn}
|
||||
dispatchInitialValue={!isFile}
|
||||
schema={prop}
|
||||
getComponent={getComponent}
|
||||
@@ -139,7 +132,6 @@ RequestBody.propTypes = {
|
||||
requestBodyValue: ImPropTypes.orderedMap.isRequired,
|
||||
getComponent: PropTypes.func.isRequired,
|
||||
getConfigs: PropTypes.func.isRequired,
|
||||
fn: PropTypes.object.isRequired,
|
||||
specSelectors: PropTypes.object.isRequired,
|
||||
contentType: PropTypes.string,
|
||||
isExecute: PropTypes.bool.isRequired,
|
||||
|
||||
@@ -2,20 +2,16 @@ import React from "react"
|
||||
|
||||
export function isOAS3(jsSpec) {
|
||||
const oasVersion = jsSpec.get("openapi")
|
||||
if(typeof oasVersion !== "string") {
|
||||
if(!oasVersion) {
|
||||
return false
|
||||
}
|
||||
|
||||
// we gate against `3.1` becasue we want to explicitly opt into supporting it
|
||||
// at some point in the future -- KS, 7/2018
|
||||
|
||||
// starts with, but is not `3.0.` exactly
|
||||
return oasVersion.startsWith("3.0.") && oasVersion.length > 4
|
||||
return oasVersion.startsWith("3.0.")
|
||||
}
|
||||
|
||||
export function isSwagger2(jsSpec) {
|
||||
const swaggerVersion = jsSpec.get("swagger")
|
||||
if(typeof swaggerVersion !== "string") {
|
||||
if(!swaggerVersion) {
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ export const sampleFromSchema = (schema, config={}) => {
|
||||
let { type, example, properties, additionalProperties, items } = objectify(schema)
|
||||
let { includeReadOnly, includeWriteOnly } = config
|
||||
|
||||
|
||||
if(example !== undefined) {
|
||||
return deeplyStripKey(example, "$$ref", (val) => {
|
||||
// do a couple of quick sanity tests to ensure the value
|
||||
|
||||
+2
-4
@@ -628,9 +628,7 @@ export const getSampleSchema = (schema, contentType="", config={}) => {
|
||||
return memoizedCreateXMLExample(schema, config)
|
||||
}
|
||||
|
||||
const res = memoizedSampleFromSchema(schema, config)
|
||||
|
||||
return typeof res === "object" ? JSON.stringify(res, null, 2) : res
|
||||
return JSON.stringify(memoizedSampleFromSchema(schema, config), null, 2)
|
||||
}
|
||||
|
||||
export const parseSearch = () => {
|
||||
@@ -744,7 +742,7 @@ export const getCommonExtensions = (defObj) => defObj.filter((v, k) => /^pattern
|
||||
// `predicate` can be used to discriminate the stripping further,
|
||||
// by preserving the key's place in the object based on its value.
|
||||
export function deeplyStripKey(input, keyToStrip, predicate = () => true) {
|
||||
if(typeof input !== "object" || Array.isArray(input) || input === null || !keyToStrip) {
|
||||
if(typeof input !== "object" || Array.isArray(input) || !keyToStrip) {
|
||||
return input
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,6 @@ section.models
|
||||
.model-container
|
||||
{
|
||||
margin: 0 20px 15px;
|
||||
position: relative;
|
||||
|
||||
transition: all .5s;
|
||||
|
||||
@@ -187,13 +186,6 @@ section.models
|
||||
{
|
||||
margin: 0 20px;
|
||||
}
|
||||
|
||||
.models-jump-to-path {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 5px;
|
||||
opacity: 0.65;
|
||||
}
|
||||
}
|
||||
|
||||
.model-box
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
@mixin text_body($color: $text-body-default-font-color)
|
||||
{
|
||||
font-family: sans-serif;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
|
||||
color: $color;
|
||||
}
|
||||
|
||||
@mixin text_code($color: $text-code-default-font-color)
|
||||
{
|
||||
font-family: monospace;
|
||||
font-family: 'Source Code Pro', monospace;
|
||||
font-weight: 600;
|
||||
|
||||
color: $color;
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
@mixin text_headline($color: $text-headline-default-font-color)
|
||||
{
|
||||
font-family: sans-serif;
|
||||
font-family: 'Titillium Web', sans-serif;
|
||||
|
||||
color: $color;
|
||||
}
|
||||
|
||||
@@ -3,4 +3,3 @@ env:
|
||||
rules:
|
||||
"react/prop-types": 1 # bah humbug
|
||||
"no-unused-vars": 1 # unused vars in tests can be useful for indicating a full signature
|
||||
"no-global-assign": 1
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
import { fromJS } from "immutable"
|
||||
import { isOAS3, isSwagger2 } from "corePlugins/oas3/helpers"
|
||||
import expect from "expect"
|
||||
|
||||
const isOAS3Shorthand = (version) => isOAS3(fromJS({
|
||||
openapi: version
|
||||
}))
|
||||
|
||||
const isSwagger2Shorthand = (version) => isSwagger2(fromJS({
|
||||
swagger: version
|
||||
}))
|
||||
|
||||
describe("isOAS3", function () {
|
||||
it("should recognize valid OAS3 version values", function () {
|
||||
expect(isOAS3Shorthand("3.0.0")).toEqual(true)
|
||||
expect(isOAS3Shorthand("3.0.1")).toEqual(true)
|
||||
expect(isOAS3Shorthand("3.0.11111")).toEqual(true)
|
||||
expect(isOAS3Shorthand("3.0.0-rc0")).toEqual(true)
|
||||
})
|
||||
|
||||
it("should fail for invalid OAS3 version values", function () {
|
||||
expect(isOAS3Shorthand("3.0")).toEqual(false)
|
||||
expect(isOAS3Shorthand("3.0.")).toEqual(false)
|
||||
expect(isOAS3Shorthand("2.0")).toEqual(false)
|
||||
})
|
||||
|
||||
it("should gracefully fail for non-string values", function () {
|
||||
expect(isOAS3Shorthand(3.0)).toEqual(false)
|
||||
expect(isOAS3Shorthand(3)).toEqual(false)
|
||||
expect(isOAS3Shorthand({})).toEqual(false)
|
||||
expect(isOAS3Shorthand(null)).toEqual(false)
|
||||
})
|
||||
|
||||
it("should gracefully fail when `openapi` field is missing", function () {
|
||||
expect(isOAS3(fromJS({
|
||||
openApi: "3.0.0"
|
||||
}))).toEqual(false)
|
||||
expect(isOAS3Shorthand(null)).toEqual(false)
|
||||
})
|
||||
})
|
||||
|
||||
describe("isSwagger2", function () {
|
||||
it("should recognize valid Swagger 2.0 version values", function () {
|
||||
expect(isSwagger2Shorthand("2.0")).toEqual(true)
|
||||
expect(isSwagger2Shorthand("2.0-rc0")).toEqual(true)
|
||||
})
|
||||
|
||||
it("should fail for invalid Swagger 2.0 version values", function () {
|
||||
expect(isSwagger2Shorthand("3.0")).toEqual(false)
|
||||
expect(isSwagger2Shorthand("3.0.")).toEqual(false)
|
||||
expect(isSwagger2Shorthand("2.1")).toEqual(false)
|
||||
expect(isSwagger2Shorthand("1.2")).toEqual(false)
|
||||
expect(isSwagger2Shorthand("2")).toEqual(false)
|
||||
})
|
||||
|
||||
it("should gracefully fail for non-string values", function () {
|
||||
expect(isSwagger2Shorthand(2.0)).toEqual(false)
|
||||
expect(isSwagger2Shorthand(2)).toEqual(false)
|
||||
expect(isSwagger2Shorthand({})).toEqual(false)
|
||||
expect(isSwagger2Shorthand(null)).toEqual(false)
|
||||
})
|
||||
|
||||
it("should gracefully fail when `swagger` field is missing", function () {
|
||||
expect(isSwagger2(fromJS({
|
||||
Swagger: "2.0"
|
||||
}))).toEqual(false)
|
||||
})
|
||||
})
|
||||
@@ -379,46 +379,6 @@ describe("sampleFromSchema", function() {
|
||||
|
||||
expect(sampleFromSchema(definition)).toEqual(expected)
|
||||
})
|
||||
|
||||
it("returns null for a null example", function() {
|
||||
var definition = {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"foo": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"example": null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var expected = {
|
||||
foo: null
|
||||
}
|
||||
|
||||
expect(sampleFromSchema(definition)).toEqual(expected)
|
||||
})
|
||||
|
||||
it("returns null for a null object-level example", function() {
|
||||
var definition = {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"foo": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"example": {
|
||||
"foo": null
|
||||
}
|
||||
}
|
||||
|
||||
var expected = {
|
||||
foo: null
|
||||
}
|
||||
|
||||
expect(sampleFromSchema(definition)).toEqual(expected)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
+1
-27
@@ -24,8 +24,7 @@ import {
|
||||
getCommonExtensions,
|
||||
sanitizeUrl,
|
||||
extractFileNameFromContentDispositionHeader,
|
||||
deeplyStripKey,
|
||||
getSampleSchema
|
||||
deeplyStripKey
|
||||
} from "core/utils"
|
||||
import win from "core/window"
|
||||
|
||||
@@ -1187,30 +1186,5 @@ describe("utils", function() {
|
||||
expect(sanitizeUrl({})).toEqual("")
|
||||
})
|
||||
})
|
||||
describe("getSampleSchema", function() {
|
||||
const oriDate = Date
|
||||
|
||||
before(function() {
|
||||
Date = function () {
|
||||
this.toISOString = function () {
|
||||
return "2018-07-07T07:07:05.189Z"
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
after(function() {
|
||||
Date = oriDate
|
||||
})
|
||||
|
||||
it("should not unnecessarily stringify non-object values", function() {
|
||||
// Given
|
||||
const res = getSampleSchema({
|
||||
type: "string",
|
||||
format: "date-time"
|
||||
})
|
||||
|
||||
// Then
|
||||
expect(res).toEqual(new Date().toISOString())
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Swagger UI</title>
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
|
||||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
||||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||
|
||||
Reference in New Issue
Block a user