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(python-sdk): MAX-28 - test preview allocations - unhappy path #17

Merged
merged 1 commit into from
Jan 30, 2024
Merged
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
125 changes: 124 additions & 1 deletion tests/test_subscription_components.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from advancedbilling.exceptions.component_allocation_error_exception import ComponentAllocationErrorException
from advancedbilling.models.allocate_components import AllocateComponents
from advancedbilling.models.allocation import Allocation
from advancedbilling.models.allocation_preview import AllocationPreview
from advancedbilling.models.allocation_preview_item import AllocationPreviewItem
from advancedbilling.models.component import Component
from advancedbilling.models.component_allocation_error_item import ComponentAllocationErrorItem
from advancedbilling.models.create_customer_request import CreateCustomerRequest
from advancedbilling.models.create_on_off_component import CreateOnOffComponent
from advancedbilling.models.create_or_update_product_request import CreateOrUpdateProductRequest
Expand Down Expand Up @@ -187,7 +189,6 @@ def test_preview_allocations_subscription_and_on_off_component_and_quantity_base
assert '1.0' == quantity_based_component_two_allocation.quantity

# AND

allocated_components = self.get_subscription_components_controller().allocate_components(
subscription.id,
AllocateComponents.from_dictionary({
Expand Down Expand Up @@ -226,3 +227,125 @@ def test_preview_allocations_subscription_and_on_off_component_and_quantity_base

assert quantity_based_component_two.id == allocated_quantity_based_component_two.component_id
assert allocated_quantity_based_component_two.quantity == allocated_quantity_based_component_two.quantity

self.get_subscriptions_controller().purge_subscription(subscription.id, customer.id)
self.get_customers_controller().delete_customer(customer.id)

def test_allocate_components_given_on_off_component_with_invalid_quantity_then_raises_exception_with_422_status_code(
self):
# GIVEN
product_family: ProductFamily = self.get_product_families_controller().create_product_family(
CreateProductFamilyRequest.from_dictionary(
{
"product_family": {
"name": "TestSubscriptionComponents_Product_Family_Name_2",
"description": "TestSubscriptionComponents_Product_Family_Description_2",
}
}
)
).product_family
product: Product = self.get_products_controller().create_product(
product_family.id,
CreateOrUpdateProductRequest.from_dictionary(
{
"product":
{
"name": "TestSubscriptionComponents_Product_Name_2",
"handle": "testsubscriptioncomponents_product_handle_2",
"description": "TestSubscriptionComponents_Product_Description_2",
"interval": 1,
"price_in_cents": 10,
"interval_unit": IntervalUnit.DAY
}
}
)).product
customer: Customer = self.get_customers_controller().create_customer(CreateCustomerRequest.from_dictionary(
{
"customer": {
"first_name": "TestSubscriptionComponents_Customer_FirstName_2",
"last_name": "TestSubscriptionComponents_Customer_LastName_2",
"email": "[email protected]",
"cc_emails": ["[email protected]"],
"organization": "TestSubscriptionComponents_CustomerOrganization_2",
"reference": "TestSubscriptionComponents_CustomerReference_2",
"address": "test address",
"address_2": "test address two",
"city": "Ohio",
"state": "TX",
"zip": "test zip",
"country": "US",
"phone": "+00 123 456 789",
"tax_exempt": False,
"vat_number": "test vat number",
"parent_id": None,
"locale": None
}
}
)).customer
payment_profile: CreditCardPaymentProfile = self.get_payment_profiles_controller().create_payment_profile(
CreatePaymentProfileRequest.from_dictionary(
{
"payment_profile": {
"customer_id": customer.id,
"payment_type": PaymentType.CREDIT_CARD,
"expiration_month": 12,
"expiration_year": 2027,
"full_number": "4111111111111111"
}
}
)
).payment_profile
on_off_component: Component = self.get_components_controller().create_on_off_component(
product_family.id,
CreateOnOffComponent.from_dictionary(
{
"on_off_component": {
"name": "TestSubscriptionComponents_On_Off_Component_Name_2",
'unit_price': "1.0",
"prices": [
{
"unit_price": "0.10",
"starting_quantity": "0"
}
],
}
}
)).component
subscription: Subscription = self.get_subscriptions_controller().create_subscription(
CreateSubscriptionRequest.from_dictionary(
{
"subscription": {
"product_id": product.id,
'customer_id': customer.id,
"dunning_communication_delay_enabled": False,
"payment_collection_method": "automatic",
"skip_billing_manifest_taxes": False,
"payment_profile_id": payment_profile.id,
}
}
)).subscription
# THEN
try:
self.get_subscription_components_controller().preview_allocations(
subscription.id,
AllocateComponents.from_dictionary({
"proration_upgrade_scheme": "prorate-attempt-capture",
"proration_downgrade_scheme": "no-prorate",
"allocations": [
{
"component_id": on_off_component.id,
"memo": "TestSubscriptionComponents_On_Off_Component_memo_1",
"quantity": "20"
},
]
}))
except ComponentAllocationErrorException as e:
assert 422 == e.response_code
error: ComponentAllocationErrorItem = e.errors[0]
assert on_off_component.id == error.component_id
assert "allocation" == error.kind
assert "Quantity: must be either 1 (on) or 0 (off)." == error.message
assert 'quantity' == error.on

self.get_subscriptions_controller().purge_subscription(subscription.id, customer.id)
self.get_customers_controller().delete_customer(customer.id)
Loading