diff --git a/fintoc/core.py b/fintoc/core.py index 5182ac4..589eb44 100644 --- a/fintoc/core.py +++ b/fintoc/core.py @@ -21,8 +21,9 @@ ) from fintoc.managers.v2 import AccountNumbersManager from fintoc.managers.v2 import AccountsManager as AccountsManagerV2 +from fintoc.managers.v2 import AccountVerificationsManager +from fintoc.managers.v2 import CheckoutSessionsManager as CheckoutSessionsManagerV2 from fintoc.managers.v2 import ( - AccountVerificationsManager, CustomersManager, EntitiesManager, SimulateManager, @@ -82,3 +83,6 @@ def __init__(self, client): self.customers = CustomersManager("/v2/customers", client) self.entities = EntitiesManager("/v2/entities", client) self.simulate = SimulateManager("/v2/simulate", client) + self.checkout_sessions = CheckoutSessionsManagerV2( + "/v2/checkout_sessions", client + ) diff --git a/fintoc/managers/v2/__init__.py b/fintoc/managers/v2/__init__.py index eb4b9db..c6eef39 100644 --- a/fintoc/managers/v2/__init__.py +++ b/fintoc/managers/v2/__init__.py @@ -3,6 +3,7 @@ from .account_numbers_manager import AccountNumbersManager from .account_verifications_manager import AccountVerificationsManager from .accounts_manager import AccountsManager +from .checkout_sessions_manager import CheckoutSessionsManager from .customers_manager import CustomersManager from .entities_manager import EntitiesManager from .movements_manager import MovementsManager diff --git a/fintoc/managers/v2/checkout_sessions_manager.py b/fintoc/managers/v2/checkout_sessions_manager.py new file mode 100644 index 0000000..428b8a2 --- /dev/null +++ b/fintoc/managers/v2/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 = ["list", "get", "create", "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/v2/checkout_session.py b/fintoc/resources/v2/checkout_session.py new file mode 100644 index 0000000..7378a10 --- /dev/null +++ b/fintoc/resources/v2/checkout_session.py @@ -0,0 +1,8 @@ +# pylint: disable=duplicate-code +"""Module to hold the CheckoutSession resource.""" + +from fintoc.mixins import ResourceMixin + + +class CheckoutSession(ResourceMixin): + """Represents a Fintoc CheckoutSession.""" diff --git a/tests/test_integration.py b/tests/test_integration.py index 65ddf55..d23754a 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -906,6 +906,53 @@ def test_v2_account_movement_get(self): assert movement.method == "get" assert movement.url == f"v2/accounts/{account_id}/movements/{movement_id}" + def test_v2_checkout_session_list(self): + """Test getting all checkout sessions using v2 API.""" + checkout_sessions = list(self.fintoc.v2.checkout_sessions.list()) + + assert len(checkout_sessions) > 0 + for checkout_session in checkout_sessions: + assert checkout_session.method == "get" + assert checkout_session.url == "v2/checkout_sessions" + + def test_v2_checkout_session_create(self): + """Test creating a checkout session using v2 API.""" + checkout_session_data = { + "amount": 5000, + "currency": "CLP", + "success_url": "https://example.com/success", + "cancel_url": "https://example.com/cancel", + } + + checkout_session = self.fintoc.v2.checkout_sessions.create( + **checkout_session_data + ) + + assert checkout_session.method == "post" + assert checkout_session.url == "v2/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_v2_checkout_session_get(self): + """Test getting a specific checkout session using v2 API.""" + checkout_session_id = "test_checkout_session_id" + + checkout_session = self.fintoc.v2.checkout_sessions.get(checkout_session_id) + + assert checkout_session.method == "get" + assert checkout_session.url == f"v2/checkout_sessions/{checkout_session_id}" + + def test_v2_checkout_session_expire(self): + """Test expiring a checkout session using v2 API.""" + checkout_session_id = "test_checkout_session_id" + + result = self.fintoc.v2.checkout_sessions.expire(checkout_session_id) + + assert result.method == "post" + assert result.url == f"v2/checkout_sessions/{checkout_session_id}/expire" + if __name__ == "__main__": pytest.main()