Skip to content

Commit 2f888d9

Browse files
authored
[MPT-13827] Added billing statement charges endpoints (#60)
Added billing statement charges endpoints https://softwareone.atlassian.net/browse/MPT-13827
2 parents 06ee5af + 9080b35 commit 2f888d9

File tree

4 files changed

+118
-0
lines changed

4 files changed

+118
-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 StatementCharge(Model):
6+
"""Statement Charge resource."""
7+
8+
9+
class StatementChargesServiceConfig:
10+
"""Statement Charges service configuration."""
11+
12+
_endpoint = "/public/v1/billing/statements/{statement_id}/charges"
13+
_model_class = StatementCharge
14+
_collection_key = "data"
15+
16+
17+
class StatementChargesService(
18+
Service[StatementCharge],
19+
StatementChargesServiceConfig,
20+
):
21+
"""Statement Charges service."""
22+
23+
24+
class AsyncStatementChargesService(
25+
AsyncService[StatementCharge],
26+
StatementChargesServiceConfig,
27+
):
28+
"""Async Statement Charges service."""

mpt_api_client/resources/billing/statements.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
from mpt_api_client.http.mixins import AsyncUpdateMixin, UpdateMixin
33
from mpt_api_client.models import Model
44
from mpt_api_client.resources.billing.mixins import AsyncIssuableMixin, IssuableMixin
5+
from mpt_api_client.resources.billing.statement_charges import (
6+
AsyncStatementChargesService,
7+
StatementChargesService,
8+
)
59

610

711
class Statement(Model):
@@ -24,6 +28,13 @@ class StatementsService(
2428
):
2529
"""Statements service."""
2630

31+
def charges(self, statement_id: str) -> StatementChargesService:
32+
"""Return statement charges service."""
33+
return StatementChargesService(
34+
http_client=self.http_client,
35+
endpoint_params={"statement_id": statement_id},
36+
)
37+
2738

2839
class AsyncStatementsService(
2940
AsyncUpdateMixin[Statement],
@@ -32,3 +43,10 @@ class AsyncStatementsService(
3243
StatementsServiceConfig,
3344
):
3445
"""Async Statements service."""
46+
47+
def charges(self, statement_id: str) -> AsyncStatementChargesService:
48+
"""Return statement charges service."""
49+
return AsyncStatementChargesService(
50+
http_client=self.http_client,
51+
endpoint_params={"statement_id": statement_id},
52+
)
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import pytest
2+
3+
from mpt_api_client.resources.billing.statement_charges import (
4+
AsyncStatementChargesService,
5+
StatementChargesService,
6+
)
7+
8+
9+
@pytest.fixture
10+
def statement_charges_service(http_client):
11+
return StatementChargesService(
12+
http_client=http_client, endpoint_params={"statement_id": "STM-0000-0001"}
13+
)
14+
15+
16+
@pytest.fixture
17+
def async_statement_charges_service(async_http_client):
18+
return AsyncStatementChargesService(
19+
http_client=async_http_client, endpoint_params={"statement_id": "STM-0000-0001"}
20+
)
21+
22+
23+
def test_endpoint(statement_charges_service):
24+
assert statement_charges_service.endpoint == (
25+
"/public/v1/billing/statements/STM-0000-0001/charges"
26+
)
27+
28+
29+
def test_async_endpoint(async_statement_charges_service):
30+
assert async_statement_charges_service.endpoint == (
31+
"/public/v1/billing/statements/STM-0000-0001/charges"
32+
)
33+
34+
35+
@pytest.mark.parametrize("method", ["get"])
36+
def test_methods_present(statement_charges_service, method):
37+
assert hasattr(statement_charges_service, method)
38+
39+
40+
@pytest.mark.parametrize("method", ["get"])
41+
def test_async_methods_present(async_statement_charges_service, method):
42+
assert hasattr(async_statement_charges_service, method)

tests/resources/billing/test_statements.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.statement_charges import (
4+
AsyncStatementChargesService,
5+
StatementChargesService,
6+
)
37
from mpt_api_client.resources.billing.statements import AsyncStatementsService, StatementsService
48

59

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

0 commit comments

Comments
 (0)