"""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