diff --git a/cmd/integrations/plugins/registry.go b/cmd/integrations/plugins/registry.go index 779b4e7..57d8bed 100644 --- a/cmd/integrations/plugins/registry.go +++ b/cmd/integrations/plugins/registry.go @@ -1,6 +1,9 @@ package plugins -import "strings" +import ( + "sort" + "strings" +) // Builder defines a function that parses CLI args into an Integration. type Builder func(args []string) (Integration, error) @@ -19,5 +22,6 @@ func List() []string { for n := range registry { names = append(names, n) } + sort.Strings(names) return names } diff --git a/cmd/integrations/plugins/registry_test.go b/cmd/integrations/plugins/registry_test.go index e827bb4..e1fd786 100644 --- a/cmd/integrations/plugins/registry_test.go +++ b/cmd/integrations/plugins/registry_test.go @@ -1,6 +1,9 @@ package plugins -import "testing" +import ( + "sort" + "testing" +) func TestListReturnsAllRegisteredNames(t *testing.T) { names := List() @@ -48,3 +51,22 @@ func TestGetCaseInsensitive(t *testing.T) { t.Fatal("case-insensitive Get failed") } } + +func TestListIsSorted(t *testing.T) { + original := registry + registry = map[string]Builder{ + "beta": nil, + "alpha": nil, + "gamma": nil, + "delta": nil, + "epsilon": nil, + } + t.Cleanup(func() { registry = original }) + + for i := 0; i < 20; i++ { + names := List() + if !sort.StringsAreSorted(names) { + t.Fatalf("List returned unsorted names: %v", names) + } + } +}