From d8151280f50bedda04cdcdbada76c417ffdcf042 Mon Sep 17 00:00:00 2001 From: Robert Segal Date: Fri, 26 Sep 2025 19:10:26 -0600 Subject: [PATCH] Adding billing invoices endpoints --- mpt_api_client/resources/billing/billing.py | 11 +++++++ mpt_api_client/resources/billing/invoices.py | 33 ++++++++++++++++++++ tests/resources/billing/test_billing.py | 3 ++ tests/resources/billing/test_invoices.py | 32 +++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 mpt_api_client/resources/billing/invoices.py create mode 100644 tests/resources/billing/test_invoices.py diff --git a/mpt_api_client/resources/billing/billing.py b/mpt_api_client/resources/billing/billing.py index cd49681..387c485 100644 --- a/mpt_api_client/resources/billing/billing.py +++ b/mpt_api_client/resources/billing/billing.py @@ -1,4 +1,5 @@ from mpt_api_client.http import AsyncHTTPClient, HTTPClient +from mpt_api_client.resources.billing.invoices import AsyncInvoicesService, InvoicesService from mpt_api_client.resources.billing.journals import AsyncJournalsService, JournalsService from mpt_api_client.resources.billing.ledgers import AsyncLedgersService, LedgersService from mpt_api_client.resources.billing.statements import AsyncStatementsService, StatementsService @@ -25,6 +26,11 @@ def statements(self) -> StatementsService: """Statements service.""" return StatementsService(http_client=self.http_client) + @property + def invoices(self) -> InvoicesService: + """Invoices service.""" + return InvoicesService(http_client=self.http_client) + class AsyncBilling: """Billing MPT API Module.""" @@ -46,3 +52,8 @@ def ledgers(self) -> AsyncLedgersService: def statements(self) -> AsyncStatementsService: """Statements service.""" return AsyncStatementsService(http_client=self.http_client) + + @property + def invoices(self) -> AsyncInvoicesService: + """Invoices service.""" + return AsyncInvoicesService(http_client=self.http_client) diff --git a/mpt_api_client/resources/billing/invoices.py b/mpt_api_client/resources/billing/invoices.py new file mode 100644 index 0000000..a1b0692 --- /dev/null +++ b/mpt_api_client/resources/billing/invoices.py @@ -0,0 +1,33 @@ +from mpt_api_client.http import AsyncService, Service +from mpt_api_client.http.mixins import AsyncCreateMixin, AsyncUpdateMixin, CreateMixin, UpdateMixin +from mpt_api_client.models import Model + + +class Invoice(Model): + """Invoice resource.""" + + +class InvoicesServiceConfig: + """Invoices service configuration.""" + + _endpoint = "/public/v1/billing/invoices" + _model_class = Invoice + _collection_key = "data" + + +class InvoicesService( + CreateMixin[Invoice], + UpdateMixin[Invoice], + Service[Invoice], + InvoicesServiceConfig, +): + """Invoices service.""" + + +class AsyncInvoicesService( + AsyncCreateMixin[Invoice], + AsyncUpdateMixin[Invoice], + AsyncService[Invoice], + InvoicesServiceConfig, +): + """Async Invoices service.""" diff --git a/tests/resources/billing/test_billing.py b/tests/resources/billing/test_billing.py index ce21e44..07de7f0 100644 --- a/tests/resources/billing/test_billing.py +++ b/tests/resources/billing/test_billing.py @@ -1,6 +1,7 @@ import pytest from mpt_api_client.resources.billing.billing import AsyncBilling, Billing +from mpt_api_client.resources.billing.invoices import AsyncInvoicesService, InvoicesService from mpt_api_client.resources.billing.journals import AsyncJournalsService, JournalsService from mpt_api_client.resources.billing.ledgers import AsyncLedgersService, LedgersService from mpt_api_client.resources.billing.statements import AsyncStatementsService, StatementsService @@ -22,6 +23,7 @@ def async_billing(async_http_client): ("journals", JournalsService), ("ledgers", LedgersService), ("statements", StatementsService), + ("invoices", InvoicesService), ], ) def test_billing_properties(billing, property_name, expected_service_class): @@ -38,6 +40,7 @@ def test_billing_properties(billing, property_name, expected_service_class): ("journals", AsyncJournalsService), ("ledgers", AsyncLedgersService), ("statements", AsyncStatementsService), + ("invoices", AsyncInvoicesService), ], ) def test_async_billing_properties(async_billing, property_name, expected_service_class): diff --git a/tests/resources/billing/test_invoices.py b/tests/resources/billing/test_invoices.py new file mode 100644 index 0000000..2bfb217 --- /dev/null +++ b/tests/resources/billing/test_invoices.py @@ -0,0 +1,32 @@ +import pytest + +from mpt_api_client.resources.billing.invoices import ( + AsyncInvoicesService, + InvoicesService, +) + + +@pytest.fixture +def invoices_service(http_client): + return InvoicesService(http_client=http_client) + + +@pytest.fixture +def async_invoices_service(async_http_client): + return AsyncInvoicesService(http_client=async_http_client) + + +@pytest.mark.parametrize( + "method", + ["get", "create", "update"], +) +def test_mixins_present(invoices_service, method): + assert hasattr(invoices_service, method) + + +@pytest.mark.parametrize( + "method", + ["get", "create", "update"], +) +def test_async_mixins_present(async_invoices_service, method): + assert hasattr(async_invoices_service, method)