@@ -41,7 +41,7 @@ export function fromJSOrdered (js) {
4141 return ! isObject ( js ) ? js :
4242 Array . isArray ( js ) ?
4343 Im . Seq ( js ) . map ( fromJSOrdered ) . toList ( ) :
44- Im . Seq ( js ) . map ( fromJSOrdered ) . toOrderedMap ( )
44+ Im . OrderedMap ( js ) . map ( fromJSOrdered )
4545}
4646
4747export function bindToState ( obj , state ) {
@@ -468,59 +468,85 @@ export const validateFile = ( val ) => {
468468 }
469469}
470470
471+ export const validateBoolean = ( val ) => {
472+ if ( ! ( val === "true" || val === "false" || val === true || val === false ) ) {
473+ return "Value must be a boolean"
474+ }
475+ }
476+
477+ export const validateString = ( val ) => {
478+ if ( val && typeof val !== "string" ) {
479+ return "Value must be a string"
480+ }
481+ }
482+
471483// validation of parameters before execute
472484export const validateParam = ( param , isXml ) => {
473485 let errors = [ ]
474486 let value = isXml && param . get ( "in" ) === "body" ? param . get ( "value_xml" ) : param . get ( "value" )
475487 let required = param . get ( "required" )
476488 let type = param . get ( "type" )
477489
478- let stringCheck = type === "string" && ! value
479- let arrayCheck = type === "array" && Array . isArray ( value ) && ! value . length
480- let listCheck = type === "array" && Im . List . isList ( value ) && ! value . count ( )
481- let fileCheck = type === "file" && ! ( value instanceof win . File )
482-
483- if ( required && ( stringCheck || arrayCheck || listCheck || fileCheck ) ) {
484- errors . push ( "Required field is not provided" )
485- return errors
486- }
487-
488- if ( value === null || value === undefined ) {
489- return errors
490- }
491-
492- if ( type === "number" ) {
493- let err = validateNumber ( value )
494- if ( ! err ) return errors
495- errors . push ( err )
496- } else if ( type === "integer" ) {
497- let err = validateInteger ( value )
498- if ( ! err ) return errors
499- errors . push ( err )
500- } else if ( type === "array" ) {
501- let itemType
502-
503- if ( ! value . count ( ) ) { return errors }
504-
505- itemType = param . getIn ( [ "items" , "type" ] )
506-
507- value . forEach ( ( item , index ) => {
508- let err
490+ // If the parameter is required OR the parameter has a value (meaning optional, but filled in)
491+ // then we should do our validation routine
492+ if ( required || value ) {
493+ // These checks should evaluate to true if the parameter's value is valid
494+ let stringCheck = type === "string" && value && ! validateString ( value )
495+ let arrayCheck = type === "array" && Array . isArray ( value ) && value . length
496+ let listCheck = type === "array" && Im . List . isList ( value ) && value . count ( )
497+ let fileCheck = type === "file" && value instanceof win . File
498+ let booleanCheck = type === "boolean" && ! validateBoolean ( value )
499+ let numberCheck = type === "number" && ! validateNumber ( value ) // validateNumber returns undefined if the value is a number
500+ let integerCheck = type === "integer" && ! validateInteger ( value ) // validateInteger returns undefined if the value is an integer
501+
502+ if ( required && ! ( stringCheck || arrayCheck || listCheck || fileCheck || booleanCheck || numberCheck || integerCheck ) ) {
503+ errors . push ( "Required field is not provided" )
504+ return errors
505+ }
509506
510- if ( itemType === "number" ) {
511- err = validateNumber ( item )
512- } else if ( itemType === "integer" ) {
513- err = validateInteger ( item )
514- }
507+ if ( type === "string" ) {
508+ let err = validateString ( value )
509+ if ( ! err ) return errors
510+ errors . push ( err )
511+ } else if ( type === "boolean" ) {
512+ let err = validateBoolean ( value )
513+ if ( ! err ) return errors
514+ errors . push ( err )
515+ } else if ( type === "number" ) {
516+ let err = validateNumber ( value )
517+ if ( ! err ) return errors
518+ errors . push ( err )
519+ } else if ( type === "integer" ) {
520+ let err = validateInteger ( value )
521+ if ( ! err ) return errors
522+ errors . push ( err )
523+ } else if ( type === "array" ) {
524+ let itemType
525+
526+ if ( ! value . count ( ) ) { return errors }
527+
528+ itemType = param . getIn ( [ "items" , "type" ] )
529+
530+ value . forEach ( ( item , index ) => {
531+ let err
532+
533+ if ( itemType === "number" ) {
534+ err = validateNumber ( item )
535+ } else if ( itemType === "integer" ) {
536+ err = validateInteger ( item )
537+ } else if ( itemType === "string" ) {
538+ err = validateString ( item )
539+ }
515540
516- if ( err ) {
517- errors . push ( { index : index , error : err } )
518- }
519- } )
520- } else if ( type === "file" ) {
521- let err = validateFile ( value )
522- if ( ! err ) return errors
523- errors . push ( err )
541+ if ( err ) {
542+ errors . push ( { index : index , error : err } )
543+ }
544+ } )
545+ } else if ( type === "file" ) {
546+ let err = validateFile ( value )
547+ if ( ! err ) return errors
548+ errors . push ( err )
549+ }
524550 }
525551
526552 return errors
0 commit comments