diff --git a/avatar/signals.py b/avatar/signals.py index 2ca89f8..080910e 100644 --- a/avatar/signals.py +++ b/avatar/signals.py @@ -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"]) diff --git a/avatar/views.py b/avatar/views.py index 0e4804b..4796a42 100644 --- a/avatar/views.py +++ b/avatar/views.py @@ -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: diff --git a/tests/tests.py b/tests/tests.py index e8c82f1..c80b803 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -10,7 +10,9 @@ 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 +from unittest.mock import Mock def upload_helper(o, filename): @@ -106,6 +108,8 @@ class AvatarTests(TestCase): self.test_normal_image_upload() avatar = Avatar.objects.filter(user=self.user) self.assertEqual(len(avatar), 1) + receiver = Mock() + avatar_deleted.connect(receiver) response = self.client.post(reverse('avatar_delete'), { 'choices': [avatar[0].id], }, follow=True) @@ -113,6 +117,7 @@ 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.call_count, 1) def test_delete_primary_avatar_and_new_primary(self): self.test_there_can_be_only_one_primary_avatar()