125 lines
3.6 KiB
Go
125 lines
3.6 KiB
Go
package domain
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestValidateKey(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
key string
|
|
wantErr error
|
|
}{
|
|
{name: "valid theme", key: "theme", wantErr: nil},
|
|
{name: "valid language", key: "language", wantErr: nil},
|
|
{name: "valid notifications_enabled", key: "notifications_enabled", wantErr: nil},
|
|
{name: "unknown key", key: "unknown", wantErr: ErrUnknownKey},
|
|
{name: "empty key", key: "", wantErr: ErrUnknownKey},
|
|
{name: "similar key", key: "themes", wantErr: ErrUnknownKey},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := ValidateKey(tt.key)
|
|
if tt.wantErr == nil {
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
} else {
|
|
if !errors.Is(err, tt.wantErr) {
|
|
t.Errorf("expected %v, got %v", tt.wantErr, err)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidateValue(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
key string
|
|
value string
|
|
wantErr error
|
|
}{
|
|
// Theme
|
|
{name: "theme light", key: "theme", value: "light", wantErr: nil},
|
|
{name: "theme dark", key: "theme", value: "dark", wantErr: nil},
|
|
{name: "theme system", key: "theme", value: "system", wantErr: nil},
|
|
{name: "theme invalid", key: "theme", value: "blue", wantErr: ErrInvalidValue},
|
|
{name: "theme empty", key: "theme", value: "", wantErr: ErrInvalidValue},
|
|
|
|
// Language
|
|
{name: "language en", key: "language", value: "en", wantErr: nil},
|
|
{name: "language fr", key: "language", value: "fr", wantErr: nil},
|
|
{name: "language es", key: "language", value: "es", wantErr: nil},
|
|
{name: "language invalid long", key: "language", value: "english", wantErr: ErrInvalidValue},
|
|
{name: "language invalid uppercase", key: "language", value: "EN", wantErr: ErrInvalidValue},
|
|
{name: "language invalid single char", key: "language", value: "e", wantErr: ErrInvalidValue},
|
|
{name: "language empty", key: "language", value: "", wantErr: ErrInvalidValue},
|
|
|
|
// Notifications
|
|
{name: "notifications true", key: "notifications_enabled", value: "true", wantErr: nil},
|
|
{name: "notifications false", key: "notifications_enabled", value: "false", wantErr: nil},
|
|
{name: "notifications invalid yes", key: "notifications_enabled", value: "yes", wantErr: ErrInvalidValue},
|
|
{name: "notifications invalid 1", key: "notifications_enabled", value: "1", wantErr: ErrInvalidValue},
|
|
|
|
// Unknown key
|
|
{name: "unknown key", key: "unknown", value: "anything", wantErr: ErrUnknownKey},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := ValidateValue(tt.key, tt.value)
|
|
if tt.wantErr == nil {
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
} else {
|
|
if !errors.Is(err, tt.wantErr) {
|
|
t.Errorf("expected %v, got %v", tt.wantErr, err)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestPreference_Validate(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
pref Preference
|
|
wantErr error
|
|
}{
|
|
{
|
|
name: "valid preference",
|
|
pref: Preference{UserID: "user-1", Key: "theme", Value: "dark"},
|
|
wantErr: nil,
|
|
},
|
|
{
|
|
name: "unknown key",
|
|
pref: Preference{UserID: "user-1", Key: "unknown", Value: "val"},
|
|
wantErr: ErrUnknownKey,
|
|
},
|
|
{
|
|
name: "invalid value",
|
|
pref: Preference{UserID: "user-1", Key: "theme", Value: "blue"},
|
|
wantErr: ErrInvalidValue,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := tt.pref.Validate()
|
|
if tt.wantErr == nil {
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
} else {
|
|
if !errors.Is(err, tt.wantErr) {
|
|
t.Errorf("expected %v, got %v", tt.wantErr, err)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|