diff --git a/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection.go b/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection.go index 45bf7a7bf5f..42392e9a2d4 100644 --- a/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection.go +++ b/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection.go @@ -859,6 +859,12 @@ func printDetail(result connectionDetailResult, format string) error { fmt.Printf("Kind: %s\n", result.Kind) fmt.Printf("Auth Type: %s\n", result.AuthType) fmt.Printf("Target: %s\n", result.Target) + if len(result.Metadata) > 0 { + fmt.Println("\nMetadata:") + for k, v := range result.Metadata { + fmt.Printf(" %s: %s\n", k, deref(v)) + } + } if len(result.Credentials) > 0 { fmt.Println("\nCredentials:") for k, v := range result.Credentials { diff --git a/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go b/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go index 2416407476b..f98c8761102 100644 --- a/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go +++ b/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go @@ -4,7 +4,10 @@ package cmd import ( + "bytes" "encoding/json" + "io" + "os" "strings" "testing" @@ -563,3 +566,95 @@ func TestBuildCredentialReferences(t *testing.T) { }) } } + +func TestPrintDetail_IncludesMetadata(t *testing.T) { + v1 := "value1" + v2 := "value2" + result := connectionDetailResult{ + Name: "test-conn", + Kind: "RemoteTool", + AuthType: "None", + Target: "https://example.com", + Metadata: map[string]*string{ + "key1": &v1, + "key2": &v2, + }, + } + + // Capture stdout + old := os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + + err := printDetail(result, "table") + require.NoError(t, err) + + require.NoError(t, w.Close()) + os.Stdout = old + + var buf bytes.Buffer + _, _ = io.Copy(&buf, r) + output := buf.String() + + require.Contains(t, output, "Metadata:") + require.Contains(t, output, "key1: value1") + require.Contains(t, output, "key2: value2") +} + +func TestPrintDetail_OmitsEmptyMetadata(t *testing.T) { + result := connectionDetailResult{ + Name: "test-conn", + Kind: "RemoteTool", + AuthType: "None", + Target: "https://example.com", + } + + old := os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + + err := printDetail(result, "table") + require.NoError(t, err) + + require.NoError(t, w.Close()) + os.Stdout = old + + var buf bytes.Buffer + _, _ = io.Copy(&buf, r) + output := buf.String() + + require.NotContains(t, output, "Metadata:") +} + +func TestPrintDetail_JSON_IncludesMetadata(t *testing.T) { + v1 := "val1" + result := connectionDetailResult{ + Name: "test-conn", + Kind: "RemoteTool", + AuthType: "None", + Target: "https://example.com", + Metadata: map[string]*string{ + "foo": &v1, + }, + } + + old := os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + + err := printDetail(result, "json") + require.NoError(t, err) + + require.NoError(t, w.Close()) + os.Stdout = old + + var buf bytes.Buffer + _, _ = io.Copy(&buf, r) + + var parsed map[string]any + require.NoError(t, json.Unmarshal(buf.Bytes(), &parsed)) + + meta, ok := parsed["metadata"].(map[string]any) + require.True(t, ok, "metadata should be present in JSON output") + require.Equal(t, "val1", meta["foo"]) +}