Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(minimum-commitment): Add minimum commitment #231

Merged
merged 1 commit into from
Mar 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lago_python_client/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from .invoice import InvoicePaymentStatusChange, Invoice, InvoiceMetadata, InvoiceMetadataList,\
OneOffInvoice, InvoiceFeesList, InvoiceFee
from .invoice_item import InvoiceItemResponse
from .minimum_commitment import MinimumCommitment, MinimumCommitmentResponse
from .subscription import Subscription
from .customer_usage import Metric, ChargeObject, ChargeUsage, CustomerUsageResponse
from .tax import Tax, Taxes, TaxResponse, TaxesResponse
Expand Down
28 changes: 28 additions & 0 deletions lago_python_client/models/minimum_commitment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from typing import Any, Dict, List, Optional

from lago_python_client.base_model import BaseModel

from .tax import TaxesResponse
from ..base_model import BaseResponseModel



class MinimumCommitment(BaseModel):
amount_cents: Optional[int]
invoice_display_name: Optional[str]
tax_codes: Optional[List[str]]

class MinimumCommitmentResponse(BaseResponseModel):
lago_id: str
amount_cents: int
invoice_display_name: Optional[str]
interval: str
taxes: Optional[TaxesResponse]
created_at: Optional[str]
updated_at: Optional[str]


class MinimumCommitmentOverrides(BaseModel):
amount_cents: Optional[int]
invoice_display_name: Optional[str]
tax_codes: Optional[List[str]]
4 changes: 4 additions & 0 deletions lago_python_client/models/plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from lago_python_client.base_model import BaseModel

from .charge import Charges, ChargesResponse, ChargesOverrides
from .minimum_commitment import MinimumCommitment, MinimumCommitmentResponse, MinimumCommitmentOverrides
from .tax import Taxes, TaxesResponse
from ..base_model import BaseResponseModel

Expand All @@ -19,6 +20,7 @@ class Plan(BaseModel):
pay_in_advance: Optional[bool]
bill_charges_monthly: Optional[bool]
charges: Optional[Charges]
minimum_commitment: Optional[MinimumCommitment]
tax_codes: Optional[List[str]]


Expand All @@ -36,6 +38,7 @@ class PlanResponse(BaseResponseModel):
pay_in_advance: Optional[bool]
bill_charges_monthly: Optional[bool]
charges: Optional[ChargesResponse]
minimum_commitment: Optional[MinimumCommitmentResponse]
active_subscriptions_count: int
draft_invoices_count: int
taxes: Optional[TaxesResponse]
Expand All @@ -48,4 +51,5 @@ class PlanOverrides(BaseModel):
amount_currency: Optional[str]
trial_period: Optional[float]
charges: Optional[ChargesOverrides]
minimum_commitment: Optional[MinimumCommitmentOverrides]
tax_codes: Optional[List[str]]
6 changes: 6 additions & 0 deletions tests/fixtures/plan.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@
]
}
],
"minimum_commitment": {
"lago_id": "9474537e-2070-44fe-b8ba-3a25e0aa2d8e",
"invoice_display_name": "Minimum commitment (C1)",
"amount_cents": 1000,
"interval": "weekly"
},
"taxes": [
{
"lago_id": "b7ab2926-1de8-4428-9bcd-779314ac129b",
Expand Down
8 changes: 7 additions & 1 deletion tests/fixtures/plan_index.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,13 @@
}
]
}
]
],
"minimum_commitment": {
"lago_id": "9474537e-2070-44fe-b8ba-3a25e0aa2d8e",
"invoice_display_name": "Minimum commitment (C2)",
"amount_cents": 1000,
"interval": "weekly"
}
},
{
"lago_id": "b7ab2926-1de8-4428-9bcd-779314ac1222",
Expand Down
14 changes: 12 additions & 2 deletions tests/test_plan_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from lago_python_client.client import Client
from lago_python_client.exceptions import LagoApiError
from lago_python_client.models import Plan, Charge, Charges
from lago_python_client.models import Plan, Charge, Charges, MinimumCommitment


def plan_object():
Expand All @@ -29,6 +29,11 @@ def plan_object():
)
charges = Charges(__root__=[charge])

minimum_commitment = MinimumCommitment(
amount_cents=0,
invoice_display_name='Commitment (C1)'
)

return Plan(
name='name',
invoice_display_name='invoice_display_name',
Expand All @@ -38,7 +43,8 @@ def plan_object():
description='desc',
interval='weekly',
pay_in_advance=True,
charges=charges
charges=charges,
minimum_commitment=minimum_commitment
)


Expand Down Expand Up @@ -113,6 +119,7 @@ def test_valid_create_plan_request(httpx_mock: HTTPXMock):
assert response.code == 'plan_code'
assert response.invoice_display_name == 'test plan 1'
assert response.charges.__root__[0].invoice_display_name == 'Setup'
assert response.minimum_commitment.invoice_display_name == 'Minimum commitment (C1)'


def test_valid_create_graduated_plan_request(httpx_mock: HTTPXMock):
Expand Down Expand Up @@ -145,6 +152,7 @@ def test_valid_update_plan_request(httpx_mock: HTTPXMock):
assert response.lago_id == 'b7ab2926-1de8-4428-9bcd-779314ac129b'
assert response.code == code
assert response.invoice_display_name == 'test plan 1'
assert response.minimum_commitment.invoice_display_name == 'Minimum commitment (C1)'


def test_invalid_update_plan_request(httpx_mock: HTTPXMock):
Expand All @@ -169,6 +177,7 @@ def test_valid_find_plan_request(httpx_mock: HTTPXMock):
assert response.invoice_display_name == 'test plan 1'
assert response.charges.__root__[0].charge_model == 'standard'
assert response.charges.__root__[0].min_amount_cents == 0
assert response.minimum_commitment.amount_cents == 1000


def test_invalid_find_plan_request(httpx_mock: HTTPXMock):
Expand Down Expand Up @@ -210,6 +219,7 @@ def test_valid_find_all_plan_request(httpx_mock: HTTPXMock):

assert response['plans'][0].lago_id == 'b7ab2926-1de8-4428-9bcd-779314ac1111'
assert response['plans'][0].invoice_display_name == 'test plan 1'
assert response['plans'][0].minimum_commitment.invoice_display_name == 'Minimum commitment (C2)'
assert response['plans'][0].charges.__root__[0].lago_id == '51c1e851-5be6-4343-a0ee-39a81d8b4ee1'
assert response['plans'][0].charges.__root__[0].group_properties.__root__[0].group_id == 'gfc1e851-5be6-4343-a0ee-39a81d8b4ee1'
assert response['plans'][0].charges.__root__[0].group_properties.__root__[0].values['amount'] == '0.22'
Expand Down
Loading