99 lines
2.4 KiB
Go
99 lines
2.4 KiB
Go
package lobby
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestPolicyCanonicalCaseFold(t *testing.T) {
|
|
policy := mustPolicy(t)
|
|
cases := []string{
|
|
"Andromeda",
|
|
"andromeda",
|
|
"ANDROMEDA",
|
|
" Andromeda ",
|
|
}
|
|
want, err := policy.Canonical(cases[0])
|
|
if err != nil {
|
|
t.Fatalf("baseline canonical: %v", err)
|
|
}
|
|
for _, c := range cases[1:] {
|
|
got, err := policy.Canonical(c)
|
|
if err != nil {
|
|
t.Fatalf("canonical %q: %v", c, err)
|
|
}
|
|
if got != want {
|
|
t.Errorf("canonical %q = %q, want %q", c, got, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPolicyCanonicalAntiFraud(t *testing.T) {
|
|
policy := mustPolicy(t)
|
|
want, err := policy.Canonical("pilot")
|
|
if err != nil {
|
|
t.Fatalf("baseline canonical: %v", err)
|
|
}
|
|
for _, c := range []string{"P1lot", "p1lot", "p1L0T", "P1L0t"} {
|
|
got, err := policy.Canonical(c)
|
|
if err != nil {
|
|
t.Fatalf("canonical %q: %v", c, err)
|
|
}
|
|
if got != want {
|
|
t.Errorf("canonical %q = %q, want %q", c, got, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPolicyCanonicalRejectsEmpty(t *testing.T) {
|
|
policy := mustPolicy(t)
|
|
_, err := policy.Canonical(" ")
|
|
if !errors.Is(err, ErrInvalidInput) {
|
|
t.Fatalf("canonical empty: err = %v, want ErrInvalidInput", err)
|
|
}
|
|
}
|
|
|
|
func TestPolicyCanonicalRejectsTooLong(t *testing.T) {
|
|
policy := mustPolicy(t)
|
|
long := strings.Repeat("a", 50)
|
|
_, err := policy.Canonical(long)
|
|
if !errors.Is(err, ErrInvalidInput) {
|
|
t.Fatalf("canonical too long: err = %v, want ErrInvalidInput", err)
|
|
}
|
|
}
|
|
|
|
func TestValidateDisplayNameRejectsControlChars(t *testing.T) {
|
|
if _, err := ValidateDisplayName("bad\x00name"); !errors.Is(err, ErrInvalidInput) {
|
|
t.Fatalf("ValidateDisplayName control: err = %v, want ErrInvalidInput", err)
|
|
}
|
|
if _, err := ValidateDisplayName("good name"); err != nil {
|
|
t.Fatalf("ValidateDisplayName valid: err = %v", err)
|
|
}
|
|
}
|
|
|
|
func TestPolicyWithSkeletonerOverrides(t *testing.T) {
|
|
stub := stubSkeletoner(func(s string) string { return "fixed" })
|
|
policy := mustPolicy(t).WithSkeletoner(stub)
|
|
got, err := policy.Canonical("Andromeda")
|
|
if err != nil {
|
|
t.Fatalf("canonical with stub: %v", err)
|
|
}
|
|
if string(got) != "fixed" {
|
|
t.Errorf("canonical with stub = %q, want %q", got, "fixed")
|
|
}
|
|
}
|
|
|
|
func mustPolicy(t *testing.T) *Policy {
|
|
t.Helper()
|
|
p, err := NewPolicy()
|
|
if err != nil {
|
|
t.Fatalf("NewPolicy: %v", err)
|
|
}
|
|
return p
|
|
}
|
|
|
|
type stubSkeletoner func(string) string
|
|
|
|
func (s stubSkeletoner) Skeleton(in string) string { return s(in) }
|