From 5707cfccbb793d2aaa477e3257cd9518c988268d Mon Sep 17 00:00:00 2001 From: Robert Segal Date: Sat, 27 Sep 2025 15:44:07 -0600 Subject: [PATCH] Added billing manual overrides endpoints --- mpt_api_client/resources/billing/billing.py | 14 +++++++ .../resources/billing/manual_overrides.py | 38 +++++++++++++++++++ setup.cfg | 2 +- tests/resources/billing/test_billing.py | 6 +++ .../billing/test_manual_overrides.py | 32 ++++++++++++++++ 5 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 mpt_api_client/resources/billing/manual_overrides.py create mode 100644 tests/resources/billing/test_manual_overrides.py diff --git a/mpt_api_client/resources/billing/billing.py b/mpt_api_client/resources/billing/billing.py index 723d9ff..32625d0 100644 --- a/mpt_api_client/resources/billing/billing.py +++ b/mpt_api_client/resources/billing/billing.py @@ -10,6 +10,10 @@ 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.manual_overrides import ( + AsyncManualOverridesService, + ManualOverridesService, +) from mpt_api_client.resources.billing.statements import AsyncStatementsService, StatementsService @@ -49,6 +53,11 @@ def credit_memos(self) -> CreditMemosService: """Credit Memos service.""" return CreditMemosService(http_client=self.http_client) + @property + def manual_overrides(self) -> ManualOverridesService: + """Manual overrides service.""" + return ManualOverridesService(http_client=self.http_client) + class AsyncBilling: """Billing MPT API Module.""" @@ -85,3 +94,8 @@ def custom_ledgers(self) -> AsyncCustomLedgersService: def credit_memos(self) -> AsyncCreditMemosService: """Credit Memos service.""" return AsyncCreditMemosService(http_client=self.http_client) + + @property + def manual_overrides(self) -> AsyncManualOverridesService: + """Manual overrides service.""" + return AsyncManualOverridesService(http_client=self.http_client) diff --git a/mpt_api_client/resources/billing/manual_overrides.py b/mpt_api_client/resources/billing/manual_overrides.py new file mode 100644 index 0000000..21488de --- /dev/null +++ b/mpt_api_client/resources/billing/manual_overrides.py @@ -0,0 +1,38 @@ +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 ManualOverride(Model): + """Manual Override resource.""" + + +class ManualOverridesServiceConfig: + """Manual Overrides service configuration.""" + + _endpoint = "/public/v1/billing/manual-overrides" + _model_class = ManualOverride + _collection_key = "data" + + +class ManualOverridesService( + CreateMixin[ManualOverride], + UpdateMixin[ManualOverride], + Service[ManualOverride], + ManualOverridesServiceConfig, +): + """Manual Overrides service.""" + + +class AsyncManualOverridesService( + AsyncCreateMixin[ManualOverride], + AsyncUpdateMixin[ManualOverride], + AsyncService[ManualOverride], + ManualOverridesServiceConfig, +): + """Async Manual Overrides service.""" diff --git a/setup.cfg b/setup.cfg index 21c3a6d..a7b6128 100644 --- a/setup.cfg +++ b/setup.cfg @@ -32,7 +32,7 @@ extend-ignore = per-file-ignores = - mpt_api_client/resources/billing/*.py: WPS215 WPS202 + mpt_api_client/resources/billing/*.py: WPS215 WPS202 WPS214 mpt_api_client/resources/catalog/*.py: WPS110 WPS215 WPS214 mpt_api_client/resources/commerce/*.py: WPS215 mpt_api_client/rql/query_builder.py: WPS110 WPS115 WPS210 WPS214 diff --git a/tests/resources/billing/test_billing.py b/tests/resources/billing/test_billing.py index bc79dfb..798580d 100644 --- a/tests/resources/billing/test_billing.py +++ b/tests/resources/billing/test_billing.py @@ -12,6 +12,10 @@ 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.manual_overrides import ( + AsyncManualOverridesService, + ManualOverridesService, +) from mpt_api_client.resources.billing.statements import AsyncStatementsService, StatementsService @@ -34,6 +38,7 @@ def async_billing(async_http_client): ("invoices", InvoicesService), ("custom_ledgers", CustomLedgersService), ("credit_memos", CreditMemosService), + ("manual_overrides", ManualOverridesService), ], ) def test_billing_properties(billing, property_name, expected_service_class): @@ -53,6 +58,7 @@ def test_billing_properties(billing, property_name, expected_service_class): ("invoices", AsyncInvoicesService), ("custom_ledgers", AsyncCustomLedgersService), ("credit_memos", AsyncCreditMemosService), + ("manual_overrides", AsyncManualOverridesService), ], ) def test_async_billing_properties(async_billing, property_name, expected_service_class): diff --git a/tests/resources/billing/test_manual_overrides.py b/tests/resources/billing/test_manual_overrides.py new file mode 100644 index 0000000..6f9ef26 --- /dev/null +++ b/tests/resources/billing/test_manual_overrides.py @@ -0,0 +1,32 @@ +import pytest + +from mpt_api_client.resources.billing.manual_overrides import ( + AsyncManualOverridesService, + ManualOverridesService, +) + + +@pytest.fixture +def manual_overrides_service(http_client): + return ManualOverridesService(http_client=http_client) + + +@pytest.fixture +def async_manual_overrides_service(http_client): + return AsyncManualOverridesService(http_client=http_client) + + +@pytest.mark.parametrize( + "method", + ["get", "create", "update"], +) +def test_mixins_present(manual_overrides_service, method): + assert hasattr(manual_overrides_service, method) + + +@pytest.mark.parametrize( + "method", + ["get", "create", "update"], +) +def test_async_mixins_present(async_manual_overrides_service, method): + assert hasattr(async_manual_overrides_service, method)