Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 49f2af8

Browse files
committed
clean up the logic for update plan
1 parent 99a63e1 commit 49f2af8

File tree

2 files changed

+24
-19
lines changed

2 files changed

+24
-19
lines changed

api/internal/tests/views/test_account_viewset.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def setUp(self):
126126
"description": "(10) users-pr-inappm",
127127
"amount": 120,
128128
"currency": "usd",
129-
"plan_name": "users-pr-inappm",
129+
"plan_name": PlanName.CODECOV_PRO_MONTHLY.value,
130130
"quantity": 1,
131131
"period": {"end": 1521326190, "start": 1518906990},
132132
}
@@ -235,7 +235,6 @@ def test_retrieve_account_gets_account_fields_when_there_are_scheduled_details(
235235
kwargs={"service": owner.service, "owner_username": owner.username}
236236
)
237237
assert response.status_code == status.HTTP_200_OK
238-
print(response.data)
239238
assert response.data == {
240239
"integration_id": owner.integration_id,
241240
"activated_student_count": 0,
@@ -250,7 +249,7 @@ def test_retrieve_account_gets_account_fields_when_there_are_scheduled_details(
250249
"plan_provider": owner.plan_provider,
251250
"plan": {
252251
"marketing_name": "Developer",
253-
"value": "users-basic",
252+
"value": PlanName.BASIC_PLAN_NAME.value,
254253
"billing_rate": None,
255254
"base_unit_price": 0,
256255
"benefits": [
@@ -489,13 +488,13 @@ def test_retrieve_account_gets_account_students(self):
489488
}
490489

491490
def test_account_with_free_user_plan(self):
492-
self.current_owner.plan = "users-free"
491+
self.current_owner.plan = PlanName.BASIC_PLAN_NAME.value
493492
self.current_owner.save()
494493
response = self._retrieve()
495494
assert response.status_code == status.HTTP_200_OK
496495
assert response.data["plan"] == {
497496
"marketing_name": "Developer",
498-
"value": "users-free",
497+
"value": PlanName.BASIC_PLAN_NAME.value,
499498
"billing_rate": None,
500499
"base_unit_price": 0,
501500
"benefits": [
@@ -507,13 +506,13 @@ def test_account_with_free_user_plan(self):
507506
}
508507

509508
def test_account_with_paid_user_plan_billed_monthly(self):
510-
self.current_owner.plan = "users-pr-inappm"
509+
self.current_owner.plan = PlanName.CODECOV_PRO_MONTHLY.value
511510
self.current_owner.save()
512511
response = self._retrieve()
513512
assert response.status_code == status.HTTP_200_OK
514513
assert response.data["plan"] == {
515514
"marketing_name": "Pro",
516-
"value": "users-pr-inappm",
515+
"value": PlanName.CODECOV_PRO_MONTHLY.value,
517516
"billing_rate": "monthly",
518517
"base_unit_price": 12,
519518
"benefits": [
@@ -1581,7 +1580,7 @@ def test_update_apply_cancellation_discount(
15811580
):
15821581
coupon_create_mock.return_value = MagicMock(id="test-coupon-id")
15831582

1584-
self.current_owner.plan = "users-pr-inappm"
1583+
self.current_owner.plan = PlanName.CODECOV_PRO_MONTHLY.value
15851584
self.current_owner.stripe_customer_id = "flsoe"
15861585
self.current_owner.stripe_subscription_id = "djfos"
15871586
self.current_owner.save()

services/billing.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -795,26 +795,32 @@ def update_plan(self, owner, desired_plan):
795795
on current state, might create a stripe checkout session and return
796796
the checkout session's ID, which is a string. Otherwise returns None.
797797
"""
798-
if desired_plan["value"] in Plan.objects.filter(paid_plan=False).values_list(
799-
"name", flat=True
800-
):
798+
try:
799+
plan = Plan.objects.get(name=desired_plan["value"])
800+
except Plan.DoesNotExist:
801+
log.warning(
802+
f"Unable to find plan {desired_plan['value']} for owner {owner.ownerid}"
803+
)
804+
return None
805+
806+
if not plan.is_active:
807+
log.warning(
808+
f"Attempted to transition to non-existent or legacy plan: "
809+
f"owner {owner.ownerid}, plan: {desired_plan}"
810+
)
811+
return None
812+
813+
if plan.paid_plan is False:
801814
if owner.stripe_subscription_id is not None:
802815
self.payment_service.delete_subscription(owner)
803816
else:
804817
plan_service = PlanService(current_org=owner)
805818
plan_service.set_default_plan_data()
806-
elif desired_plan["value"] in Plan.objects.filter(
807-
paid_plan=True, is_active=True
808-
).values_list("name", flat=True):
819+
else:
809820
if owner.stripe_subscription_id is not None:
810821
self.payment_service.modify_subscription(owner, desired_plan)
811822
else:
812823
return self.payment_service.create_checkout_session(owner, desired_plan)
813-
else:
814-
log.warning(
815-
f"Attempted to transition to non-existent or legacy plan: "
816-
f"owner {owner.ownerid}, plan: {desired_plan}"
817-
)
818824

819825
def update_payment_method(self, owner, payment_method):
820826
"""

0 commit comments

Comments
 (0)