package valueobjects // Tests for player name validation rules: length bounds, normalization, and character restrictions. import ( "strings" "testing" "github.com/stretchr/testify/require" errs "knowfoolery/backend/shared/domain/errors" ) // TestNewPlayerName_NormalizesAndTrims ensures new player name normalizes and trims behavior is handled correctly. func TestNewPlayerName_NormalizesAndTrims(t *testing.T) { name, err := NewPlayerName(" Alice Bob ") require.NoError(t, err) require.Equal(t, "Alice Bob", name.String()) } // TestNewPlayerName_LengthValidation ensures new player name length validation behavior is handled correctly. func TestNewPlayerName_LengthValidation(t *testing.T) { _, err := NewPlayerName("A") require.Error(t, err) longName := strings.Repeat("a", MaxPlayerNameLength+1) _, err = NewPlayerName(longName) require.Error(t, err) } // TestNewPlayerName_InvalidCharacters ensures new player name invalid characters behavior is handled correctly. func TestNewPlayerName_InvalidCharacters(t *testing.T) { _, err := NewPlayerName("Alice!") require.Error(t, err) var domainErr *errs.DomainError require.ErrorAs(t, err, &domainErr) require.Equal(t, errs.CodeInvalidPlayerName, domainErr.Code) } // TestPlayerName_EqualsCaseInsensitive ensures player name equals case insensitive behavior is handled correctly. func TestPlayerName_EqualsCaseInsensitive(t *testing.T) { name1, err := NewPlayerName("Alice") require.NoError(t, err) name2, err := NewPlayerName("alice") require.NoError(t, err) require.True(t, name1.Equals(name2)) } // TestPlayerName_IsEmpty ensures player name is empty behavior is handled correctly. func TestPlayerName_IsEmpty(t *testing.T) { var name PlayerName require.True(t, name.IsEmpty()) }