@@ -468,60 +468,88 @@ 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- let nullUndefinedCheck = value === null || value === undefined
483-
484- if ( required && ( stringCheck || arrayCheck || listCheck || fileCheck || nullUndefinedCheck ) ) {
485- errors . push ( "Required field is not provided" )
486- return errors
487- }
488-
489- if ( value === null || value === undefined ) {
490- return errors
491- }
492-
493- if ( type === "number" ) {
494- let err = validateNumber ( value )
495- if ( ! err ) return errors
496- errors . push ( err )
497- } else if ( type === "integer" ) {
498- let err = validateInteger ( value )
499- if ( ! err ) return errors
500- errors . push ( err )
501- } else if ( type === "array" ) {
502- let itemType
503-
504- if ( ! value . count ( ) ) { return errors }
505-
506- itemType = param . getIn ( [ "items" , "type" ] )
507-
508- value . forEach ( ( item , index ) => {
509- let err
490+ /*
491+ If the parameter is required OR the parameter has a value (meaning optional, but filled in)
492+ then we should do our validation routine.
493+ Only bother validating the parameter if the type was specified.
494+ */
495+ if ( type && ( required || value ) ) {
496+ // These checks should evaluate to true if the parameter's value is valid
497+ let stringCheck = type === "string" && value && ! validateString ( value )
498+ let arrayCheck = type === "array" && Array . isArray ( value ) && value . length
499+ let listCheck = type === "array" && Im . List . isList ( value ) && value . count ( )
500+ let fileCheck = type === "file" && value instanceof win . File
501+ let booleanCheck = type === "boolean" && ! validateBoolean ( value )
502+ let numberCheck = type === "number" && ! validateNumber ( value ) // validateNumber returns undefined if the value is a number
503+ let integerCheck = type === "integer" && ! validateInteger ( value ) // validateInteger returns undefined if the value is an integer
504+
505+ if ( required && ! ( stringCheck || arrayCheck || listCheck || fileCheck || booleanCheck || numberCheck || integerCheck ) ) {
506+ errors . push ( "Required field is not provided" )
507+ return errors
508+ }
510509
511- if ( itemType === "number" ) {
512- err = validateNumber ( item )
513- } else if ( itemType === "integer" ) {
514- err = validateInteger ( item )
515- }
510+ if ( type === "string" ) {
511+ let err = validateString ( value )
512+ if ( ! err ) return errors
513+ errors . push ( err )
514+ } else if ( type === "boolean" ) {
515+ let err = validateBoolean ( value )
516+ if ( ! err ) return errors
517+ errors . push ( err )
518+ } else if ( type === "number" ) {
519+ let err = validateNumber ( value )
520+ if ( ! err ) return errors
521+ errors . push ( err )
522+ } else if ( type === "integer" ) {
523+ let err = validateInteger ( value )
524+ if ( ! err ) return errors
525+ errors . push ( err )
526+ } else if ( type === "array" ) {
527+ let itemType
528+
529+ if ( ! value . count ( ) ) { return errors }
530+
531+ itemType = param . getIn ( [ "items" , "type" ] )
532+
533+ value . forEach ( ( item , index ) => {
534+ let err
535+
536+ if ( itemType === "number" ) {
537+ err = validateNumber ( item )
538+ } else if ( itemType === "integer" ) {
539+ err = validateInteger ( item )
540+ } else if ( itemType === "string" ) {
541+ err = validateString ( item )
542+ }
516543
517- if ( err ) {
518- errors . push ( { index : index , error : err } )
519- }
520- } )
521- } else if ( type === "file" ) {
522- let err = validateFile ( value )
523- if ( ! err ) return errors
524- errors . push ( err )
544+ if ( err ) {
545+ errors . push ( { index : index , error : err } )
546+ }
547+ } )
548+ } else if ( type === "file" ) {
549+ let err = validateFile ( value )
550+ if ( ! err ) return errors
551+ errors . push ( err )
552+ }
525553 }
526554
527555 return errors
0 commit comments