134 lines
4.5 KiB
Python
134 lines
4.5 KiB
Python
import pytest
|
|
|
|
from src.subscriptions import client
|
|
|
|
|
|
def test_auth_and_base_url_used(fake_httpx):
|
|
fake_httpx["queue"].append(fake_httpx["Response"](200, {"handle": "colibre-1"}))
|
|
client.get_customer("colibre-1")
|
|
call = fake_httpx["calls"][0]
|
|
assert call["url"] == "https://api.test/v1/customer/colibre-1"
|
|
assert call["auth"] == ("priv_test", "")
|
|
|
|
|
|
def test_get_customer(fake_httpx):
|
|
fake_httpx["queue"].append(fake_httpx["Response"](200, {"handle": "colibre-1"}))
|
|
result = client.get_customer("colibre-1")
|
|
assert result == {"handle": "colibre-1"}
|
|
|
|
|
|
def test_update_customer(fake_httpx):
|
|
fake_httpx["queue"].append(fake_httpx["Response"](200, {"handle": "colibre-1"}))
|
|
client.update_customer("colibre-1", {"email": "a@b.fr"})
|
|
call = fake_httpx["calls"][0]
|
|
assert call["method"] == "PUT"
|
|
assert call["json"] == {"email": "a@b.fr"}
|
|
|
|
|
|
def test_create_subscription_session_with_customer_handle(fake_httpx):
|
|
fake_httpx["queue"].append(fake_httpx["Response"](200, {"handle": "abo-1-1"}))
|
|
fake_httpx["queue"].append(
|
|
fake_httpx["Response"](
|
|
200,
|
|
{"id": "cs_1", "url": "https://checkout.reepay.com/#/subscription/cs_1"},
|
|
)
|
|
)
|
|
url = client.create_subscription_session(
|
|
"plan_simple",
|
|
"abo-1-1",
|
|
"https://app/ok",
|
|
"https://app/ko",
|
|
customer_handle="colibre-1",
|
|
)
|
|
assert url == "https://checkout.reepay.com/#/subscription/cs_1"
|
|
|
|
create_body = fake_httpx["calls"][0]["json"]
|
|
assert create_body["plan"] == "plan_simple"
|
|
assert create_body["handle"] == "abo-1-1"
|
|
assert create_body["customer"] == "colibre-1"
|
|
assert create_body["signup_method"] == "link"
|
|
assert "generate_handle" not in create_body
|
|
assert "prepare_subscription" not in create_body
|
|
# accept_url/cancel_url n'existent pas dans CreateSubscription : ils
|
|
# doivent passer par la session de checkout dédiée, pas ce body.
|
|
assert "accept_url" not in create_body
|
|
assert "cancel_url" not in create_body
|
|
|
|
session_call = fake_httpx["calls"][1]
|
|
assert (
|
|
session_call["url"]
|
|
== "https://checkout-api.frisbii.com/v1/session/subscription"
|
|
)
|
|
assert session_call["json"] == {
|
|
"subscription": "abo-1-1",
|
|
"accept_url": "https://app/ok",
|
|
"cancel_url": "https://app/ko",
|
|
}
|
|
|
|
|
|
def test_create_subscription_session_no_trial(fake_httpx):
|
|
fake_httpx["queue"].append(fake_httpx["Response"](200, {"handle": "abo-1-2"}))
|
|
fake_httpx["queue"].append(
|
|
fake_httpx["Response"](
|
|
200, {"url": "https://checkout.reepay.com/#/subscription/cs_2"}
|
|
)
|
|
)
|
|
client.create_subscription_session(
|
|
"plan_simple",
|
|
"abo-1-2",
|
|
"https://app/ok",
|
|
"https://app/ko",
|
|
no_trial=True,
|
|
customer_handle="colibre-1",
|
|
)
|
|
assert fake_httpx["calls"][0]["json"]["no_trial"] is True
|
|
|
|
|
|
def test_http_error_raises_frisbii_error(fake_httpx):
|
|
fake_httpx["queue"].append(fake_httpx["Response"](500, {"error": "boom"}))
|
|
with pytest.raises(client.FrisbiiError) as exc:
|
|
client.get_plan("plan_simple")
|
|
assert exc.value.status_code == 500
|
|
|
|
|
|
def test_get_payment_info_url_appends_query_params(fake_httpx):
|
|
fake_httpx["queue"].append(
|
|
fake_httpx["Response"](
|
|
200,
|
|
{
|
|
"handle": "abo-1-1",
|
|
"hosted_page_links": {
|
|
"payment_info": "https://checkout.reepay.com/#/subscription/pay/en_GB/x/abo-1-1"
|
|
},
|
|
},
|
|
)
|
|
)
|
|
url = client.get_payment_info_url(
|
|
"abo-1-1",
|
|
"https://app/compte/abonnement?carte=succes",
|
|
"https://app/compte/abonnement?carte=annule",
|
|
)
|
|
assert url.startswith(
|
|
"https://checkout.reepay.com/#/subscription/pay/en_GB/x/abo-1-1"
|
|
)
|
|
assert "accept_url=https%3A%2F%2Fapp%2Fcompte%2Fabonnement%3Fcarte%3Dsucces" in url
|
|
assert "cancel_url=https%3A%2F%2Fapp%2Fcompte%2Fabonnement%3Fcarte%3Dannule" in url
|
|
|
|
|
|
def test_get_payment_info_url_merges_existing_query_string(fake_httpx):
|
|
fake_httpx["queue"].append(
|
|
fake_httpx["Response"](
|
|
200,
|
|
{
|
|
"handle": "abo-1-2",
|
|
"hosted_page_links": {
|
|
"payment_info": "https://checkout.reepay.com/pay/abo-1-2?locale=fr"
|
|
},
|
|
},
|
|
)
|
|
)
|
|
url = client.get_payment_info_url("abo-1-2", "https://app/ok", "https://app/ko")
|
|
assert "locale=fr" in url
|
|
assert "accept_url=https%3A%2F%2Fapp%2Fok" in url
|
|
assert "cancel_url=https%3A%2F%2Fapp%2Fko" in url
|