diff --git a/fintoc/core.py b/fintoc/core.py index 3cd59ad..f49bd85 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,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.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..f5ac341 --- /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(**kwargs)}/{identifier}/expire" + return self._create(path_=path, **kwargs) 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..a9e345b --- /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.""" 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 "] 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()