package cognitive_advisory_test import ( "encoding/json" "strings" "testing" "git.cin.su/m/Assistant/adapters/models" "git.cin.su/m/Assistant/contracts/authority" "git.cin.su/m/Assistant/contracts/capability" "git.cin.su/m/Assistant/contracts/cognitive" "git.cin.su/m/Assistant/contracts/identity" "git.cin.su/m/Assistant/platform/ids" ) func validRequest() cognitive.AdvisoryRequest { return cognitive.AdvisoryRequest{Version: cognitive.CreatorAdvisoryV1, RequestID: cognitive.RequestID(ids.ID("request-1")), ActorID: identity.ActorID(ids.ID("actor")), PrincipalID: identity.PrincipalID(ids.ID("principal")), ScopeID: authority.ScopeID(ids.ID("scope")), Message: "What should I review?", Context: []cognitive.ContextExcerpt{{ID: cognitive.ContextExcerptID(ids.ID("excerpt-1")), SourceKind: "prospective-item", SourceID: "item-1", Revision: 1, Sensitivity: cognitive.SensitivityPrivateAllowed, Text: "Review tomorrow"}}, Locale: "en", MaxOutputBytes: 4096, ProviderBindingID: capability.CapabilityBindingID(ids.ID("fake-binding")), ProviderBindingRevision: 1} } func TestDeterministicAdvisoryIsExplicitlyUnavailable(t *testing.T) { request := validRequest() response, err := models.DeterministicAdvisoryUnavailable(request) if err != nil { t.Fatal(err) } if response.FinishReason != cognitive.FinishProviderUnavailable || response.AdvisoryText != "" { t.Fatalf("unexpected fake response: %+v", response) } if err := models.ValidateAdvisoryResponse(request, response); err != nil { t.Fatal(err) } raw, err := json.Marshal(response) if err != nil { t.Fatal(err) } for _, forbidden := range []string{"ActionProposal", "ToolCall", "AuthorityGrant"} { if strings.Contains(string(raw), forbidden) { t.Fatalf("response contains forbidden field %s", forbidden) } } } func TestAdvisoryRejectsUnsafeContextAndCitations(t *testing.T) { tests := []struct { name string mutate func(*cognitive.AdvisoryRequest) }{ {"secret", func(r *cognitive.AdvisoryRequest) { r.Context[0].Sensitivity = cognitive.SensitivitySecret }}, {"unknown", func(r *cognitive.AdvisoryRequest) { r.Context[0].Sensitivity = cognitive.SensitivityUnknown }}, {"duplicate", func(r *cognitive.AdvisoryRequest) { r.Context = append(r.Context, r.Context[0]) }}, {"oversized-message", func(r *cognitive.AdvisoryRequest) { r.Message = strings.Repeat("x", models.MaxAdvisoryMessageBytes+1) }}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { request := validRequest() test.mutate(&request) if err := models.ValidateAdvisoryRequest(request); err == nil { t.Fatal("unsafe request accepted") } }) } request := validRequest() response := cognitive.AdvisoryResponse{Version: cognitive.CreatorAdvisoryV1, RequestID: request.RequestID, ProviderBindingID: request.ProviderBindingID, ProviderBindingRevision: 1, AdvisoryText: "answer", ReferencedExcerptIDs: []cognitive.ContextExcerptID{cognitive.ContextExcerptID(ids.ID("not-supplied"))}, FinishReason: cognitive.FinishCompleted} if err := models.ValidateAdvisoryResponse(request, response); err == nil { t.Fatal("unknown citation accepted") } }