Skip to content

Commit 4a90af0

Browse files
authored
[MPT-13824] Added journal ledger charges endpoint (#53)
Added journal ledger charges endpoint https://softwareone.atlassian.net/browse/MPT-13824
2 parents 1a591d9 + 3a9f6c8 commit 4a90af0

File tree

4 files changed

+116
-0
lines changed

4 files changed

+116
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from mpt_api_client.http import AsyncService, Service
2+
from mpt_api_client.models import Model
3+
4+
5+
class LedgerCharge(Model):
6+
"""Ledger Charge resource."""
7+
8+
9+
class LedgerChargesServiceConfig:
10+
"""Ledger Charges service configuration."""
11+
12+
_endpoint = "/public/v1/billing/ledgers/{ledger_id}/charges"
13+
_model_class = LedgerCharge
14+
_collection_key = "data"
15+
16+
17+
class LedgerChargesService(
18+
Service[LedgerCharge],
19+
LedgerChargesServiceConfig,
20+
):
21+
"""Ledger Charges service."""
22+
23+
24+
class AsyncLedgerChargesService(
25+
AsyncService[LedgerCharge],
26+
LedgerChargesServiceConfig,
27+
):
28+
"""Async Ledger Charges service."""

mpt_api_client/resources/billing/ledgers.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
CreateMixin,
55
)
66
from mpt_api_client.models import Model
7+
from mpt_api_client.resources.billing.ledger_charges import (
8+
AsyncLedgerChargesService,
9+
LedgerChargesService,
10+
)
711

812

913
class Ledger(Model):
@@ -25,10 +29,24 @@ class LedgersService(
2529
):
2630
"""Ledgers service."""
2731

32+
def charges(self, ledger_id: str) -> LedgerChargesService:
33+
"""Return ledger charges service."""
34+
return LedgerChargesService(
35+
http_client=self.http_client,
36+
endpoint_params={"ledger_id": ledger_id},
37+
)
38+
2839

2940
class AsyncLedgersService(
3041
AsyncCreateMixin[Ledger],
3142
AsyncService[Ledger],
3243
LedgersServiceConfig,
3344
):
3445
"""Async Ledgers service."""
46+
47+
def charges(self, ledger_id: str) -> AsyncLedgerChargesService:
48+
"""Return ledger charges service."""
49+
return AsyncLedgerChargesService(
50+
http_client=self.http_client,
51+
endpoint_params={"ledger_id": ledger_id},
52+
)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import pytest
2+
3+
from mpt_api_client.resources.billing.ledger_charges import (
4+
AsyncLedgerChargesService,
5+
LedgerChargesService,
6+
)
7+
8+
9+
@pytest.fixture
10+
def ledger_charges_service(http_client):
11+
return LedgerChargesService(
12+
http_client=http_client, endpoint_params={"ledger_id": "LED-0000-0001"}
13+
)
14+
15+
16+
@pytest.fixture
17+
def async_ledger_charges_service(async_http_client):
18+
return AsyncLedgerChargesService(
19+
http_client=async_http_client, endpoint_params={"ledger_id": "LED-0000-0001"}
20+
)
21+
22+
23+
def test_endpoint(ledger_charges_service):
24+
assert ledger_charges_service.endpoint == "/public/v1/billing/ledgers/LED-0000-0001/charges"
25+
26+
27+
def test_async_endpoint(async_ledger_charges_service):
28+
assert (
29+
async_ledger_charges_service.endpoint == "/public/v1/billing/ledgers/LED-0000-0001/charges"
30+
)
31+
32+
33+
@pytest.mark.parametrize("method", ["get"])
34+
def test_methods_present(ledger_charges_service, method):
35+
assert hasattr(ledger_charges_service, method)
36+
37+
38+
@pytest.mark.parametrize("method", ["get"])
39+
def test_async_methods_present(async_ledger_charges_service, method):
40+
assert hasattr(async_ledger_charges_service, method)

tests/resources/billing/test_ledgers.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import pytest
22

3+
from mpt_api_client.resources.billing.ledger_charges import (
4+
AsyncLedgerChargesService,
5+
LedgerChargesService,
6+
)
37
from mpt_api_client.resources.billing.ledgers import AsyncLedgersService, LedgersService
48

59

@@ -27,3 +31,29 @@ def test_mixins_present(ledgers_service, method):
2731
)
2832
def test_async_mixins_present(async_ledgers_service, method):
2933
assert hasattr(async_ledgers_service, method)
34+
35+
36+
@pytest.mark.parametrize(
37+
("service_method", "expected_service_class"),
38+
[
39+
("charges", LedgerChargesService),
40+
],
41+
)
42+
def test_property_services(ledgers_service, service_method, expected_service_class):
43+
service = getattr(ledgers_service, service_method)("LED-0000-0001")
44+
45+
assert isinstance(service, expected_service_class)
46+
assert service.endpoint_params == {"ledger_id": "LED-0000-0001"}
47+
48+
49+
@pytest.mark.parametrize(
50+
("service_method", "expected_service_class"),
51+
[
52+
("charges", AsyncLedgerChargesService),
53+
],
54+
)
55+
def test_async_property_services(async_ledgers_service, service_method, expected_service_class):
56+
service = getattr(async_ledgers_service, service_method)("LED-0000-0001")
57+
58+
assert isinstance(service, expected_service_class)
59+
assert service.endpoint_params == {"ledger_id": "LED-0000-0001"}

0 commit comments

Comments
 (0)