From 3a9f6c890832643bcfc998049c85dd2987464df0 Mon Sep 17 00:00:00 2001 From: Robert Segal Date: Fri, 26 Sep 2025 10:16:37 -0600 Subject: [PATCH] Added journal ledger charges endpoint --- .../resources/billing/ledger_charges.py | 28 +++++++++++++ mpt_api_client/resources/billing/ledgers.py | 18 +++++++++ .../resources/billing/test_ledger_charges.py | 40 +++++++++++++++++++ tests/resources/billing/test_ledgers.py | 30 ++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 mpt_api_client/resources/billing/ledger_charges.py create mode 100644 tests/resources/billing/test_ledger_charges.py diff --git a/mpt_api_client/resources/billing/ledger_charges.py b/mpt_api_client/resources/billing/ledger_charges.py new file mode 100644 index 00000000..a0de6201 --- /dev/null +++ b/mpt_api_client/resources/billing/ledger_charges.py @@ -0,0 +1,28 @@ +from mpt_api_client.http import AsyncService, Service +from mpt_api_client.models import Model + + +class LedgerCharge(Model): + """Ledger Charge resource.""" + + +class LedgerChargesServiceConfig: + """Ledger Charges service configuration.""" + + _endpoint = "/public/v1/billing/ledgers/{ledger_id}/charges" + _model_class = LedgerCharge + _collection_key = "data" + + +class LedgerChargesService( + Service[LedgerCharge], + LedgerChargesServiceConfig, +): + """Ledger Charges service.""" + + +class AsyncLedgerChargesService( + AsyncService[LedgerCharge], + LedgerChargesServiceConfig, +): + """Async Ledger Charges service.""" diff --git a/mpt_api_client/resources/billing/ledgers.py b/mpt_api_client/resources/billing/ledgers.py index 35a1a129..63e7ce70 100644 --- a/mpt_api_client/resources/billing/ledgers.py +++ b/mpt_api_client/resources/billing/ledgers.py @@ -4,6 +4,10 @@ CreateMixin, ) from mpt_api_client.models import Model +from mpt_api_client.resources.billing.ledger_charges import ( + AsyncLedgerChargesService, + LedgerChargesService, +) class Ledger(Model): @@ -25,6 +29,13 @@ class LedgersService( ): """Ledgers service.""" + def charges(self, ledger_id: str) -> LedgerChargesService: + """Return ledger charges service.""" + return LedgerChargesService( + http_client=self.http_client, + endpoint_params={"ledger_id": ledger_id}, + ) + class AsyncLedgersService( AsyncCreateMixin[Ledger], @@ -32,3 +43,10 @@ class AsyncLedgersService( LedgersServiceConfig, ): """Async Ledgers service.""" + + def charges(self, ledger_id: str) -> AsyncLedgerChargesService: + """Return ledger charges service.""" + return AsyncLedgerChargesService( + http_client=self.http_client, + endpoint_params={"ledger_id": ledger_id}, + ) diff --git a/tests/resources/billing/test_ledger_charges.py b/tests/resources/billing/test_ledger_charges.py new file mode 100644 index 00000000..233d23a3 --- /dev/null +++ b/tests/resources/billing/test_ledger_charges.py @@ -0,0 +1,40 @@ +import pytest + +from mpt_api_client.resources.billing.ledger_charges import ( + AsyncLedgerChargesService, + LedgerChargesService, +) + + +@pytest.fixture +def ledger_charges_service(http_client): + return LedgerChargesService( + http_client=http_client, endpoint_params={"ledger_id": "LED-0000-0001"} + ) + + +@pytest.fixture +def async_ledger_charges_service(async_http_client): + return AsyncLedgerChargesService( + http_client=async_http_client, endpoint_params={"ledger_id": "LED-0000-0001"} + ) + + +def test_endpoint(ledger_charges_service): + assert ledger_charges_service.endpoint == "/public/v1/billing/ledgers/LED-0000-0001/charges" + + +def test_async_endpoint(async_ledger_charges_service): + assert ( + async_ledger_charges_service.endpoint == "/public/v1/billing/ledgers/LED-0000-0001/charges" + ) + + +@pytest.mark.parametrize("method", ["get"]) +def test_methods_present(ledger_charges_service, method): + assert hasattr(ledger_charges_service, method) + + +@pytest.mark.parametrize("method", ["get"]) +def test_async_methods_present(async_ledger_charges_service, method): + assert hasattr(async_ledger_charges_service, method) diff --git a/tests/resources/billing/test_ledgers.py b/tests/resources/billing/test_ledgers.py index 03ea232b..04e0a6c5 100644 --- a/tests/resources/billing/test_ledgers.py +++ b/tests/resources/billing/test_ledgers.py @@ -1,5 +1,9 @@ import pytest +from mpt_api_client.resources.billing.ledger_charges import ( + AsyncLedgerChargesService, + LedgerChargesService, +) from mpt_api_client.resources.billing.ledgers import AsyncLedgersService, LedgersService @@ -27,3 +31,29 @@ def test_mixins_present(ledgers_service, method): ) def test_async_mixins_present(async_ledgers_service, method): assert hasattr(async_ledgers_service, method) + + +@pytest.mark.parametrize( + ("service_method", "expected_service_class"), + [ + ("charges", LedgerChargesService), + ], +) +def test_property_services(ledgers_service, service_method, expected_service_class): + service = getattr(ledgers_service, service_method)("LED-0000-0001") + + assert isinstance(service, expected_service_class) + assert service.endpoint_params == {"ledger_id": "LED-0000-0001"} + + +@pytest.mark.parametrize( + ("service_method", "expected_service_class"), + [ + ("charges", AsyncLedgerChargesService), + ], +) +def test_async_property_services(async_ledgers_service, service_method, expected_service_class): + service = getattr(async_ledgers_service, service_method)("LED-0000-0001") + + assert isinstance(service, expected_service_class) + assert service.endpoint_params == {"ledger_id": "LED-0000-0001"}