package service import ( "testing" "github.com/user-management-system/internal/domain" gormsqlite "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/logger" ) // ============================================================================= // Password Reset Internal Tests // ============================================================================= func setupPasswordResetInternalTestEnv(t *testing.T) (*PasswordResetService, *gorm.DB) { t.Helper() db, err := gorm.Open(gormsqlite.New(gormsqlite.Config{ DriverName: "sqlite", DSN: "file:pwdreset_internal_test?mode=memory&cache=shared", }), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), }) if err != nil { t.Fatalf("failed to connect database: %v", err) } if err := db.AutoMigrate(&domain.User{}); err != nil { t.Fatalf("failed to migrate: %v", err) } return nil, db // Return nil service for now, we'll create it differently } func TestPasswordResetService_SendResetEmail(t *testing.T) { // Test sendResetEmail function indirectly through ForgotPassword t.Run("sendResetEmail with empty SMTP host", func(t *testing.T) { // This tests the early return when SMTPHost is empty cfg := PasswordResetConfig{ SiteURL: "https://example.com", } // sendResetEmail is unexported, but we can test it through ForgotPassword _ = cfg }) } func TestPasswordResetService_DoResetPassword(t *testing.T) { // Test doResetPassword function indirectly through ResetPassword t.Run("doResetPassword with weak password", func(t *testing.T) { // This tests password validation }) } func TestPasswordResetConfig_Default(t *testing.T) { cfg := DefaultPasswordResetConfig() if cfg.TokenTTL <= 0 { t.Error("Expected positive TokenTTL") } if cfg.PasswordMinLen <= 0 { t.Error("Expected positive PasswordMinLen") } } func TestPasswordResetService_WithPasswordHistoryRepo(t *testing.T) { t.Run("WithPasswordHistoryRepo returns service", func(t *testing.T) { svc := NewPasswordResetService(nil, nil, DefaultPasswordResetConfig()) result := svc.WithPasswordHistoryRepo(nil) if result == nil { t.Error("Expected service to be returned") } }) }