feat: backend service
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
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) }
|
||||
Reference in New Issue
Block a user