diff --git a/cmd/api/cmd_sdk.go b/cmd/api/cmd_sdk.go index 5d3afe6..24011cf 100644 --- a/cmd/api/cmd_sdk.go +++ b/cmd/api/cmd_sdk.go @@ -131,8 +131,11 @@ func sdkSpecBuilder(title, description, version, termsURL, contactName, contactU } func sdkSpecGroups() []goapi.RouteGroup { - bridge := goapi.NewToolBridge("/tools") - return append(goapi.RegisteredSpecGroups(), bridge) + groups := make([]goapi.RouteGroup, 0) + for group := range sdkSpecGroupsIter() { + groups = append(groups, group) + } + return groups } func sdkSpecGroupsIter() iter.Seq[goapi.RouteGroup] { diff --git a/cmd/api/cmd_test.go b/cmd/api/cmd_test.go index 145894a..6429d7f 100644 --- a/cmd/api/cmd_test.go +++ b/cmd/api/cmd_test.go @@ -589,3 +589,22 @@ func TestAPISDKCmd_Good_TempSpecUsesMetadataFlags(t *testing.T) { t.Fatalf("expected second server to be /, got %v", servers[1]) } } + +func TestAPISDKCmd_Good_SpecGroupsDeduplicateToolBridge(t *testing.T) { + snapshot := api.RegisteredSpecGroups() + api.ResetSpecGroups() + t.Cleanup(func() { + api.ResetSpecGroups() + api.RegisterSpecGroups(snapshot...) + }) + + api.RegisterSpecGroups(api.NewToolBridge("/tools")) + + groups := sdkSpecGroups() + if len(groups) != 1 { + t.Fatalf("expected the built-in tools bridge to be deduplicated, got %d groups", len(groups)) + } + if groups[0].BasePath() != "/tools" { + t.Fatalf("expected the remaining group to be /tools, got %s", groups[0].BasePath()) + } +}