Skip to content

Commit

Permalink
[BE] allow deleting multiple coupons
Browse files Browse the repository at this point in the history
  • Loading branch information
poxip committed Aug 30, 2017
1 parent 4bf1c1d commit f5a8063
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 4 deletions.
4 changes: 0 additions & 4 deletions aa_stripe/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,6 @@ def get_readonly_fields(self, request, obj=None):

return self.readonly_fields

def has_delete_permission(self, request, obj=None):
# allow deleting single object, but disable bulk delete (bulk delete does not call models' .delete() method)
return bool(obj)


class StripeSubscriptionAdmin(ReadOnly):
list_display = (
Expand Down
16 changes: 16 additions & 0 deletions aa_stripe/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,20 @@ class Meta:
ordering = ["id"]


class StripeCouponQuerySet(models.query.QuerySet):
def delete(self):
# StripeCoupon.delete must be executed (along with post_save)
for obj in self:
obj.delete()

return 0, {self.model._meta.label: 0}


class StripeCouponManager(models.Manager):
def get_queryset(self):
return StripeCouponQuerySet(self.model, using=self._db)


class StripeCoupon(StripeBasicModel):
# fields that are fetched from Stripe API
STRIPE_FIELDS = {
Expand Down Expand Up @@ -140,6 +154,8 @@ class StripeCoupon(StripeBasicModel):
is_deleted = models.BooleanField(default=False)
is_created_at_stripe = models.BooleanField(default=False)

objects = StripeCouponManager()

def __init__(self, *args, **kwargs):
super(StripeCoupon, self).__init__(*args, **kwargs)
self._previous_is_deleted = self.is_deleted
Expand Down
9 changes: 9 additions & 0 deletions tests/test_coupons.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import time
from datetime import datetime

import mock
import requests_mock
import simplejson as json
from django.contrib.auth import get_user_model
Expand Down Expand Up @@ -122,6 +123,14 @@ def test_delete(self):
coupon.refresh_from_db()
self.assertTrue(coupon.is_deleted)

with mock.patch("aa_stripe.models.StripeCoupon.delete") as mocked_delete:
# also test the overriden queryset's delete
coupon2 = self._create_coupon(coupon_id="CPON2")
coupon3 = self._create_coupon(coupon_id="CPON3")
result = StripeCoupon.objects.filter(pk__in=[coupon2.pk, coupon3.pk]).delete()
self.assertEqual(mocked_delete.call_count, 2)
self.assertEqual(result, (0, {"aa_stripe.StripeCoupon": 0}))

def test_admin_form(self):
# test correct creation
data = {
Expand Down

0 comments on commit f5a8063

Please sign in to comment.