125 lines
2.6 KiB
Go
125 lines
2.6 KiB
Go
|
|
package workers
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"testing"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"veza-backend-api/internal/email"
|
||
|
|
"veza-backend-api/internal/services"
|
||
|
|
|
||
|
|
"go.uber.org/zap"
|
||
|
|
"gorm.io/driver/sqlite"
|
||
|
|
"gorm.io/gorm"
|
||
|
|
)
|
||
|
|
|
||
|
|
func setupTestJobWorker(t *testing.T) (*JobWorker, *gorm.DB) {
|
||
|
|
// Base de données de test en mémoire
|
||
|
|
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Failed to open test database: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
logger, _ := zap.NewDevelopment()
|
||
|
|
jobService := services.NewJobService(logger)
|
||
|
|
|
||
|
|
// Config SMTP de test (mock)
|
||
|
|
smtpConfig := email.SMTPConfig{
|
||
|
|
Host: "localhost",
|
||
|
|
Port: "1025",
|
||
|
|
Username: "test",
|
||
|
|
Password: "test",
|
||
|
|
From: "test@example.com",
|
||
|
|
}
|
||
|
|
emailSender := email.NewSMTPEmailSender(smtpConfig, logger)
|
||
|
|
|
||
|
|
worker := NewJobWorker(
|
||
|
|
db,
|
||
|
|
jobService,
|
||
|
|
logger,
|
||
|
|
10, // queueSize
|
||
|
|
1, // workers
|
||
|
|
3, // maxRetries
|
||
|
|
emailSender,
|
||
|
|
)
|
||
|
|
|
||
|
|
return worker, db
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestJobWorker_Enqueue(t *testing.T) {
|
||
|
|
worker, _ := setupTestJobWorker(t)
|
||
|
|
|
||
|
|
job := Job{
|
||
|
|
Type: "email",
|
||
|
|
Priority: 2,
|
||
|
|
Payload: map[string]interface{}{
|
||
|
|
"to": "test@example.com",
|
||
|
|
"subject": "Test",
|
||
|
|
"body": "Test body",
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
worker.Enqueue(job)
|
||
|
|
|
||
|
|
stats := worker.GetStats()
|
||
|
|
queueSize := stats["queue_size"].(int)
|
||
|
|
if queueSize != 1 {
|
||
|
|
t.Errorf("Expected queue size to be 1, got %d", queueSize)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestJobWorker_EnqueueEmailJob(t *testing.T) {
|
||
|
|
worker, _ := setupTestJobWorker(t)
|
||
|
|
|
||
|
|
worker.EnqueueEmailJob("test@example.com", "Test Subject", "Test Body")
|
||
|
|
|
||
|
|
stats := worker.GetStats()
|
||
|
|
queueSize := stats["queue_size"].(int)
|
||
|
|
if queueSize != 1 {
|
||
|
|
t.Errorf("Expected queue size to be 1, got %d", queueSize)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestJobWorker_EnqueueEmailJobWithTemplate(t *testing.T) {
|
||
|
|
worker, _ := setupTestJobWorker(t)
|
||
|
|
|
||
|
|
templateData := map[string]interface{}{
|
||
|
|
"Username": "testuser",
|
||
|
|
"ResetURL": "http://localhost/reset?token=abc123",
|
||
|
|
}
|
||
|
|
|
||
|
|
worker.EnqueueEmailJobWithTemplate(
|
||
|
|
"test@example.com",
|
||
|
|
"Reset Password",
|
||
|
|
"password_reset",
|
||
|
|
templateData,
|
||
|
|
)
|
||
|
|
|
||
|
|
stats := worker.GetStats()
|
||
|
|
queueSize := stats["queue_size"].(int)
|
||
|
|
if queueSize != 1 {
|
||
|
|
t.Errorf("Expected queue size to be 1, got %d", queueSize)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestJobWorker_Start(t *testing.T) {
|
||
|
|
worker, _ := setupTestJobWorker(t)
|
||
|
|
|
||
|
|
ctx, cancel := context.WithCancel(context.Background())
|
||
|
|
defer cancel()
|
||
|
|
|
||
|
|
// Démarrer le worker
|
||
|
|
worker.Start(ctx)
|
||
|
|
|
||
|
|
// Enqueue un job
|
||
|
|
worker.EnqueueEmailJob("test@example.com", "Test", "Body")
|
||
|
|
|
||
|
|
// Attendre un peu pour que le worker traite le job
|
||
|
|
time.Sleep(100 * time.Millisecond)
|
||
|
|
|
||
|
|
// Le job devrait être traité (queue vide ou en cours)
|
||
|
|
stats := worker.GetStats()
|
||
|
|
_ = stats // Vérifier que les stats sont disponibles
|
||
|
|
}
|
||
|
|
|