All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m30s
126 lines
4.3 KiB
Python
126 lines
4.3 KiB
Python
"""
|
|
Tests for Stripe transactional emails and template rendering.
|
|
"""
|
|
|
|
import pytest
|
|
from unittest.mock import patch, MagicMock
|
|
from services.email_service import send_subscription_email_async
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_send_subscription_email_activated():
|
|
"""Test send_subscription_email_async for activated event renders and calls send_email_async"""
|
|
with patch("services.email_service.send_email_async") as mock_send:
|
|
mock_send.return_value = True
|
|
|
|
result = await send_subscription_email_async(
|
|
to_email="customer@example.com",
|
|
user_name="Jean Dupont",
|
|
event_type="activated",
|
|
details={"plan_name": "pro", "ends_at": "15/06/2026"}
|
|
)
|
|
|
|
assert result is True
|
|
mock_send.assert_called_once()
|
|
args, kwargs = mock_send.call_args
|
|
to_email, subject, body = args
|
|
|
|
assert to_email == "customer@example.com"
|
|
assert "activé" in subject or "active" in subject
|
|
assert "Jean Dupont" in body
|
|
assert "Pro" in body
|
|
assert "15/06/2026" in body
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_send_subscription_email_cancelled():
|
|
"""Test send_subscription_email_async for cancelled event renders correctly"""
|
|
with patch("services.email_service.send_email_async") as mock_send:
|
|
mock_send.return_value = True
|
|
|
|
result = await send_subscription_email_async(
|
|
to_email="customer@example.com",
|
|
user_name="Jean Dupont",
|
|
event_type="cancelled",
|
|
details={"ends_at": "15/06/2026"}
|
|
)
|
|
|
|
assert result is True
|
|
mock_send.assert_called_once()
|
|
args, kwargs = mock_send.call_args
|
|
_, subject, body = args
|
|
|
|
assert "annulation" in subject.lower()
|
|
assert "Jean Dupont" in body
|
|
assert "15/06/2026" in body
|
|
assert "Aucun autre prélèvement" in body
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_send_subscription_email_ended():
|
|
"""Test send_subscription_email_async for ended event renders correctly"""
|
|
with patch("services.email_service.send_email_async") as mock_send:
|
|
mock_send.return_value = True
|
|
|
|
result = await send_subscription_email_async(
|
|
to_email="customer@example.com",
|
|
user_name="Jean Dupont",
|
|
event_type="ended",
|
|
details={}
|
|
)
|
|
|
|
assert result is True
|
|
mock_send.assert_called_once()
|
|
args, kwargs = mock_send.call_args
|
|
_, subject, body = args
|
|
|
|
assert "expiré" in subject.lower()
|
|
assert "Jean Dupont" in body
|
|
assert "Gratuit" in body
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_send_subscription_email_payment_failed():
|
|
"""Test send_subscription_email_async for payment_failed event renders correctly"""
|
|
with patch("services.email_service.send_email_async") as mock_send:
|
|
mock_send.return_value = True
|
|
|
|
result = await send_subscription_email_async(
|
|
to_email="customer@example.com",
|
|
user_name="Jean Dupont",
|
|
event_type="payment_failed",
|
|
details={}
|
|
)
|
|
|
|
assert result is True
|
|
mock_send.assert_called_once()
|
|
args, kwargs = mock_send.call_args
|
|
_, subject, body = args
|
|
|
|
assert "échec" in subject.lower() or "echec" in subject.lower()
|
|
assert "Jean Dupont" in body
|
|
assert "coordonnées" in body or "coordonnees" in body
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_send_subscription_email_credits_purchased():
|
|
"""Test send_subscription_email_async for credits_purchased event renders correctly"""
|
|
with patch("services.email_service.send_email_async") as mock_send:
|
|
mock_send.return_value = True
|
|
|
|
result = await send_subscription_email_async(
|
|
to_email="customer@example.com",
|
|
user_name="Jean Dupont",
|
|
event_type="credits_purchased",
|
|
details={"credits": 50}
|
|
)
|
|
|
|
assert result is True
|
|
mock_send.assert_called_once()
|
|
args, kwargs = mock_send.call_args
|
|
_, subject, body = args
|
|
|
|
assert "crédits" in subject.lower() or "credits" in subject.lower()
|
|
assert "Jean Dupont" in body
|
|
assert "+50" in body
|