Files
Agent-System/internal/server/project_members_role_test.go
T
weichenandCursor 8b6bf2cca1 fix(api): sync removed members and fail tasks without a ledger
Remove now reconciles document slots and returns ERR_DUTY_SYNC on
failure. CreateOrGetDocument errors abort the task. The frontend
refreshes workflow docs after add, update, restore, and remove.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-13 22:29:53 +00:00

59 lines
1.7 KiB
Go

package server
import (
"errors"
"net/http"
"net/http/httptest"
"strings"
"testing"
"chat-agent-system/internal/authz"
)
func TestResolveUpdateProjectRole_KeepsExistingOwner(t *testing.T) {
role, err := resolveUpdateProjectRole("", &authz.ProjectMemberRecord{ProjectRole: authz.RoleOwner})
if err != nil {
t.Fatal(err)
}
if role != authz.RoleOwner {
t.Fatalf("omitted project_role must keep owner, got %q", role)
}
}
func TestResolveUpdateProjectRole_RejectsMissingMember(t *testing.T) {
if _, err := resolveUpdateProjectRole("", nil); !errors.Is(err, errProjectRoleRequired) {
t.Fatalf("want errProjectRoleRequired, got %v", err)
}
if _, err := resolveUpdateProjectRole("", &authz.ProjectMemberRecord{}); !errors.Is(err, errProjectRoleRequired) {
t.Fatalf("empty existing role must be rejected, got %v", err)
}
}
func TestDutyChangeForRemove_UsesExistingReviewerDuty(t *testing.T) {
got := dutyChangeForRemove(&authz.ProjectMemberRecord{DocumentDuty: "reviewer"}, 171)
if !got.Exited || got.UserID != 171 || got.PreviousDuty != "reviewer" || got.NextDuty != "reviewer" {
t.Fatalf("remove change: %+v", got)
}
}
func TestWriteDutySyncError_UsesExplicitCode(t *testing.T) {
rec := httptest.NewRecorder()
writeDutySyncError(rec)
if rec.Code != http.StatusInternalServerError {
t.Fatalf("status=%d", rec.Code)
}
if !strings.Contains(rec.Body.String(), "ERR_DUTY_SYNC") {
t.Fatalf("body=%s", rec.Body.String())
}
}
func TestResolveUpdateProjectRole_ExplicitRoleWins(t *testing.T) {
role, err := resolveUpdateProjectRole(authz.RoleViewer, &authz.ProjectMemberRecord{ProjectRole: authz.RoleOwner})
if err != nil {
t.Fatal(err)
}
if role != authz.RoleViewer {
t.Fatalf("explicit role must win, got %q", role)
}
}