243 lines
4.0 KiB
Go
243 lines
4.0 KiB
Go
|
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)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|