Skip to content

Commit 86fd9b1

Browse files
authored
fix: Some uncaught exceptions related to billing (#604)
1 parent 160c874 commit 86fd9b1

File tree

2 files changed

+52
-19
lines changed

2 files changed

+52
-19
lines changed

billing/tests/test_views.py

+27-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import time
2-
from datetime import datetime, timedelta
32
from unittest.mock import patch
43

4+
import pytest
55
import stripe
66
from django.conf import settings
77
from freezegun import freeze_time
@@ -10,6 +10,7 @@
1010
from rest_framework.reverse import reverse
1111
from rest_framework.test import APIRequestFactory, APITestCase
1212

13+
from codecov_auth.models import Owner
1314
from codecov_auth.tests.factories import OwnerFactory
1415
from core.tests.factories import RepositoryFactory
1516
from plan.constants import PlanName, TrialDaysAmount
@@ -167,8 +168,31 @@ def test_customer_subscription_deleted_deactivates_all_repos(self):
167168
}
168169
)
169170

170-
assert (
171-
self.owner.repository_set.filter(activated=True, active=True).count() == 0
171+
@patch("logging.Logger.info")
172+
def test_customer_subscription_deleted_no_customer(self, log_info_mock):
173+
self.owner.plan = "users-inappy"
174+
self.owner.plan_user_count = 20
175+
self.owner.save()
176+
177+
self._send_event(
178+
payload={
179+
"type": "customer.subscription.deleted",
180+
"data": {
181+
"object": {
182+
"id": "HUH",
183+
"customer": "nah",
184+
"plan": {"name": self.owner.plan},
185+
}
186+
},
187+
}
188+
)
189+
190+
log_info_mock.assert_called_with(
191+
"Customer Subscription Deleted - Couldn't find owner, subscription likely already deleted",
192+
extra={
193+
"stripe_subscription_id": "HUH",
194+
"stripe_customer_id": "nah",
195+
},
172196
)
173197

174198
def test_customer_created_logs_and_doesnt_crash(self):

billing/views.py

+25-16
Original file line numberDiff line numberDiff line change
@@ -62,22 +62,31 @@ def invoice_payment_failed(self, invoice: stripe.Invoice) -> None:
6262
self._log_updated(updated)
6363

6464
def customer_subscription_deleted(self, subscription: stripe.Subscription) -> None:
65-
log.info(
66-
"Customer Subscription Deleted - Setting free plan and deactivating repos for stripe customer",
67-
extra=dict(
68-
stripe_subscription_id=subscription.id,
65+
try:
66+
log.info(
67+
"Customer Subscription Deleted - Setting free plan and deactivating repos for stripe customer",
68+
extra=dict(
69+
stripe_subscription_id=subscription.id,
70+
stripe_customer_id=subscription.customer,
71+
),
72+
)
73+
owner: Owner = Owner.objects.get(
6974
stripe_customer_id=subscription.customer,
70-
),
71-
)
72-
owner: Owner = Owner.objects.get(
73-
stripe_customer_id=subscription.customer,
74-
stripe_subscription_id=subscription.id,
75-
)
76-
plan_service = PlanService(current_org=owner)
77-
plan_service.set_default_plan_data()
78-
owner.repository_set.update(active=False, activated=False)
75+
stripe_subscription_id=subscription.id,
76+
)
77+
plan_service = PlanService(current_org=owner)
78+
plan_service.set_default_plan_data()
79+
owner.repository_set.update(active=False, activated=False)
7980

80-
self._log_updated(1)
81+
self._log_updated(1)
82+
except Owner.DoesNotExist:
83+
log.info(
84+
"Customer Subscription Deleted - Couldn't find owner, subscription likely already deleted",
85+
extra=dict(
86+
stripe_subscription_id=subscription.id,
87+
stripe_customer_id=subscription.customer,
88+
),
89+
)
8190

8291
def subscription_schedule_created(
8392
self, schedule: stripe.SubscriptionSchedule
@@ -90,7 +99,7 @@ def subscription_schedule_created(
9099
extra=dict(
91100
stripe_customer_id=subscription.customer,
92101
stripe_subscription_id=subscription.id,
93-
ownerid=subscription.metadata["obo_organization"],
102+
ownerid=subscription.metadata.get("obo_organization"),
94103
plan=plan_name,
95104
quantity=subscription.quantity,
96105
),
@@ -114,7 +123,7 @@ def subscription_schedule_updated(
114123
extra=dict(
115124
stripe_customer_id=subscription.customer,
116125
stripe_subscription_id=subscription.id,
117-
ownerid=subscription.metadata["obo_organization"],
126+
ownerid=subscription.metadata.get("obo_organization"),
118127
plan=plan_name,
119128
quantity=quantity,
120129
),

0 commit comments

Comments
 (0)