Merge pull request #162 from sedlar/signal_avatar_deleted

Add avatar_deleted signal
This commit is contained in:
Grant McConnaughey 2017-12-17 10:22:31 -06:00 committed by GitHub
commit f940db8dc9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 1 deletions

View file

@ -2,3 +2,4 @@ import django.dispatch
avatar_updated = django.dispatch.Signal(providing_args=["user", "avatar"])
avatar_deleted = django.dispatch.Signal(providing_args=["user", "avatar"])

View file

@ -8,7 +8,7 @@ from django.contrib.auth.decorators import login_required
from avatar.conf import settings
from avatar.forms import PrimaryAvatarForm, DeleteAvatarForm, UploadAvatarForm
from avatar.models import Avatar
from avatar.signals import avatar_updated
from avatar.signals import avatar_updated, avatar_deleted
from avatar.utils import (get_primary_avatar, get_default_avatar_url,
invalidate_cache)
@ -136,6 +136,10 @@ def delete(request, extra_context=None, next_override=None, *args, **kwargs):
if request.method == 'POST':
if delete_avatar_form.is_valid():
ids = delete_avatar_form.cleaned_data['choices']
for a in avatars:
if six.text_type(a.id) in ids:
avatar_deleted.send(sender=Avatar, user=request.user,
avatar=a)
if six.text_type(avatar.id) in ids and avatars.count() > len(ids):
# Find the next best avatar, and set it as the new primary
for a in avatars:

View file

@ -14,9 +14,26 @@ from avatar.conf import settings
from avatar.utils import get_primary_avatar, get_user_model
from avatar.models import Avatar
from avatar.templatetags import avatar_tags
from avatar.signals import avatar_deleted
from PIL import Image
class AssertSignal:
def __init__(self):
self.signal_sent_count = 0
self.avatar = None
self.user = None
self.sender = None
self.signal = None
def __call__(self, user, avatar, sender, signal):
self.user = user
self.avatar = avatar
self.sender = sender
self.signal = signal
self.signal_sent_count += 1
def upload_helper(o, filename):
f = open(os.path.join(o.testdatapath, filename), "rb")
response = o.client.post(reverse('avatar_add'), {
@ -110,6 +127,8 @@ class AvatarTests(TestCase):
self.test_normal_image_upload()
avatar = Avatar.objects.filter(user=self.user)
self.assertEqual(len(avatar), 1)
receiver = AssertSignal()
avatar_deleted.connect(receiver)
response = self.client.post(reverse('avatar_delete'), {
'choices': [avatar[0].id],
}, follow=True)
@ -117,6 +136,10 @@ class AvatarTests(TestCase):
self.assertEqual(len(response.redirect_chain), 1)
count = Avatar.objects.filter(user=self.user).count()
self.assertEqual(count, 0)
self.assertEqual(receiver.user, self.user)
self.assertEqual(receiver.avatar, avatar[0])
self.assertEqual(receiver.sender, Avatar)
self.assertEqual(receiver.signal_sent_count, 1)
def test_delete_primary_avatar_and_new_primary(self):
self.test_there_can_be_only_one_primary_avatar()