From 33aadcb2ebd089a0665219faff52d1c9eb8c0dd0 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 15 Jun 2025 06:24:38 +0000 Subject: [PATCH 1/3] Add checkout sessions support to Fintoc Python library --- fintoc/core.py | 2 ++ fintoc/managers/__init__.py | 1 + fintoc/managers/checkout_sessions_manager.py | 15 ++++++++ fintoc/resources/__init__.py | 1 + fintoc/resources/checkout_session.py | 7 ++++ tests/test_integration.py | 36 ++++++++++++++++++++ 6 files changed, 62 insertions(+) create mode 100644 fintoc/managers/checkout_sessions_manager.py create mode 100644 fintoc/resources/checkout_session.py diff --git a/fintoc/core.py b/fintoc/core.py index 3cd59ad..067ab22 100644 --- a/fintoc/core.py +++ b/fintoc/core.py @@ -7,6 +7,7 @@ from fintoc.managers import ( AccountsManager, ChargesManager, + CheckoutSessionsManager, InvoicesManager, LinksManager, PaymentIntentsManager, @@ -41,6 +42,7 @@ def __init__(self, api_key, api_version=None, jws_private_key=None): jws_private_key=jws_private_key, ) self.charges = ChargesManager("/v1/charges", self._client) + self.checkout_sessions = CheckoutSessionsManager("/v1/checkout_sessions", self._client) self.links = LinksManager("/v1/links", self._client) self.payment_intents = PaymentIntentsManager( "/v1/payment_intents", self._client diff --git a/fintoc/managers/__init__.py b/fintoc/managers/__init__.py index fb7eb39..fe31b83 100644 --- a/fintoc/managers/__init__.py +++ b/fintoc/managers/__init__.py @@ -2,6 +2,7 @@ from .accounts_manager import AccountsManager from .charges_manager import ChargesManager +from .checkout_sessions_manager import CheckoutSessionsManager from .invoices_manager import InvoicesManager from .links_manager import LinksManager from .movements_manager import MovementsManager diff --git a/fintoc/managers/checkout_sessions_manager.py b/fintoc/managers/checkout_sessions_manager.py new file mode 100644 index 0000000..a0793e5 --- /dev/null +++ b/fintoc/managers/checkout_sessions_manager.py @@ -0,0 +1,15 @@ +"""Module to hold the checkout sessions manager.""" + +from fintoc.mixins import ManagerMixin + + +class CheckoutSessionsManager(ManagerMixin): + """Represents a checkout sessions manager.""" + + resource = "checkout_session" + methods = ["create", "get", "expire"] + + def _expire(self, identifier, **kwargs): + """Expire a checkout session.""" + path = f"{self._build_path(identifier=identifier, **kwargs)}/expire" + return self._create(path_=path, **kwargs) \ No newline at end of file diff --git a/fintoc/resources/__init__.py b/fintoc/resources/__init__.py index e66fa48..1074e61 100644 --- a/fintoc/resources/__init__.py +++ b/fintoc/resources/__init__.py @@ -3,6 +3,7 @@ from .account import Account from .balance import Balance from .charge import Charge +from .checkout_session import CheckoutSession from .generic_fintoc_resource import GenericFintocResource from .income import Income from .institution import Institution diff --git a/fintoc/resources/checkout_session.py b/fintoc/resources/checkout_session.py new file mode 100644 index 0000000..f513ddd --- /dev/null +++ b/fintoc/resources/checkout_session.py @@ -0,0 +1,7 @@ +"""Module to hold the CheckoutSession resource.""" + +from fintoc.mixins import ResourceMixin + + +class CheckoutSession(ResourceMixin): + """Represents a Fintoc CheckoutSession.""" \ No newline at end of file diff --git a/tests/test_integration.py b/tests/test_integration.py index 858564b..9dcc839 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -690,6 +690,42 @@ def test_v2_simulate_receive_transfer(self): assert transfer.json.currency == currency assert transfer.json.account_number_id == account_number_id + def test_checkout_session_create(self): + """Test creating a checkout session.""" + checkout_session_data = { + "amount": 5000, + "currency": "CLP", + "success_url": "https://example.com/success", + "cancel_url": "https://example.com/cancel", + } + + checkout_session = self.fintoc.checkout_sessions.create(**checkout_session_data) + + assert checkout_session.method == "post" + assert checkout_session.url == "v1/checkout_sessions" + assert checkout_session.json.amount == checkout_session_data["amount"] + assert checkout_session.json.currency == checkout_session_data["currency"] + assert checkout_session.json.success_url == checkout_session_data["success_url"] + assert checkout_session.json.cancel_url == checkout_session_data["cancel_url"] + + def test_checkout_session_get(self): + """Test getting a specific checkout session.""" + checkout_session_id = "test_checkout_session_id" + + checkout_session = self.fintoc.checkout_sessions.get(checkout_session_id) + + assert checkout_session.method == "get" + assert checkout_session.url == f"v1/checkout_sessions/{checkout_session_id}" + + def test_checkout_session_expire(self): + """Test expiring a checkout session.""" + checkout_session_id = "test_checkout_session_id" + + result = self.fintoc.checkout_sessions.expire(checkout_session_id) + + assert result.method == "post" + assert result.url == f"v1/checkout_sessions/{checkout_session_id}/expire" + if __name__ == "__main__": pytest.main() From 53dedc6fdd1ce6b9b0e5af2e4f49b1d09f1414b1 Mon Sep 17 00:00:00 2001 From: Lukas Zorich Date: Sun, 15 Jun 2025 00:48:00 -0600 Subject: [PATCH 2/3] fix: checkout session expire path --- fintoc/core.py | 4 +++- fintoc/managers/checkout_sessions_manager.py | 4 ++-- fintoc/resources/checkout_session.py | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fintoc/core.py b/fintoc/core.py index 067ab22..f49bd85 100644 --- a/fintoc/core.py +++ b/fintoc/core.py @@ -42,7 +42,9 @@ def __init__(self, api_key, api_version=None, jws_private_key=None): jws_private_key=jws_private_key, ) self.charges = ChargesManager("/v1/charges", self._client) - self.checkout_sessions = CheckoutSessionsManager("/v1/checkout_sessions", self._client) + self.checkout_sessions = CheckoutSessionsManager( + "/v1/checkout_sessions", self._client + ) self.links = LinksManager("/v1/links", self._client) self.payment_intents = PaymentIntentsManager( "/v1/payment_intents", self._client diff --git a/fintoc/managers/checkout_sessions_manager.py b/fintoc/managers/checkout_sessions_manager.py index a0793e5..f5ac341 100644 --- a/fintoc/managers/checkout_sessions_manager.py +++ b/fintoc/managers/checkout_sessions_manager.py @@ -11,5 +11,5 @@ class CheckoutSessionsManager(ManagerMixin): def _expire(self, identifier, **kwargs): """Expire a checkout session.""" - path = f"{self._build_path(identifier=identifier, **kwargs)}/expire" - return self._create(path_=path, **kwargs) \ No newline at end of file + path = f"{self._build_path(**kwargs)}/{identifier}/expire" + return self._create(path_=path, **kwargs) diff --git a/fintoc/resources/checkout_session.py b/fintoc/resources/checkout_session.py index f513ddd..a9e345b 100644 --- a/fintoc/resources/checkout_session.py +++ b/fintoc/resources/checkout_session.py @@ -4,4 +4,4 @@ class CheckoutSession(ResourceMixin): - """Represents a Fintoc CheckoutSession.""" \ No newline at end of file + """Represents a Fintoc CheckoutSession.""" From d14f7432b0c49c056b0943aaf18c9b95a487c073 Mon Sep 17 00:00:00 2001 From: Lukas Zorich Date: Mon, 16 Jun 2025 18:09:01 -0600 Subject: [PATCH 3/3] pre-release: prepare 2.8.0 release --- fintoc/version.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fintoc/version.py b/fintoc/version.py index 6b0f73c..88e5e44 100644 --- a/fintoc/version.py +++ b/fintoc/version.py @@ -1,4 +1,4 @@ """Module to hold the version utilities.""" -version_info = (2, 7, 0) +version_info = (2, 8, 0) __version__ = ".".join([str(x) for x in version_info]) diff --git a/pyproject.toml b/pyproject.toml index 3bca206..05b7ce4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fintoc" -version = "2.7.0" +version = "2.8.0" description = "The official Python client for the Fintoc API." authors = ["Daniel Leal ", "Nebil Kawas "] maintainers = ["Daniel Leal "]