slack-auth-1770277926/services/auth-api/internal/domain/user_test.go
rdev-worker fd9bf961bb
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
build: /implement-feature auth-system --requirements 'User model with email/...
2026-02-05 07:59:55 +00:00

185 lines
3.6 KiB
Go

package domain
import (
"testing"
)
func TestNewUser(t *testing.T) {
tests := []struct {
name string
id UserID
email string
password string
wantErr error
}{
{
name: "valid user",
id: "user-123",
email: "user@example.com",
password: "password123",
wantErr: nil,
},
{
name: "empty email",
id: "user-123",
email: "",
password: "password123",
wantErr: ErrInvalidEmail,
},
{
name: "email without @",
id: "user-123",
email: "not-an-email",
password: "password123",
wantErr: ErrInvalidEmail,
},
{
name: "email with @ at start",
id: "user-123",
email: "@example.com",
password: "password123",
wantErr: ErrInvalidEmail,
},
{
name: "email with @ at end",
id: "user-123",
email: "user@",
password: "password123",
wantErr: ErrInvalidEmail,
},
{
name: "email with multiple @",
id: "user-123",
email: "user@@example.com",
password: "password123",
wantErr: ErrInvalidEmail,
},
{
name: "short password",
id: "user-123",
email: "user@example.com",
password: "short",
wantErr: ErrInvalidPassword,
},
{
name: "empty password",
id: "user-123",
email: "user@example.com",
password: "",
wantErr: ErrInvalidPassword,
},
{
name: "minimum valid password",
id: "user-123",
email: "user@example.com",
password: "12345678",
wantErr: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
user, err := NewUser(tt.id, tt.email, tt.password)
if tt.wantErr != nil {
if err != tt.wantErr {
t.Errorf("expected error %v, got %v", tt.wantErr, err)
}
return
}
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if user.ID != tt.id {
t.Errorf("expected ID %s, got %s", tt.id, user.ID)
}
if user.Email != tt.email {
t.Errorf("expected email %s, got %s", tt.email, user.Email)
}
if user.PasswordHash == "" {
t.Error("expected password hash to be set")
}
if user.PasswordHash == tt.password {
t.Error("password hash should not equal plaintext password")
}
if user.CreatedAt.IsZero() {
t.Error("expected CreatedAt to be set")
}
if user.UpdatedAt.IsZero() {
t.Error("expected UpdatedAt to be set")
}
})
}
}
func TestUser_CheckPassword(t *testing.T) {
user, err := NewUser("user-123", "user@example.com", "correctpassword")
if err != nil {
t.Fatalf("failed to create user: %v", err)
}
tests := []struct {
name string
password string
want bool
}{
{
name: "correct password",
password: "correctpassword",
want: true,
},
{
name: "wrong password",
password: "wrongpassword",
want: false,
},
{
name: "empty password",
password: "",
want: false,
},
{
name: "similar password",
password: "correctPassword",
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := user.CheckPassword(tt.password)
if got != tt.want {
t.Errorf("CheckPassword() = %v, want %v", got, tt.want)
}
})
}
}
func TestUserID(t *testing.T) {
t.Run("String", func(t *testing.T) {
id := UserID("user-123")
if id.String() != "user-123" {
t.Errorf("String() = %s, want user-123", id.String())
}
})
t.Run("IsZero", func(t *testing.T) {
var zeroID UserID
if !zeroID.IsZero() {
t.Error("expected zero ID to be zero")
}
nonZeroID := UserID("user-123")
if nonZeroID.IsZero() {
t.Error("expected non-zero ID to not be zero")
}
})
}