@@ -481,3 +481,113 @@ func lockVersionOK(_ context.Context, i *fastly.LockVersionInput) (*fastly.Versi
481481func lockVersionError (_ context.Context , _ * fastly.LockVersionInput ) (* fastly.Version , error ) {
482482 return nil , testutil .Err
483483}
484+
485+ func TestVersionValidate (t * testing.T ) {
486+ scenarios := []testutil.CLIScenario {
487+ {
488+ Name : "validate missing --service-id flag" ,
489+ Args : "--version 1" ,
490+ WantError : "error parsing arguments: required flag --service-id not provided" ,
491+ },
492+ {
493+ Name : "validate missing --version flag" ,
494+ Args : "--service-id 123" ,
495+ WantError : "error parsing arguments: required flag --version not provided" ,
496+ },
497+ {
498+ Name : "validate successful - valid version without message" ,
499+ Args : "--service-id 123 --version 1" ,
500+ API : mock.API {
501+ ListVersionsFn : testutil .ListVersions ,
502+ ValidateVersionFn : validateVersionValid ("" ),
503+ },
504+ WantOutput : "Service 123 version 1 is valid" ,
505+ },
506+ {
507+ Name : "validate successful - valid version with message" ,
508+ Args : "--service-id 123 --version 1" ,
509+ API : mock.API {
510+ ListVersionsFn : testutil .ListVersions ,
511+ ValidateVersionFn : validateVersionValid ("All checks passed" ),
512+ },
513+ WantOutput : "Service 123 version 1 is valid: All checks passed" ,
514+ },
515+ {
516+ Name : "validate successful - invalid version without message" ,
517+ Args : "--service-id 123 --version 2" ,
518+ API : mock.API {
519+ ListVersionsFn : testutil .ListVersions ,
520+ ValidateVersionFn : validateVersionInvalid ("" ),
521+ },
522+ WantOutput : "Service 123 version 2 is not valid" ,
523+ },
524+ {
525+ Name : "validate successful - invalid version with message" ,
526+ Args : "--service-id 123 --version 2" ,
527+ API : mock.API {
528+ ListVersionsFn : testutil .ListVersions ,
529+ ValidateVersionFn : validateVersionInvalid ("Missing required backend" ),
530+ },
531+ WantOutput : "Service 123 version 2 is not valid: Missing required backend" ,
532+ },
533+ {
534+ Name : "validate with json output - valid version" ,
535+ Args : "--service-id 123 --version 1 --json" ,
536+ API : mock.API {
537+ ListVersionsFn : testutil .ListVersions ,
538+ ValidateVersionFn : validateVersionValid ("All checks passed" ),
539+ },
540+ WantOutput : validateVersionValidJSONOutput ,
541+ },
542+ {
543+ Name : "validate with json output - invalid version" ,
544+ Args : "--service-id 123 --version 2 --json" ,
545+ API : mock.API {
546+ ListVersionsFn : testutil .ListVersions ,
547+ ValidateVersionFn : validateVersionInvalid ("Missing required backend" ),
548+ },
549+ WantOutput : validateVersionInvalidJSONOutput ,
550+ },
551+ {
552+ Name : "validate error from API" ,
553+ Args : "--service-id 123 --version 1" ,
554+ API : mock.API {
555+ ListVersionsFn : testutil .ListVersions ,
556+ ValidateVersionFn : validateVersionError ,
557+ },
558+ WantError : testutil .Err .Error (),
559+ },
560+ }
561+
562+ testutil .RunCLIScenarios (t , []string {root .CommandName , sub .CommandName , "validate" }, scenarios )
563+ }
564+
565+ func validateVersionValid (message string ) func (context.Context , * fastly.ValidateVersionInput ) (bool , string , error ) {
566+ return func (_ context.Context , _ * fastly.ValidateVersionInput ) (bool , string , error ) {
567+ return true , message , nil
568+ }
569+ }
570+
571+ func validateVersionInvalid (message string ) func (context.Context , * fastly.ValidateVersionInput ) (bool , string , error ) {
572+ return func (_ context.Context , _ * fastly.ValidateVersionInput ) (bool , string , error ) {
573+ return false , message , nil
574+ }
575+ }
576+
577+ func validateVersionError (_ context.Context , _ * fastly.ValidateVersionInput ) (bool , string , error ) {
578+ return false , "" , testutil .Err
579+ }
580+
581+ var validateVersionValidJSONOutput = strings .TrimSpace (`
582+ {
583+ "message": "All checks passed",
584+ "valid": true
585+ }
586+ ` ) + "\n "
587+
588+ var validateVersionInvalidJSONOutput = strings .TrimSpace (`
589+ {
590+ "message": "Missing required backend",
591+ "valid": false
592+ }
593+ ` ) + "\n "
0 commit comments