@@ -468,59 +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-
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+ /*
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+ }
509509
510- if ( itemType === "number" ) {
511- err = validateNumber ( item )
512- } else if ( itemType === "integer" ) {
513- err = validateInteger ( item )
514- }
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+ }
515543
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 )
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+ }
524553 }
525554
526555 return errors
0 commit comments