44import requests
55from django .conf import settings
66from django .test import TestCase
7- from shared .django_apps .core .tests .factories import OwnerFactory
87from freezegun import freeze_time
8+ from shared .django_apps .core .tests .factories import OwnerFactory
99from stripe import InvalidRequestError
1010
1111from codecov_auth .models import Service
@@ -287,19 +287,22 @@ def test_list_filtered_invoices_returns_emptylist_if_stripe_customer_id_is_None(
287287 invoice_list_mock .assert_not_called ()
288288 assert invoices == []
289289
290+ @patch ("services.billing.stripe.Customer.retrieve" )
290291 @patch ("services.billing.stripe.Subscription.retrieve" )
291292 @patch ("services.billing.stripe.Subscription.modify" )
292293 def test_delete_subscription_without_schedule_modifies_subscription_to_delete_at_end_of_billing_cycle_if_valid_plan (
293- self , modify_mock , retrieve_subscription_mock
294+ self , modify_mock , retrieve_subscription_mock , retrieve_customer_mock
294295 ):
295296 plan = PlanName .CODECOV_PRO_YEARLY .value
296297 stripe_subscription_id = "sub_1K77Y5GlVGuVgOrkJrLjRnne"
297298 stripe_schedule_id = None
299+ customer_id = "cus_HF6p8Zx7JdRS7A"
298300 owner = OwnerFactory (
299301 stripe_subscription_id = stripe_subscription_id ,
300302 plan = plan ,
301303 plan_activated_users = [4 , 6 , 3 ],
302304 plan_user_count = 9 ,
305+ stripe_customer_id = customer_id ,
303306 )
304307 subscription_params = {
305308 "schedule_id" : stripe_schedule_id ,
@@ -311,6 +314,12 @@ def test_delete_subscription_without_schedule_modifies_subscription_to_delete_at
311314 }
312315
313316 retrieve_subscription_mock .return_value = MockSubscription (subscription_params )
317+ retrieve_customer_mock .return_value = {
318+ "id" : "cus_123456789" ,
319+ 320+ "name" : "Test User" ,
321+ "metadata" : {},
322+ }
314323 self .stripe .delete_subscription (owner )
315324 modify_mock .assert_called_once_with (
316325 stripe_subscription_id ,
@@ -324,6 +333,7 @@ def test_delete_subscription_without_schedule_modifies_subscription_to_delete_at
324333 assert owner .plan_user_count == 9
325334
326335 @freeze_time ("2017-03-22T00:00:00" )
336+ @patch ("services.billing.stripe.Customer.retrieve" )
327337 @patch ("services.billing.stripe.Refund.create" )
328338 @patch ("services.billing.stripe.Subscription.modify" )
329339 @patch ("services.billing.stripe.Subscription.retrieve" )
@@ -334,15 +344,18 @@ def test_delete_subscription_with_schedule_releases_schedule_and_cancels_subscri
334344 retrieve_subscription_mock ,
335345 modify_mock ,
336346 create_refund_mock ,
347+ retrieve_customer_mock ,
337348 ):
338349 plan = PlanName .CODECOV_PRO_YEARLY .value
339350 stripe_subscription_id = "sub_1K77Y5GlVGuVgOrkJrLjRnne"
340351 stripe_schedule_id = "sub_sched_sch1K77Y5GlVGuVgOrkJrLjRnne"
352+ # customer_id = "cus_HF6p8Zx7JdRS7A"
341353 owner = OwnerFactory (
342354 stripe_subscription_id = stripe_subscription_id ,
343355 plan = plan ,
344356 plan_activated_users = [4 , 6 , 3 ],
345357 plan_user_count = 9 ,
358+ # stripe_customer_id=customer_id
346359 )
347360 subscription_params = {
348361 "schedule_id" : stripe_schedule_id ,
@@ -354,6 +367,12 @@ def test_delete_subscription_with_schedule_releases_schedule_and_cancels_subscri
354367 }
355368
356369 retrieve_subscription_mock .return_value = MockSubscription (subscription_params )
370+ retrieve_customer_mock .return_value = {
371+ "id" : "cus_123456789" ,
372+ 373+ "name" : "Test User" ,
374+ "metadata" : {},
375+ }
357376 self .stripe .delete_subscription (owner )
358377 schedule_release_mock .assert_called_once_with (stripe_schedule_id )
359378 modify_mock .assert_called_once_with (
@@ -376,8 +395,10 @@ def test_delete_subscription_with_schedule_releases_schedule_and_cancels_subscri
376395 @patch ("services.billing.stripe.Subscription.cancel" )
377396 @patch ("services.billing.stripe.Subscription.retrieve" )
378397 @patch ("services.billing.stripe.SubscriptionSchedule.release" )
398+ @patch ("services.billing.stripe.Customer.retrieve" )
379399 def test_delete_subscription_with_schedule_releases_schedule_and_cancels_subscription_with_grace_month_refund_if_valid_plan (
380400 self ,
401+ retrieve_customer_mock ,
381402 schedule_release_mock ,
382403 retrieve_subscription_mock ,
383404 cancel_sub_mock ,
@@ -392,11 +413,13 @@ def test_delete_subscription_with_schedule_releases_schedule_and_cancels_subscri
392413 plan = PlanName .CODECOV_PRO_YEARLY .value
393414 stripe_subscription_id = "sub_1K77Y5GlVGuVgOrkJrLjRnne"
394415 stripe_schedule_id = "sub_sched_sch1K77Y5GlVGuVgOrkJrLjRnne"
416+ customer_id = "cus_HF6p8Zx7JdRS7A"
395417 owner = OwnerFactory (
396418 stripe_subscription_id = stripe_subscription_id ,
397419 plan = plan ,
398420 plan_activated_users = [4 , 6 , 3 ],
399421 plan_user_count = 9 ,
422+ stripe_customer_id = customer_id ,
400423 )
401424 subscription_params = {
402425 "schedule_id" : stripe_schedule_id ,
@@ -414,15 +437,20 @@ def test_delete_subscription_with_schedule_releases_schedule_and_cancels_subscri
414437 }
415438
416439 retrieve_subscription_mock .return_value = MockSubscription (subscription_params )
440+ retrieve_customer_mock .return_value = {
441+ "id" : "cus_HF6p8Zx7JdRS7A" ,
442+ "metadata" : {},
443+ }
417444 self .stripe .delete_subscription (owner )
418445 schedule_release_mock .assert_called_once_with (stripe_schedule_id )
446+ retrieve_customer_mock .assert_called_once_with (owner .stripe_customer_id )
419447 cancel_sub_mock .assert_called_once_with (stripe_subscription_id )
420448 list_invoice_mock .assert_called_once_with (
421449 subscription = stripe_subscription_id , status = "paid"
422450 )
423451 self .assertEqual (create_refund_mock .call_count , 2 )
424452 modify_customer_mock .assert_called_once_with (
425- owner .stripe_customer_id , balance = 0
453+ owner .stripe_customer_id , balance = 0 , metadata = { "autorefunds_remaining" : "1" }
426454 )
427455 modify_sub_mock .assert_not_called ()
428456
@@ -433,6 +461,7 @@ def test_delete_subscription_with_schedule_releases_schedule_and_cancels_subscri
433461 assert owner .plan_user_count == 9
434462
435463 @freeze_time ("2017-03-19T00:00:00" )
464+ @patch ("services.billing.stripe.Customer.retrieve" )
436465 @patch ("services.billing.stripe.Subscription.modify" )
437466 @patch ("services.billing.stripe.Customer.modify" )
438467 @patch ("services.billing.stripe.Refund.create" )
@@ -449,18 +478,21 @@ def test_delete_subscription_with_schedule_releases_schedule_and_cancels_subscri
449478 create_refund_mock ,
450479 modify_customer_mock ,
451480 modify_sub_mock ,
481+ retrieve_customer_mock ,
452482 ):
453483 with open ("./services/tests/samples/stripe_invoice.json" ) as f :
454484 stripe_invoice_response = json .load (f )
455485 list_invoice_mock .return_value = stripe_invoice_response
456486 plan = PlanName .CODECOV_PRO_YEARLY .value
457487 stripe_subscription_id = "sub_1K77Y5GlVGuVgOrkJrLjRnne"
458488 stripe_schedule_id = "sub_sched_sch1K77Y5GlVGuVgOrkJrLjRnne"
489+ customer_id = "cus_HF6p8Zx7JdRS7A"
459490 owner = OwnerFactory (
460491 stripe_subscription_id = stripe_subscription_id ,
461492 plan = plan ,
462493 plan_activated_users = [4 , 6 , 3 ],
463494 plan_user_count = 9 ,
495+ stripe_customer_id = customer_id ,
464496 )
465497 subscription_params = {
466498 "schedule_id" : stripe_schedule_id ,
@@ -478,15 +510,20 @@ def test_delete_subscription_with_schedule_releases_schedule_and_cancels_subscri
478510 }
479511
480512 retrieve_subscription_mock .return_value = MockSubscription (subscription_params )
513+ retrieve_customer_mock .return_value = {
514+ "id" : "cus_HF6p8Zx7JdRS7A" ,
515+ "metadata" : {"autorefunds_remaining" : "1" },
516+ }
481517 self .stripe .delete_subscription (owner )
482518 schedule_release_mock .assert_called_once_with (stripe_schedule_id )
519+ retrieve_customer_mock .assert_called_once_with (owner .stripe_customer_id )
483520 cancel_sub_mock .assert_called_once_with (stripe_subscription_id )
484521 list_invoice_mock .assert_called_once_with (
485522 subscription = stripe_subscription_id , status = "paid"
486523 )
487524 self .assertEqual (create_refund_mock .call_count , 2 )
488525 modify_customer_mock .assert_called_once_with (
489- owner .stripe_customer_id , balance = 0
526+ owner .stripe_customer_id , balance = 0 , metadata = { "autorefunds_remaining" : "0" }
490527 )
491528 modify_sub_mock .assert_not_called ()
492529
0 commit comments