package service import ( "context" "testing" "time" "github.com/user-management-system/internal/cache" ) // ============================================================================= // Email Configuration Tests // ============================================================================= func TestDefaultEmailCodeConfig(t *testing.T) { cfg := DefaultEmailCodeConfig() if cfg.CodeTTL != 5*time.Minute { t.Errorf("CodeTTL = %v, want %v", cfg.CodeTTL, 5*time.Minute) } if cfg.ResendCooldown != time.Minute { t.Errorf("ResendCooldown = %v, want %v", cfg.ResendCooldown, time.Minute) } if cfg.MaxDailyLimit != 10 { t.Errorf("MaxDailyLimit = %d, want 10", cfg.MaxDailyLimit) } if cfg.SiteURL != "http://localhost:8080" { t.Errorf("SiteURL = %q, want %q", cfg.SiteURL, "http://localhost:8080") } if cfg.SiteName != "User Management System" { t.Errorf("SiteName = %q, want %q", cfg.SiteName, "User Management System") } } // ============================================================================= // Email Code Service Tests // ============================================================================= func TestNewEmailCodeService(t *testing.T) { t.Run("with default config", func(t *testing.T) { l1Cache := cache.NewL1Cache() l2Cache := cache.NewRedisCache(false) cacheManager := cache.NewCacheManager(l1Cache, l2Cache) provider := &MockEmailProvider{} svc := NewEmailCodeService(provider, cacheManager, EmailCodeConfig{}) if svc == nil { t.Error("Expected service to be created") } }) t.Run("with custom config", func(t *testing.T) { l1Cache := cache.NewL1Cache() l2Cache := cache.NewRedisCache(false) cacheManager := cache.NewCacheManager(l1Cache, l2Cache) provider := &MockEmailProvider{} cfg := EmailCodeConfig{ CodeTTL: 10 * time.Minute, ResendCooldown: 2 * time.Minute, MaxDailyLimit: 20, } svc := NewEmailCodeService(provider, cacheManager, cfg) if svc == nil { t.Error("Expected service to be created") } }) } func TestEmailCodeService_SendEmailCode(t *testing.T) { t.Run("with valid email", func(t *testing.T) { l1Cache := cache.NewL1Cache() l2Cache := cache.NewRedisCache(false) cacheManager := cache.NewCacheManager(l1Cache, l2Cache) provider := &MockEmailProvider{} svc := NewEmailCodeService(provider, cacheManager, DefaultEmailCodeConfig()) err := svc.SendEmailCode(context.Background(), "test@example.com", "login") if err != nil { t.Errorf("Unexpected error: %v", err) } }) }