@@ -22,7 +22,7 @@ The OpenAPI Specification has undergone 5 revisions since initial creation in 20 | |||
Swagger UI Version | Release Date | OpenAPI Spec compatibility | Notes | |||
------------------ | ------------ | -------------------------- | ----- | |||
3.2.1 | 2017-09-15 | 2.0, 3.0 | [tag v3.2.1](https://github.com/swagger-api/swagger-ui/tree/v3.2.1) | |||
3.2.2 | 2017-09-22 | 2.0, 3.0 | [tag v3.2.2](https://github.com/swagger-api/swagger-ui/tree/v3.2.2) | |||
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) | |||
@@ -1 +1 @@ | |||
{"version":3,"file":"swagger-ui-bundle.js","sources":["webpack:///swagger-ui-bundle.js"],"mappings":"AAAA;;;;;AAwjMA;;;;;;AA65DA;;;;;;;;;;;;;;;;;;;;;;;;;;AAs9TA;;;;;;;;;;;;;;AAs8JA;;;;;;;;;AAm/pBA;;;;;AAu5QA;;;;;AAynBA;AAi0CA;;;;;;AAq/YA;;;;;;AAojaA;AA8lvBA","sourceRoot":""} | |||
{"version":3,"file":"swagger-ui-bundle.js","sources":["webpack:///swagger-ui-bundle.js"],"mappings":"AAAA;;;;;AA4kMA;;;;;;AA65DA;;;;;;;;;;;;;;;;;;;;;;;;;;AAq9TA;;;;;;;;;;;;;;AAs8JA;;;;;;;;;AAo/pBA;;;;;AAk6QA;;;;;AAynBA;AAi0CA;;;;;;AAq/YA;;;;;;AAojaA;AA8lvBA","sourceRoot":""} |
@@ -1 +1 @@ | |||
{"version":3,"file":"swagger-ui.js","sources":["webpack:///swagger-ui.js"],"mappings":"AAAA;;;;;;AAmxeA","sourceRoot":""} | |||
{"version":3,"file":"swagger-ui.js","sources":["webpack:///swagger-ui.js"],"mappings":"AAAA;;;;;;AAkzeA","sourceRoot":""} |
@@ -1,6 +1,6 @@ | |||
{ | |||
"name": "swagger-ui", | |||
"version": "3.2.1", | |||
"version": "3.2.2", | |||
"main": "dist/swagger-ui.js", | |||
"repository": "git@github.com:swagger-api/swagger-ui.git", | |||
"contributors": [ | |||
@@ -77,7 +77,7 @@ | |||
"scroll-to-element": "^2.0.0", | |||
"serialize-error": "2.0.0", | |||
"shallowequal": "0.2.2", | |||
"swagger-client": "3.1.1", | |||
"swagger-client": "^3.1.2", | |||
"url-parse": "^1.1.8", | |||
"whatwg-fetch": "0.11.1", | |||
"worker-loader": "^0.7.1", | |||
@@ -149,7 +149,7 @@ export default class Operation extends PureComponent { | |||
const isDeepLinkingEnabled = deepLinking && deepLinking !== "false" | |||
// Merge in Live Response | |||
if(response && response.size > 0) { | |||
if(responses && response && response.size > 0) { | |||
let notDocumented = !responses.get(String(response.get("status"))) | |||
response = response.set("notDocumented", notDocumented) | |||
} | |||
@@ -47,7 +47,7 @@ export default class ParamBody extends PureComponent { | |||
updateValues = (props) => { | |||
let { specSelectors, pathMethod, param, isExecute, consumesValue="" } = props | |||
let parameter = specSelectors ? specSelectors.getParameter(pathMethod, param.get("name")) : {} | |||
let parameter = specSelectors ? specSelectors.getParameter(pathMethod, param.get("name"), param.get("in")) : {} | |||
let isXml = /xml/i.test(consumesValue) | |||
let isJson = /json/i.test(consumesValue) | |||
let paramValue = isXml ? parameter.get("value_xml") : parameter.get("value") | |||
@@ -107,7 +107,7 @@ export default class ParamBody extends PureComponent { | |||
const HighlightCode = getComponent("highlightCode") | |||
const ContentType = getComponent("contentType") | |||
// for domains where specSelectors not passed | |||
let parameter = specSelectors ? specSelectors.getParameter(pathMethod, param.get("name")) : param | |||
let parameter = specSelectors ? specSelectors.getParameter(pathMethod, param.get("name"), param.get("in")) : param | |||
let errors = parameter.get("errors", List()) | |||
let consumesValue = specSelectors.contentTypeValues(pathMethod).get("requestContentType") | |||
let consumes = this.props.consumes && this.props.consumes.size ? this.props.consumes : ParamBody.defaultProp.consumes | |||
@@ -19,7 +19,7 @@ export default class ParameterRow extends Component { | |||
let { specSelectors, pathMethod, param } = props | |||
let defaultValue = param.get("default") | |||
let parameter = specSelectors.getParameter(pathMethod, param.get("name")) | |||
let parameter = specSelectors.getParameter(pathMethod, param.get("name"), param.get("in")) | |||
let value = parameter ? parameter.get("value") : "" | |||
if ( defaultValue !== undefined && value === undefined ) { | |||
this.onChangeWrapper(defaultValue) | |||
@@ -30,7 +30,7 @@ export default class ParameterRow extends Component { | |||
let { specSelectors, pathMethod, param } = props | |||
let example = param.get("example") | |||
let defaultValue = param.get("default") | |||
let parameter = specSelectors.getParameter(pathMethod, param.get("name")) | |||
let parameter = specSelectors.getParameter(pathMethod, param.get("name"), param.get("in")) | |||
let paramValue = parameter ? parameter.get("value") : undefined | |||
let enumValue = parameter ? parameter.get("enum") : undefined | |||
let value | |||
@@ -86,7 +86,7 @@ export default class ParameterRow extends Component { | |||
let isFormDataSupported = "FormData" in win | |||
let required = param.get("required") | |||
let itemType = param.getIn(isOAS3 && isOAS3() ? ["schema", "items", "type"] : ["items", "type"]) | |||
let parameter = specSelectors.getParameter(pathMethod, param.get("name")) | |||
let parameter = specSelectors.getParameter(pathMethod, param.get("name"), param.get("in")) | |||
let value = parameter ? parameter.get("value") : "" | |||
return ( | |||
@@ -37,7 +37,7 @@ export default class Parameters extends Component { | |||
onChangeKey, | |||
} = this.props | |||
changeParam( onChangeKey, param.get("name"), value, isXml) | |||
changeParam( onChangeKey, param.get("name"), param.get("in"), value, isXml) | |||
} | |||
onChangeConsumesWrapper = ( val ) => { | |||
@@ -94,7 +94,7 @@ export default class Parameters extends Component { | |||
<ParameterRow fn={ fn } | |||
getComponent={ getComponent } | |||
param={ parameter } | |||
key={ parameter.get( "name" ) } | |||
key={ `${parameter.get( "in" )}.${parameter.get("name")}` } | |||
onChange={ this.onChange } | |||
onChangeConsumes={this.onChangeConsumesWrapper} | |||
specSelectors={ specSelectors } | |||
@@ -49,10 +49,10 @@ export default class ResponseBody extends React.Component { | |||
// Download | |||
} else if ( | |||
/^application\/octet-stream/i.test(contentType) || | |||
headers["Content-Disposition"] && (/attachment/i).test(headers["Content-Disposition"]) || | |||
headers["content-disposition"] && (/attachment/i).test(headers["content-disposition"]) || | |||
headers["Content-Description"] && (/File Transfer/i).test(headers["Content-Description"]) || | |||
headers["content-description"] && (/File Transfer/i).test(headers["content-description"])) { | |||
(headers["Content-Disposition"] && (/attachment/i).test(headers["Content-Disposition"])) || | |||
(headers["content-disposition"] && (/attachment/i).test(headers["content-disposition"])) || | |||
(headers["Content-Description"] && (/File Transfer/i).test(headers["Content-Description"])) || | |||
(headers["content-description"] && (/File Transfer/i).test(headers["content-description"]))) { | |||
let contentLength = headers["content-length"] || headers["Content-Length"] | |||
if ( !(+contentLength) ) return null | |||
@@ -64,7 +64,8 @@ export default function authorize ( { auth, authActions, errActions, configs, au | |||
} | |||
} | |||
let url = [schema.get("authorizationUrl"), query.join("&")].join("?") | |||
let authorizationUrl = schema.get("authorizationUrl") | |||
let url = [authorizationUrl, query.join("&")].join(authorizationUrl.indexOf("?") === -1 ? "?" : "&") | |||
// pass action authorizeOauth2 and authentication data through window | |||
// to authorize with oauth2 | |||
@@ -49,7 +49,7 @@ class Parameters extends Component { | |||
onChangeKey, | |||
} = this.props | |||
changeParam( onChangeKey, param.get("name"), value, isXml) | |||
changeParam( onChangeKey, param.get("name"), param.get("in"), value, isXml) | |||
} | |||
onChangeConsumesWrapper = ( val ) => { | |||
@@ -130,10 +130,10 @@ export const formatIntoYaml = () => ({specActions, specSelectors}) => { | |||
} | |||
} | |||
export function changeParam( path, paramName, value, isXml ){ | |||
export function changeParam( path, paramName, paramIn, value, isXml ){ | |||
return { | |||
type: UPDATE_PARAM, | |||
payload:{ path, value, paramName, isXml } | |||
payload:{ path, value, paramName, paramIn, isXml } | |||
} | |||
} | |||
@@ -206,7 +206,6 @@ export const executeRequest = (req) => | |||
// if url is relative, parseUrl makes it absolute by inferring from `window.location` | |||
req.contextUrl = parseUrl(specSelectors.url()).toString() | |||
if(op && op.operationId) { | |||
req.operationId = op.operationId | |||
} else if(op && pathName && method) { | |||
@@ -40,9 +40,10 @@ export default { | |||
}, | |||
[UPDATE_PARAM]: ( state, {payload} ) => { | |||
let { path, paramName, value, isXml } = payload | |||
let { path, paramName, paramIn, value, isXml } = payload | |||
return state.updateIn( [ "resolved", "paths", ...path, "parameters" ], fromJS([]), parameters => { | |||
const index = parameters.findIndex(p => p.get( "name" ) === paramName ) | |||
const index = parameters.findIndex(p => p.get( "name" ) === paramName && p.get("in") === paramIn ) | |||
if (!(value instanceof win.File)) { | |||
value = fromJSOrdered( value ) | |||
} | |||
@@ -260,10 +260,10 @@ export const allowTryItOutFor = () => { | |||
} | |||
// Get the parameter value by parameter name | |||
export function getParameter(state, pathMethod, name) { | |||
export function getParameter(state, pathMethod, name, inType) { | |||
let params = spec(state).getIn(["paths", ...pathMethod, "parameters"], fromJS([])) | |||
return params.filter( (p) => { | |||
return Map.isMap(p) && p.get("name") === name | |||
return Map.isMap(p) && p.get("name") === name && p.get("in") === inType | |||
}).first() | |||
} | |||
@@ -280,7 +280,7 @@ export function parameterValues(state, pathMethod, isXml) { | |||
let params = spec(state).getIn(["paths", ...pathMethod, "parameters"], fromJS([])) | |||
return params.reduce( (hash, p) => { | |||
let value = isXml && p.get("in") === "body" ? p.get("value_xml") : p.get("value") | |||
return hash.set(p.get("name"), value) | |||
return hash.set(`${p.get("in")}.${p.get("name")}`, value) | |||
}, fromJS({})) | |||
} | |||
@@ -470,6 +470,18 @@ export const propChecker = (props, nextProps, objectList=[], ignoreList=[]) => { | |||
|| objectList.some( objectPropName => !eq(props[objectPropName], nextProps[objectPropName]))) | |||
} | |||
export const validateMaximum = ( val, max ) => { | |||
if (val > max) { | |||
return "Value must be less than Maximum" | |||
} | |||
} | |||
export const validateMinimum = ( val, min ) => { | |||
if (val < min) { | |||
return "Value must be greater than Minimum" | |||
} | |||
} | |||
export const validateNumber = ( val ) => { | |||
if (!/^-?\d+(\.?\d+)?$/.test(val)) { | |||
return "Value must be a number" | |||
@@ -500,12 +512,41 @@ export const validateString = ( val ) => { | |||
} | |||
} | |||
export const validateDateTime = (val) => { | |||
if (isNaN(Date.parse(val))) { | |||
return "Value must be a DateTime" | |||
} | |||
} | |||
export const validateGuid = (val) => { | |||
if (!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}[)}]?$/.test(val)) { | |||
return "Value must be a Guid" | |||
} | |||
} | |||
export const validateMaxLength = (val, max) => { | |||
if (val.length > max) { | |||
return "Value must be less than MaxLength" | |||
} | |||
} | |||
export const validateMinLength = (val, min) => { | |||
if (val.length < min) { | |||
return "Value must be greater than MinLength" | |||
} | |||
} | |||
// validation of parameters before execute | |||
export const validateParam = (param, isXml) => { | |||
let errors = [] | |||
let value = isXml && param.get("in") === "body" ? param.get("value_xml") : param.get("value") | |||
let required = param.get("required") | |||
let maximum = param.get("maximum") | |||
let minimum = param.get("minimum") | |||
let type = param.get("type") | |||
let format = param.get("format") | |||
let maxLength = param.get("maxLength") | |||
let minLength = param.get("minLength") | |||
/* | |||
If the parameter is required OR the parameter has a value (meaning optional, but filled in) | |||
@@ -522,13 +563,40 @@ export const validateParam = (param, isXml) => { | |||
let numberCheck = type === "number" && !validateNumber(value) // validateNumber returns undefined if the value is a number | |||
let integerCheck = type === "integer" && !validateInteger(value) // validateInteger returns undefined if the value is an integer | |||
if (maxLength || maxLength === 0) { | |||
let err = validateMaxLength(value, maxLength) | |||
if (err) errors.push(err) | |||
} | |||
if (minLength) { | |||
let err = validateMinLength(value, minLength) | |||
if (err) errors.push(err) | |||
} | |||
if ( required && !(stringCheck || arrayCheck || listCheck || fileCheck || booleanCheck || numberCheck || integerCheck) ) { | |||
errors.push("Required field is not provided") | |||
return errors | |||
} | |||
if (maximum || maximum === 0) { | |||
let err = validateMaximum(value, maximum) | |||
if (err) errors.push(err) | |||
} | |||
if (minimum || minimum === 0) { | |||
let err = validateMinimum(value, minimum) | |||
if (err) errors.push(err) | |||
} | |||
if ( type === "string" ) { | |||
let err = validateString(value) | |||
let err | |||
if (format === "date-time") { | |||
err = validateDateTime(value) | |||
} else if (format === "uuid") { | |||
err = validateGuid(value) | |||
} else { | |||
err = validateString(value) | |||
} | |||
if (!err) return errors | |||
errors.push(err) | |||
} else if ( type === "boolean" ) { | |||
@@ -0,0 +1,39 @@ | |||
/* eslint-env mocha */ | |||
import expect, { createSpy } from "expect" | |||
import { fromJS } from "immutable" | |||
import win from "core/window" | |||
import oauth2Authorize from "core/oauth2-authorize" | |||
describe("oauth2", function () { | |||
let mockSchema = { | |||
flow: "accessCode", | |||
authorizationUrl: "https://testAuthorizationUrl" | |||
} | |||
let authConfig = { | |||
auth: { schema: { get: (key)=> mockSchema[key] } }, | |||
authActions: {}, | |||
errActions: {}, | |||
configs: { oauth2RedirectUrl: "" }, | |||
authConfigs: {} | |||
} | |||
describe("authorize redirect", function () { | |||
it("should build authorize url", function() { | |||
win.open = createSpy() | |||
oauth2Authorize(authConfig) | |||
expect(win.open.calls.length).toEqual(1) | |||
expect(win.open.calls[0].arguments[0]).toMatch("https://testAuthorizationUrl?response_type=code&redirect_uri=&state=") | |||
}) | |||
it("should append query paramters to authorizeUrl with query parameters", function() { | |||
win.open = createSpy() | |||
mockSchema.authorizationUrl = "https://testAuthorizationUrl?param=1" | |||
oauth2Authorize(authConfig) | |||
expect(win.open.calls.length).toEqual(1) | |||
expect(win.open.calls[0].arguments[0]).toMatch("https://testAuthorizationUrl?param=1&response_type=code&redirect_uri=&state=") | |||
}) | |||
}) | |||
}) |
@@ -29,8 +29,8 @@ describe("spec plugin - selectors", function(){ | |||
"/one": { | |||
get: { | |||
parameters: [ | |||
{ name: "one", value: 1}, | |||
{ name: "two", value: "duos"} | |||
{ name: "one", in: "query", value: 1}, | |||
{ name: "two", in: "query", value: "duos"} | |||
] | |||
} | |||
} | |||
@@ -43,8 +43,8 @@ describe("spec plugin - selectors", function(){ | |||
// Then | |||
expect(paramValues.toJS()).toEqual({ | |||
one: 1, | |||
two: "duos" | |||
"query.one": 1, | |||
"query.two": "duos" | |||
}) | |||
}) | |||
@@ -1,7 +1,23 @@ | |||
/* eslint-env mocha */ | |||
import expect from "expect" | |||
import { fromJS, OrderedMap } from "immutable" | |||
import { mapToList, validateNumber, validateInteger, validateParam, validateFile, fromJSOrdered, getAcceptControllingResponse, createDeepLinkPath, escapeDeepLinkPath } from "core/utils" | |||
import { | |||
mapToList, | |||
validateMinLength, | |||
validateMaxLength, | |||
validateDateTime, | |||
validateGuid, | |||
validateNumber, | |||
validateInteger, | |||
validateParam, | |||
validateFile, | |||
validateMaximum, | |||
validateMinimum, | |||
fromJSOrdered, | |||
getAcceptControllingResponse, | |||
createDeepLinkPath, | |||
escapeDeepLinkPath | |||
} from "core/utils" | |||
import win from "core/window" | |||
describe("utils", function() { | |||
@@ -72,6 +88,36 @@ describe("utils", function() { | |||
}) | |||
describe("validateMaximum", function() { | |||
let errorMessage = "Value must be less than Maximum" | |||
it("doesn't return for valid input", function() { | |||
expect(validateMaximum(9, 10)).toBeFalsy() | |||
expect(validateMaximum(19, 20)).toBeFalsy() | |||
}) | |||
it("returns a message for invalid input", function() { | |||
expect(validateMaximum(1, 0)).toEqual(errorMessage) | |||
expect(validateMaximum(10, 9)).toEqual(errorMessage) | |||
expect(validateMaximum(20, 19)).toEqual(errorMessage) | |||
}) | |||
}) | |||
describe("validateMinimum", function() { | |||
let errorMessage = "Value must be greater than Minimum" | |||
it("doesn't return for valid input", function() { | |||
expect(validateMinimum(2, 1)).toBeFalsy() | |||
expect(validateMinimum(20, 10)).toBeFalsy() | |||
}) | |||
it("returns a message for invalid input", function() { | |||
expect(validateMinimum(-1, 0)).toEqual(errorMessage) | |||
expect(validateMinimum(1, 2)).toEqual(errorMessage) | |||
expect(validateMinimum(10, 20)).toEqual(errorMessage) | |||
}) | |||
}) | |||
describe("validateNumber", function() { | |||
let errorMessage = "Value must be a number" | |||
@@ -158,7 +204,7 @@ describe("utils", function() { | |||
}) | |||
}) | |||
describe("validateFile", function() { | |||
describe("validateFile", function() { | |||
let errorMessage = "Value must be a file" | |||
it("validates against objects which are instances of 'File'", function() { | |||
@@ -171,6 +217,62 @@ describe("utils", function() { | |||
}) | |||
}) | |||
describe("validateDateTime", function() { | |||
let errorMessage = "Value must be a DateTime" | |||
it("doesn't return for valid dates", function() { | |||
expect(validateDateTime("Mon, 25 Dec 1995 13:30:00 +0430")).toBeFalsy() | |||
}) | |||
it("returns a message for invalid input'", function() { | |||
expect(validateDateTime(null)).toEqual(errorMessage) | |||
expect(validateDateTime("string")).toEqual(errorMessage) | |||
}) | |||
}) | |||
describe("validateGuid", function() { | |||
let errorMessage = "Value must be a Guid" | |||
it("doesn't return for valid guid", function() { | |||
expect(validateGuid("8ce4811e-cec5-4a29-891a-15d1917153c1")).toBeFalsy() | |||
expect(validateGuid("{8ce4811e-cec5-4a29-891a-15d1917153c1}")).toBeFalsy() | |||
}) | |||
it("returns a message for invalid input'", function() { | |||
expect(validateGuid(1)).toEqual(errorMessage) | |||
expect(validateGuid("string")).toEqual(errorMessage) | |||
}) | |||
}) | |||
describe("validateMaxLength", function() { | |||
let errorMessage = "Value must be less than MaxLength" | |||
it("doesn't return for valid guid", function() { | |||
expect(validateMaxLength("a", 1)).toBeFalsy() | |||
expect(validateMaxLength("abc", 5)).toBeFalsy() | |||
}) | |||
it("returns a message for invalid input'", function() { | |||
expect(validateMaxLength("abc", 0)).toEqual(errorMessage) | |||
expect(validateMaxLength("abc", 1)).toEqual(errorMessage) | |||
expect(validateMaxLength("abc", 2)).toEqual(errorMessage) | |||
}) | |||
}) | |||
describe("validateMinLength", function() { | |||
let errorMessage = "Value must be greater than MinLength" | |||
it("doesn't return for valid guid", function() { | |||
expect(validateMinLength("a", 1)).toBeFalsy() | |||
expect(validateMinLength("abc", 2)).toBeFalsy() | |||
}) | |||
it("returns a message for invalid input'", function() { | |||
expect(validateMinLength("abc", 5)).toEqual(errorMessage) | |||
expect(validateMinLength("abc", 8)).toEqual(errorMessage) | |||
}) | |||
}) | |||
describe("validateParam", function() { | |||
let param = null | |||
let result = null | |||
@@ -196,7 +298,7 @@ describe("utils", function() { | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( ["Required field is not provided"] ) | |||
// valid string | |||
// valid string | |||
param = fromJS({ | |||
required: true, | |||
type: "string", | |||
@@ -204,6 +306,50 @@ describe("utils", function() { | |||
}) | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( [] ) | |||
// valid string with min and max length | |||
param = fromJS({ | |||
required: true, | |||
type: "string", | |||
value: "test string", | |||
maxLength: 50, | |||
minLength: 1 | |||
}) | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( [] ) | |||
}) | |||
it("validates required strings with min and max length", function() { | |||
// invalid string with max length | |||
param = fromJS({ | |||
required: true, | |||
type: "string", | |||
value: "test string", | |||
maxLength: 5 | |||
}) | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( ["Value must be less than MaxLength"] ) | |||
// invalid string with max length 0 | |||
param = fromJS({ | |||
required: true, | |||
type: "string", | |||
value: "test string", | |||
maxLength: 0 | |||
}) | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( ["Value must be less than MaxLength"] ) | |||
// invalid string with min length | |||
param = fromJS({ | |||
required: true, | |||
type: "string", | |||
value: "test string", | |||
minLength: 50 | |||
}) | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( ["Value must be greater than MinLength"] ) | |||
}) | |||
it("validates optional strings", function() { | |||
@@ -458,14 +604,47 @@ describe("utils", function() { | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( ["Required field is not provided"] ) | |||
// valid number | |||
// valid number with min and max | |||
param = fromJS({ | |||
required: true, | |||
type: "number", | |||
value: 10 | |||
value: 10, | |||
minimum: 5, | |||
maximum: 99 | |||
}) | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( [] ) | |||
// valid negative number with min and max | |||
param = fromJS({ | |||
required: true, | |||
type: "number", | |||
value: -10, | |||
minimum: -50, | |||
maximum: -5 | |||
}) | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( [] ) | |||
// invalid number with maximum:0 | |||
param = fromJS({ | |||
required: true, | |||
type: "number", | |||
value: 1, | |||
maximum: 0 | |||
}) | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( ["Value must be less than Maximum"] ) | |||
// invalid number with minimum:0 | |||
param = fromJS({ | |||
required: true, | |||
type: "number", | |||
value: -10, | |||
minimum: 0 | |||
}) | |||
result = validateParam( param, false ) | |||
expect( result ).toEqual( ["Value must be greater than Minimum"] ) | |||
}) | |||
it("validates optional numbers", function() { | |||