package adapter import "testing" func TestCapabilitiesNormalizeFillsZeroNumerics(t *testing.T) { t.Parallel() caps := Capabilities{Image: true, Proactive: true}.Normalize() if caps.MaxMessageLength != defaultMaxMessageLength { t.Errorf("MaxMessageLength = %d, want %d", caps.MaxMessageLength, defaultMaxMessageLength) } if caps.RecommendBurstMax != defaultRecommendBurstMax { t.Errorf("RecommendBurstMax = %d, want %d", caps.RecommendBurstMax, defaultRecommendBurstMax) } // Boolean fields must be preserved, not overwritten by normalization. if !caps.Image || !caps.Proactive { t.Errorf("booleans changed by Normalize: %+v", caps) } } func TestCapabilitiesNormalizePreservesExplicit(t *testing.T) { t.Parallel() caps := Capabilities{MaxMessageLength: 100, RecommendBurstMax: 5}.Normalize() if caps.MaxMessageLength != 100 { t.Errorf("MaxMessageLength = %d, want 100 (explicit preserved)", caps.MaxMessageLength) } if caps.RecommendBurstMax != 5 { t.Errorf("RecommendBurstMax = %d, want 5 (explicit preserved)", caps.RecommendBurstMax) } } func TestDefaultCapabilities(t *testing.T) { t.Parallel() caps := DefaultCapabilities() if caps.MaxMessageLength != defaultMaxMessageLength { t.Errorf("MaxMessageLength = %d, want %d", caps.MaxMessageLength, defaultMaxMessageLength) } if !caps.Markdown || !caps.Image { t.Errorf("expected markdown+image by default, got %+v", caps) } if caps.Voice || caps.Reaction || caps.TypingHint || caps.Proactive { t.Errorf("expected rich/proactive features off by default, got %+v", caps) } if caps.RecommendBurstMax != defaultRecommendBurstMax { t.Errorf("RecommendBurstMax = %d, want %d", caps.RecommendBurstMax, defaultRecommendBurstMax) } }