diff --git a/mpt_api_client/resources/billing/billing.py b/mpt_api_client/resources/billing/billing.py index b61fe646..723d9ffb 100644 --- a/mpt_api_client/resources/billing/billing.py +++ b/mpt_api_client/resources/billing/billing.py @@ -1,4 +1,8 @@ from mpt_api_client.http import AsyncHTTPClient, HTTPClient +from mpt_api_client.resources.billing.credit_memos import ( + AsyncCreditMemosService, + CreditMemosService, +) from mpt_api_client.resources.billing.custom_ledgers import ( AsyncCustomLedgersService, CustomLedgersService, @@ -40,6 +44,11 @@ def custom_ledgers(self) -> CustomLedgersService: """Custom ledgers service.""" return CustomLedgersService(http_client=self.http_client) + @property + def credit_memos(self) -> CreditMemosService: + """Credit Memos service.""" + return CreditMemosService(http_client=self.http_client) + class AsyncBilling: """Billing MPT API Module.""" @@ -71,3 +80,8 @@ def invoices(self) -> AsyncInvoicesService: def custom_ledgers(self) -> AsyncCustomLedgersService: """Custom ledgers service.""" return AsyncCustomLedgersService(http_client=self.http_client) + + @property + def credit_memos(self) -> AsyncCreditMemosService: + """Credit Memos service.""" + return AsyncCreditMemosService(http_client=self.http_client) diff --git a/mpt_api_client/resources/billing/credit_memos.py b/mpt_api_client/resources/billing/credit_memos.py new file mode 100644 index 00000000..4c7ca38a --- /dev/null +++ b/mpt_api_client/resources/billing/credit_memos.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 CreditMemo(Model): + """Credit Memo resource.""" + + +class CreditMemosServiceConfig: + """Credit Memos service configuration.""" + + _endpoint = "/public/v1/billing/credit-memos" + _model_class = CreditMemo + _collection_key = "data" + + +class CreditMemosService( + CreateMixin[CreditMemo], + UpdateMixin[CreditMemo], + Service[CreditMemo], + CreditMemosServiceConfig, +): + """Credit Memos service.""" + + +class AsyncCreditMemosService( + AsyncCreateMixin[CreditMemo], + AsyncUpdateMixin[CreditMemo], + AsyncService[CreditMemo], + CreditMemosServiceConfig, +): + """Async Credit Memos service.""" diff --git a/tests/resources/billing/test_billing.py b/tests/resources/billing/test_billing.py index cfa0704d..bc79dfbe 100644 --- a/tests/resources/billing/test_billing.py +++ b/tests/resources/billing/test_billing.py @@ -1,6 +1,10 @@ import pytest from mpt_api_client.resources.billing.billing import AsyncBilling, Billing +from mpt_api_client.resources.billing.credit_memos import ( + AsyncCreditMemosService, + CreditMemosService, +) from mpt_api_client.resources.billing.custom_ledgers import ( AsyncCustomLedgersService, CustomLedgersService, @@ -29,6 +33,7 @@ def async_billing(async_http_client): ("statements", StatementsService), ("invoices", InvoicesService), ("custom_ledgers", CustomLedgersService), + ("credit_memos", CreditMemosService), ], ) def test_billing_properties(billing, property_name, expected_service_class): @@ -47,6 +52,7 @@ def test_billing_properties(billing, property_name, expected_service_class): ("statements", AsyncStatementsService), ("invoices", AsyncInvoicesService), ("custom_ledgers", AsyncCustomLedgersService), + ("credit_memos", AsyncCreditMemosService), ], ) def test_async_billing_properties(async_billing, property_name, expected_service_class): diff --git a/tests/resources/billing/test_credit_memos.py b/tests/resources/billing/test_credit_memos.py new file mode 100644 index 00000000..8f7d524c --- /dev/null +++ b/tests/resources/billing/test_credit_memos.py @@ -0,0 +1,32 @@ +import pytest + +from mpt_api_client.resources.billing.credit_memos import ( + AsyncCreditMemosService, + CreditMemosService, +) + + +@pytest.fixture +def credit_memos_service(http_client): + return CreditMemosService(http_client=http_client) + + +@pytest.fixture +def async_credit_memos_service(async_http_client): + return AsyncCreditMemosService(http_client=async_http_client) + + +@pytest.mark.parametrize( + "method", + ["get", "create", "update"], +) +def test_mixins_present(credit_memos_service, method): + assert hasattr(credit_memos_service, method) + + +@pytest.mark.parametrize( + "method", + ["get", "create", "update"], +) +def test_async_mixins_present(async_credit_memos_service, method): + assert hasattr(async_credit_memos_service, method)