package contract import ( "encoding/json" "testing" "git.ipao.vip/rogee/go-sip/contracts" ) func TestDecodeServiceUsesApprovedMessageTypeAndCorrelation(t *testing.T) { for _, name := range []string{"command-query", "call-query", "ai-config-request", "command-query-result", "call-query-result", "ai-config-result"} { raw, err := contracts.Files.ReadFile("upstream/v1/examples/" + name + ".json") if err != nil { t.Fatal(err) } message, err := DecodeService(raw) if err != nil { t.Fatalf("%s: %v", name, err) } if message.MessageType == "" || message.DispatcherID == "" || message.MessageID == "" { t.Fatal("message identity was lost") } var body map[string]any if err := json.Unmarshal(raw, &body); err != nil { t.Fatal(err) } body["message_kind"] = "request" bad, _ := json.Marshal(body) if _, err := DecodeService(bad); err == nil { t.Fatal("invented message_kind accepted") } delete(body, "message_kind") body["schema_version"] = "1.0" bad, _ = json.Marshal(body) if _, err := DecodeService(bad); err == nil { t.Fatal("legacy service envelope accepted") } } }