You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.6 KiB
Go

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 verifies whitespace trimming and space normalization.
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 too-short and too-long names are rejected.
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 verifies disallowed characters yield an invalid player name error.
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 confirms equality ignores case differences.
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 confirms the zero value reports empty.
func TestPlayerName_IsEmpty(t *testing.T) {
var name PlayerName
require.True(t, name.IsEmpty())
}