package main import ( "strings" "testing" ) func TestDecideMembershipPromoteSkipsA1(t *testing.T) { t.Parallel() mutate, reason := decideMembershipPromote(true, true) if mutate || reason != "a1_cohort" { t.Fatalf("a1=true must never promote (even with -confirm): mutate=%v reason=%q", mutate, reason) } mutate, reason = decideMembershipPromote(true, false) if !mutate || reason != "" { t.Fatalf("non-A1 should promote: mutate=%v reason=%q", mutate, reason) } mutate, reason = decideMembershipPromote(false, true) if mutate || reason != "" { t.Fatalf("list-only: mutate=%v reason=%q", mutate, reason) } } func TestValidatePromoteTargets(t *testing.T) { t.Parallel() if err := validatePromoteTargets(false, "", "", ""); err != nil { t.Fatalf("list-only: %v", err) } if err := validatePromoteTargets(true, "a@b.c", "", ""); err != nil { t.Fatalf("email: %v", err) } if err := validatePromoteTargets(true, "", "11111111-1111-1111-1111-111111111111", ""); err != nil { t.Fatalf("user-id: %v", err) } if err := validatePromoteTargets(true, "", "", "22222222-2222-2222-2222-222222222222"); err != nil { t.Fatalf("company-id alone: %v", err) } err := validatePromoteTargets(true, "", "", "") if err == nil || !strings.Contains(err.Error(), "requires -email, -user-id, or -company-id") { t.Fatalf("expected unscoped refuse, got %v", err) } err = validatePromoteTargets(true, " ", " ", " ") if err == nil || !strings.Contains(err.Error(), "requires -email, -user-id, or -company-id") { t.Fatalf("expected blank refuse, got %v", err) } } func TestGuardLiveMutation(t *testing.T) { t.Parallel() if err := guardLiveMutation(false, false, false, "-promote-company-admins"); err != nil { t.Fatalf("list-only: %v", err) } if err := guardLiveMutation(true, true, false, "-promote-company-admins"); err != nil { t.Fatalf("dry-run: %v", err) } if err := guardLiveMutation(true, false, true, "-promote-company-admins"); err != nil { t.Fatalf("confirm: %v", err) } err := guardLiveMutation(true, false, false, "-promote-company-admins") if err == nil || !strings.Contains(err.Error(), "no blind live writes") { t.Fatalf("expected blind-write refusal, got %v", err) } if !strings.Contains(err.Error(), "-promote-company-admins") { t.Fatalf("expected flag hint in error, got %v", err) } } func TestGuardLiveAssignDelegates(t *testing.T) { t.Parallel() err := guardLiveAssign(true, false, false) if err == nil || !strings.Contains(err.Error(), "-assign-missing-plans") { t.Fatalf("expected assign hint, got %v", err) } }