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>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d722a81a87
commit
d0fa1e109c
@@ -0,0 +1,59 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user