Stop inventing reviewer_id=2. Use project document_duty as the authority, heal missing or non-member placeholders, and keep write paths rejected for reviewer and outsiders. Co-authored-by: Cursor <cursoragent@cursor.com>
41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package bizdev
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"chat-agent-system/internal/docduty"
|
|
)
|
|
|
|
func TestResolveTaskDocumentDuties_UsesCreatorNotHardcodedReviewer(t *testing.T) {
|
|
req := TaskRunRequest{
|
|
UserID: 170, ProjectID: 6145,
|
|
AuthorName: "编制人A",
|
|
}
|
|
got := resolveTaskDocumentDuties(context.Background(), nil, req)
|
|
if got.Author.UserID != 170 {
|
|
t.Fatalf("author want 170 got %+v", got.Author)
|
|
}
|
|
if got.Reviewer.UserID == 2 || got.Approver.UserID == 3 {
|
|
t.Fatalf("must not invent hardcoded 2/3: %+v", got)
|
|
}
|
|
if got.Reviewer.UserID != 0 {
|
|
t.Fatalf("no project members → reviewer empty, got %+v", got.Reviewer)
|
|
}
|
|
}
|
|
|
|
func TestResolveTaskDocumentDuties_IgnoresNonMemberRequestReviewer(t *testing.T) {
|
|
req := TaskRunRequest{
|
|
UserID: 170, ReviewerID: 2, ReviewerName: "审核负责人",
|
|
}
|
|
got := resolveTaskDocumentDuties(context.Background(), nil, req)
|
|
if got.Reviewer.UserID != 0 {
|
|
t.Fatalf("request reviewer 2 is not a member: %+v", got.Reviewer)
|
|
}
|
|
}
|
|
|
|
func TestBindingFromDocRoundTrip(t *testing.T) {
|
|
// compile-time guard that helper stays aligned with Resolve slots
|
|
_ = docduty.Binding{}
|
|
}
|