Aller au contenu principal

Guide de Test du Service Mail

Prérequis

  1. Base de données PostgreSQL démarrée
  2. RabbitMQ démarré
  3. Au moins un client dans la table clients
  4. Backend démarré : cd backend && npm run start:dev
# Démarrer l'infrastructure
docker compose up -d

# Vérifier que tout est OK
docker ps

Test Manuel avec curl

1. Créer un client de test

curl -X POST "http://localhost:649/api/publique/clients" \
-H "Content-Type: application/json" \
-d '{
"nom": "Dupont",
"prenom": "Jean",
"adresseMail": "votre.email@gmail.com",
"civilite": "M",
"telephone": "0612345678"
}'

Note importante : Remplacez votre.email@gmail.com par votre vrai email pour recevoir le mail de test.

2. Récupérer l'idClient du client créé

curl -X GET "http://localhost:649/api/prive/clients" | jq

Notez l'idClient du client (format CLI_XXX, par exemple: CLI_ABC1234).

3. Envoyer un email de test

curl -X POST "http://localhost:649/api/publique/mail/send" \
-H "Content-Type: application/json" \
-d '{
"templateId": 1,
"clientIds": ["CLI_ABC1234"]
}'

Réponse attendue (202 Accepted):

{
"jobId": "123e4567-e89b-12d3-a456-426614174000",
"clientCount": 1,
"status": "pending"
}

4. Vérifier le statut de l'envoi

# Remplacez JOB_ID par le jobId retourné à l'étape 3
curl -X GET "http://localhost:649/api/publique/mail/job/JOB_ID" | jq

Réponse attendue (après quelques secondes):

{
"jobId": "123e4567-e89b-12d3-a456-426614174000",
"total": 1,
"sent": 1,
"failed": 0,
"pending": 0,
"entries": [
{
"clientId": 42,
"email": "votre.email@gmail.com",
"status": "sent",
"sentAt": "2024-01-15T10:30:45.123Z",
"errorMessage": null
}
]
}

5. Vérifier votre boîte mail

Vous devriez recevoir un email avec :

  • Sujet : "Bienvenue Jean Dupont !"
  • Corps : Template HTML avec vos informations

Test avec filtres

Envoyer à tous les clients Premium

curl -X POST "http://localhost:649/api/publique/mail/send" \
-H "Content-Type: application/json" \
-d '{
"templateId": 1,
"filters": {
"niveauFidelisation": "Premium"
}
}'

Envoyer aux clients avec 100-500 points

curl -X POST "http://localhost:649/api/publique/mail/send" \
-H "Content-Type: application/json" \
-d '{
"templateId": 1,
"filters": {
"pointsFideliteMin": 100,
"pointsFideliteMax": 500
}
}'

Vérification du traitement

Les emails ne sont plus traités par RabbitMQ mais par un cron job toutes les 30 secondes. Surveillez les logs du backend pour voir le traitement en temps réel.

Vérification dans la BDD

# Se connecter à PostgreSQL
docker exec -it ubsi-postgres psql db -U usr

# Voir tous les emails envoyés
SELECT
id,
client_id,
recipient_email,
status,
sent_at,
error_message
FROM email_history
ORDER BY created_at DESC
LIMIT 10;

# Statistiques par job
SELECT
job_id,
status,
COUNT(*) as count,
MIN(created_at) as started_at,
MAX(sent_at) as last_sent
FROM email_history
WHERE job_id = 'VOTRE_JOB_ID'
GROUP BY job_id, status;

Logs à surveiller

Dans le terminal du backend, vous devriez voir :

[MailService] Starting email campaign with template 1
[MailService] Found 1 clients to send emails to
[MailService] Created 1 email history entries (pending)
[MailService] Email campaign xxx created with 1 recipients (status: pending)
[MailService] Processing 1 pending emails...
[MailService] Processing email 42 for client 1 (votre.email@gmail.com)
[MailService] Email 42 sent successfully to votre.email@gmail.com
[MailService] Finished processing 1 emails

Test de charge (envoi massif)

Créer 100 clients de test

for i in {1..100}; do
curl -s -X POST "http://localhost:649/api/publique/clients" \
-H "Content-Type: application/json" \
-d "{\"nom\":\"Test$i\",\"prenom\":\"User$i\",\"adresseMail\":\"test$i@example.com\",\"telephone\":\"061234567$i\"}"
echo "Client $i créé"
done

Envoyer à tous les clients

curl -X POST "http://localhost:649/api/publique/mail/send" \
-H "Content-Type: application/json" \
-d '{
"templateId": 1,
"all": true
}'

Surveiller la progression

# Récupérer le jobId de la réponse précédente
JOB_ID="xxx"

# Surveiller en temps réel (toutes les 2 secondes)
watch -n 2 "curl -s http://localhost:649/api/publique/mail/job/$JOB_ID | jq '.total, .sent, .pending, .failed'"

Troubleshooting

Les emails ne partent pas

  1. Vérifier les logs du backend :

    • Chercher dans les logs : Processing X pending emails...
    • Le cron job devrait s'exécuter toutes les 30 secondes
  2. Vérifier SMTP :

    • Les credentials SMTP sont corrects dans app.module.ts
    • Pas de limite de taux atteinte sur Gmail

Status reste "pending"

  • Le cron job n'a pas encore traité l'email (attendre 30 secondes)
  • Erreur SMTP (vérifier les logs du backend)
  • Le service backend n'est pas démarré

Erreur "Template not found"

  • Pour le moment, seul le templateId: 1 existe (mock)
  • Les templates BDD ne sont pas encore implémentés

Prochaines étapes

Une fois les tests manuels validés, implémenter :

  1. Tests e2e automatisés
  2. Tests unitaires avec mocks
  3. Récupération des templates depuis la BDD
  4. Endpoints CRUD pour les templates