Files
benevoles/backend/tests/test_sumup_client.py
T
AdamThomasandClaude Opus 5.5 d0fa1e109c
ci-cd / build-backend (push) Successful in 38s
ci-cd / build-frontend (push) Successful in 20s
ci-cd / deploy (push) Successful in 13s
Logs de diagnostic et rapprochement SumUp ↔ bénévole
- Une ligne de log par requête (route modèle, statut, durée, code d'erreur,
  compte), identifiant X-Request-ID repris dans chaque log et affiché à
  l'utilisateur sous une erreur, exceptions non gérées tracées (500 JSON)
- Journal d'accès d'uvicorn coupé : il exposait le jeton du formulaire public
- Logs métier : paiement SumUp, connexion, import, plannings, solveur
- Nom du bénévole dans la description du checkout SumUp
- Code et identifiant de transaction SumUp enregistrés au paiement
  (migration 0023), affichés sur la fiche et dans l'export Excel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:54:35 +02:00

60 lines
1.8 KiB
Python

"""Client SumUp : lecture de la transaction d'un checkout payé, et
diagnostic d'un appel refusé (journalisé sans données du payeur)."""
import logging
import httpx
from app.sumup import client as sumup
def test_transaction_is_read_from_the_checkout():
checkout = sumup._to_checkout(
{
"id": "co_1",
"status": "PAID",
"transaction_code": "TEENSK4W2K",
"transaction_id": "tx-1",
}
)
assert checkout.transaction_code == "TEENSK4W2K"
assert checkout.transaction_id == "tx-1"
def test_transaction_falls_back_to_the_successful_attempt():
checkout = sumup._to_checkout(
{
"id": "co_1",
"status": "PAID",
"transactions": [
{"id": "tx-failed", "transaction_code": "TFAILED", "status": "FAILED"},
{"id": "tx-ok", "transaction_code": "TOK", "status": "SUCCESSFUL"},
],
}
)
assert checkout.transaction_code == "TOK"
assert checkout.transaction_id == "tx-ok"
def test_unpaid_checkout_has_no_transaction():
checkout = sumup._to_checkout({"id": "co_1", "status": "PENDING"})
assert checkout.transaction_code is None
assert checkout.transaction_id is None
def test_refused_call_logs_the_sumup_error_code(monkeypatch, caplog):
request = httpx.Request("POST", "https://api.sumup.com/v0.1/checkouts")
response = httpx.Response(
409,
json={"error_code": "DUPLICATED_CHECKOUT", "message": "Checkout already exists"},
request=request,
)
monkeypatch.setattr(httpx, "request", lambda *a, **kw: response)
with caplog.at_level(logging.WARNING, logger="app.sumup"):
result = sumup.get_checkout(api_key="k", checkout_id="co_1")
assert result is None
assert "HTTP 409" in caplog.text
assert "DUPLICATED_CHECKOUT" in caplog.text