@@ -372,3 +372,115 @@ func TestRunCmdFlagRetrievalErrors(t *testing.T) {
372372 })
373373 }
374374}
375+
376+ func TestRunCmdCompleteFlow (t * testing.T ) {
377+ // Test the complete flow of the run command with all flag retrievals
378+ tests := []struct {
379+ name string
380+ setupCmd func () * cobra.Command
381+ args []string
382+ expectError bool
383+ errorContains string
384+ }{
385+ {
386+ name : "Valid configuration with all flags" ,
387+ setupCmd : func () * cobra.Command {
388+ cmd := & cobra.Command {Use : "tagit" }
389+ cmd .PersistentFlags ().StringP ("consul-addr" , "c" , "127.0.0.1:8500" , "consul address" )
390+ cmd .PersistentFlags ().StringP ("service-id" , "s" , "" , "consul service id" )
391+ cmd .PersistentFlags ().StringP ("script" , "x" , "" , "path to script used to generate tags" )
392+ cmd .PersistentFlags ().StringP ("tag-prefix" , "p" , "tagged" , "prefix to be added to tags" )
393+ cmd .PersistentFlags ().StringP ("interval" , "i" , "60s" , "interval to run the script" )
394+ cmd .PersistentFlags ().StringP ("token" , "t" , "" , "consul token" )
395+
396+ testRunCmd := & cobra.Command {
397+ Use : "run" ,
398+ Short : "Run tagit" ,
399+ RunE : func (cmd * cobra.Command , args []string ) error {
400+ // Simulate all the flag retrievals from the actual run command
401+ interval , err := cmd .InheritedFlags ().GetString ("interval" )
402+ if err != nil {
403+ return err
404+ }
405+
406+ if interval == "" || interval == "0" {
407+ return fmt .Errorf ("interval is required and cannot be empty or zero" )
408+ }
409+
410+ _ , err = time .ParseDuration (interval )
411+ if err != nil {
412+ return fmt .Errorf ("invalid interval %q: %w" , interval , err )
413+ }
414+
415+ // Test all flag retrievals
416+ consulAddr , err := cmd .InheritedFlags ().GetString ("consul-addr" )
417+ if err != nil {
418+ return fmt .Errorf ("failed to get consul-addr flag: %w" , err )
419+ }
420+
421+ token , err := cmd .InheritedFlags ().GetString ("token" )
422+ if err != nil {
423+ return fmt .Errorf ("failed to get token flag: %w" , err )
424+ }
425+
426+ serviceID , err := cmd .InheritedFlags ().GetString ("service-id" )
427+ if err != nil {
428+ return fmt .Errorf ("failed to get service-id flag: %w" , err )
429+ }
430+
431+ script , err := cmd .InheritedFlags ().GetString ("script" )
432+ if err != nil {
433+ return fmt .Errorf ("failed to get script flag: %w" , err )
434+ }
435+
436+ tagPrefix , err := cmd .InheritedFlags ().GetString ("tag-prefix" )
437+ if err != nil {
438+ return fmt .Errorf ("failed to get tag-prefix flag: %w" , err )
439+ }
440+
441+ // Validate we got all values
442+ if consulAddr == "" || serviceID == "" || script == "" || tagPrefix == "" {
443+ return fmt .Errorf ("missing required flags" )
444+ }
445+
446+ // Don't create real consul client or run the service
447+ // Just verify all flags were retrieved successfully
448+ _ = token // token is optional
449+
450+ return nil
451+ },
452+ }
453+ cmd .AddCommand (testRunCmd )
454+ return cmd
455+ },
456+ args : []string {
457+ "run" ,
458+ "--service-id=test-service" ,
459+ "--script=/tmp/test.sh" ,
460+ "--consul-addr=localhost:8500" ,
461+ "--tag-prefix=test" ,
462+ "--interval=30s" ,
463+ "--token=test-token" ,
464+ },
465+ expectError : false ,
466+ },
467+ }
468+
469+ for _ , tt := range tests {
470+ t .Run (tt .name , func (t * testing.T ) {
471+ cmd := tt .setupCmd ()
472+ cmd .SetArgs (tt .args )
473+
474+ err := cmd .Execute ()
475+
476+ if tt .expectError {
477+ assert .Error (t , err )
478+ if tt .errorContains != "" {
479+ assert .Contains (t , err .Error (), tt .errorContains )
480+ }
481+ } else {
482+ assert .NoError (t , err )
483+ }
484+ })
485+ }
486+ }
0 commit comments