Skip to content

Commit 5f12aec

Browse files
committed
Add more tests
1 parent 2cdc698 commit 5f12aec

1 file changed

Lines changed: 112 additions & 0 deletions

File tree

cli/azd/internal/figspec/figspec_coverage_test.go

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package figspec
55

66
import (
7+
"errors"
78
"strings"
89
"testing"
910

@@ -492,6 +493,19 @@ func TestBuildSpec_Aliases(t *testing.T) {
492493
t.Fatal("expected environment subcommand with aliases")
493494
}
494495

496+
func TestGenerateNonPersistentGlobalOptions(t *testing.T) {
497+
root := &cobra.Command{Use: "azd", Short: "CLI"}
498+
root.Flags().Bool("docs", false, "Open documentation")
499+
root.Flags().Bool("local-only", false, "Local flag")
500+
501+
sb := newTestSpecBuilder(false)
502+
opts := sb.generateNonPersistentGlobalOptions(root)
503+
504+
require.Len(t, opts, 1)
505+
require.Equal(t, []string{"--docs"}, opts[0].Name)
506+
require.True(t, opts[0].IsPersistent)
507+
}
508+
495509
func TestGenerateOptions_FlagTypes(t *testing.T) {
496510
t.Run("bool_flag_no_args", func(t *testing.T) {
497511
fs := pflag.NewFlagSet("test", pflag.ContinueOnError)
@@ -957,6 +971,15 @@ func TestTryGenerateExtensionSubcommand(t *testing.T) {
957971
require.Nil(t, result)
958972
})
959973

974+
t.Run("load_error_returns_nil", func(t *testing.T) {
975+
sb := newTestSpecBuilder(false)
976+
sb.extensionMetadataProvider = &mockExtensionProvider{hasCapability: true, loadErr: errors.New("load failed")}
977+
cmd := &cobra.Command{Use: "ext", Short: "Extension"}
978+
cmd.Annotations = map[string]string{"extension.id": "test-ext"}
979+
result := sb.tryGenerateExtensionSubcommand(cmd, []string{"ext"})
980+
require.Nil(t, result)
981+
})
982+
960983
t.Run("success_with_metadata", func(t *testing.T) {
961984
sb := newTestSpecBuilder(false)
962985
sb.globalFlagNames = map[string]bool{"help": true}
@@ -978,6 +1001,32 @@ func TestTryGenerateExtensionSubcommand(t *testing.T) {
9781001
})
9791002
}
9801003

1004+
func TestGenerateSubcommands_ExtensionMetadata(t *testing.T) {
1005+
root := &cobra.Command{Use: "azd", Short: "CLI"}
1006+
ext := &cobra.Command{Use: "ext", Short: "Extension"}
1007+
ext.Annotations = map[string]string{"extension.id": "test-ext"}
1008+
root.AddCommand(ext)
1009+
1010+
sb := newTestSpecBuilder(false)
1011+
sb.globalFlagNames = map[string]bool{}
1012+
sb.extensionMetadataProvider = &mockExtensionProvider{
1013+
hasCapability: true,
1014+
metadata: &extensions.ExtensionCommandMetadata{
1015+
Commands: []extensions.Command{
1016+
{Name: []string{"child"}, Short: "Child cmd"},
1017+
},
1018+
},
1019+
}
1020+
1021+
subs := sb.generateSubcommands(root, &CommandContext{Command: root, CommandPath: "azd"})
1022+
1023+
require.Len(t, subs, 2)
1024+
require.Equal(t, "ext", subs[0].Name[0])
1025+
require.Len(t, subs[0].Subcommands, 1)
1026+
require.Equal(t, "child", subs[0].Subcommands[0].Name[0])
1027+
require.Equal(t, "help", subs[1].Name[0])
1028+
}
1029+
9811030
func TestTryGenerateExtensionHelpSubcommand(t *testing.T) {
9821031
t.Run("nil_provider_returns_nil", func(t *testing.T) {
9831032
sb := newTestSpecBuilder(false)
@@ -996,6 +1045,33 @@ func TestTryGenerateExtensionHelpSubcommand(t *testing.T) {
9961045
require.Nil(t, result)
9971046
})
9981047

1048+
t.Run("no_capability_returns_nil", func(t *testing.T) {
1049+
sb := newTestSpecBuilder(false)
1050+
sb.extensionMetadataProvider = &mockExtensionProvider{hasCapability: false}
1051+
cmd := &cobra.Command{Use: "ext"}
1052+
cmd.Annotations = map[string]string{"extension.id": "test-ext"}
1053+
result := sb.tryGenerateExtensionHelpSubcommand(cmd, []string{"ext"})
1054+
require.Nil(t, result)
1055+
})
1056+
1057+
t.Run("load_error_returns_nil", func(t *testing.T) {
1058+
sb := newTestSpecBuilder(false)
1059+
sb.extensionMetadataProvider = &mockExtensionProvider{hasCapability: true, loadErr: errors.New("load failed")}
1060+
cmd := &cobra.Command{Use: "ext"}
1061+
cmd.Annotations = map[string]string{"extension.id": "test-ext"}
1062+
result := sb.tryGenerateExtensionHelpSubcommand(cmd, []string{"ext"})
1063+
require.Nil(t, result)
1064+
})
1065+
1066+
t.Run("nil_metadata_returns_nil", func(t *testing.T) {
1067+
sb := newTestSpecBuilder(false)
1068+
sb.extensionMetadataProvider = &mockExtensionProvider{hasCapability: true}
1069+
cmd := &cobra.Command{Use: "ext"}
1070+
cmd.Annotations = map[string]string{"extension.id": "test-ext"}
1071+
result := sb.tryGenerateExtensionHelpSubcommand(cmd, []string{"ext"})
1072+
require.Nil(t, result)
1073+
})
1074+
9991075
t.Run("success_with_metadata", func(t *testing.T) {
10001076
sb := newTestSpecBuilder(false)
10011077
sb.extensionMetadataProvider = &mockExtensionProvider{
@@ -1056,6 +1132,18 @@ func TestGenerateHelpSubcommands_MirrorsTree(t *testing.T) {
10561132
require.Len(t, helpSubs[0].Subcommands, 2)
10571133
}
10581134

1135+
func TestGenerateHelpSubcommands_SkipsHelpCommand(t *testing.T) {
1136+
root := &cobra.Command{Use: "azd", Short: "CLI"}
1137+
root.AddCommand(&cobra.Command{Use: "init", Short: "Init"})
1138+
root.InitDefaultHelpCmd()
1139+
1140+
sb := newTestSpecBuilder(false)
1141+
helpSubs := sb.generateHelpSubcommands(root)
1142+
1143+
require.Len(t, helpSubs, 1)
1144+
require.Equal(t, "init", helpSubs[0].Name[0])
1145+
}
1146+
10591147
func TestGenerateHelpSubcommands_HiddenExcluded(t *testing.T) {
10601148
root := &cobra.Command{Use: "azd", Short: "CLI"}
10611149
visible := &cobra.Command{Use: "init", Short: "Init"}
@@ -1072,6 +1160,30 @@ func TestGenerateHelpSubcommands_HiddenExcluded(t *testing.T) {
10721160
}
10731161
}
10741162

1163+
func TestGenerateHelpSubcommands_ExtensionMetadata(t *testing.T) {
1164+
root := &cobra.Command{Use: "azd", Short: "CLI"}
1165+
ext := &cobra.Command{Use: "ext", Short: "Extension"}
1166+
ext.Annotations = map[string]string{"extension.id": "test-ext"}
1167+
root.AddCommand(ext)
1168+
1169+
sb := newTestSpecBuilder(false)
1170+
sb.extensionMetadataProvider = &mockExtensionProvider{
1171+
hasCapability: true,
1172+
metadata: &extensions.ExtensionCommandMetadata{
1173+
Commands: []extensions.Command{
1174+
{Name: []string{"child"}, Short: "Child cmd"},
1175+
},
1176+
},
1177+
}
1178+
1179+
helpSubs := sb.generateHelpSubcommands(root)
1180+
1181+
require.Len(t, helpSubs, 1)
1182+
require.Equal(t, "ext", helpSubs[0].Name[0])
1183+
require.Len(t, helpSubs[0].Subcommands, 1)
1184+
require.Equal(t, "child", helpSubs[0].Subcommands[0].Name[0])
1185+
}
1186+
10751187
// ============================================================================
10761188
// spec_builder.go — custom args with generators
10771189
// ============================================================================

0 commit comments

Comments
 (0)