Files
descrybe/apps/api/cmd/migrator/membership_role_repair_test.go
greeneclipse 8580c996c3 Initial commit of Descrybe v2 without local scratch artifacts.
Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
2026-08-09 22:47:43 +02:00

75 lines
2.5 KiB
Go

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)
}
}