backend/pkg/member/domain/validation_test.go

243 lines
4.0 KiB
Go
Raw Normal View History

2025-10-01 16:30:27 +00:00
package domain
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestValidateEmail(t *testing.T) {
tests := []struct {
name string
email string
wantErr bool
}{
{
name: "valid email",
email: "test@example.com",
wantErr: false,
},
{
name: "valid email with subdomain",
email: "user@mail.example.com",
wantErr: false,
},
{
name: "invalid email - no @",
email: "testexample.com",
wantErr: true,
},
{
name: "invalid email - no domain",
email: "test@",
wantErr: true,
},
{
name: "empty email",
email: "",
wantErr: true,
},
{
name: "email with spaces",
email: " test@example.com ",
wantErr: false, // Should be trimmed
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := ValidateEmail(tt.email)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}
func TestValidatePhone(t *testing.T) {
tests := []struct {
name string
phone string
wantErr bool
}{
{
name: "valid phone with country code",
phone: "+1234567890",
wantErr: false,
},
{
name: "valid phone without country code",
phone: "1234567890",
wantErr: false,
},
{
name: "invalid phone - too short",
phone: "12",
wantErr: true,
},
{
name: "invalid phone - contains letters",
phone: "123-abc-4567",
wantErr: true,
},
{
name: "empty phone",
phone: "",
wantErr: true,
},
{
name: "phone with spaces",
phone: " +1234567890 ",
wantErr: false, // Should be trimmed
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := ValidatePhone(tt.phone)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}
func TestValidatePassword(t *testing.T) {
tests := []struct {
name string
password string
wantErr bool
}{
{
name: "valid password",
password: "password123",
wantErr: false,
},
{
name: "password too short",
password: "123",
wantErr: true,
},
{
name: "password too long",
password: string(make([]byte, MaxPasswordLength+1)),
wantErr: true,
},
{
name: "empty password",
password: "",
wantErr: true,
},
{
name: "minimum length password",
password: "12345678",
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := ValidatePassword(tt.password)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}
func TestValidateStringLength(t *testing.T) {
tests := []struct {
name string
value string
min int
max int
wantErr bool
}{
{
name: "valid length",
value: "hello",
min: 3,
max: 10,
wantErr: false,
},
{
name: "too short",
value: "hi",
min: 3,
max: 10,
wantErr: true,
},
{
name: "too long",
value: "hello world",
min: 3,
max: 5,
wantErr: true,
},
{
name: "empty value",
value: "",
min: 1,
max: 10,
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := ValidateStringLength("test", tt.value, tt.min, tt.max)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}
func TestValidateRequired(t *testing.T) {
tests := []struct {
name string
value string
wantErr bool
}{
{
name: "valid value",
value: "hello",
wantErr: false,
},
{
name: "empty value",
value: "",
wantErr: true,
},
{
name: "whitespace only",
value: " ",
wantErr: true,
},
{
name: "value with spaces",
value: " hello ",
wantErr: false, // Should be trimmed
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := ValidateRequired("test", tt.value)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}