From 3efde2d88ad5110c2af05f3b10f4117900e29753 Mon Sep 17 00:00:00 2001 From: Macartur Sousa Date: Mon, 2 May 2016 15:35:06 -0300 Subject: [PATCH 1/3] Adding delete user using signals MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Macartur Sousa Signed-off-by: Simião Carvalho --- colab/accounts/models.py | 7 ++++++- colab/accounts/signals.py | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/colab/accounts/models.py b/colab/accounts/models.py index e7e21486..8cfb428e 100644 --- a/colab/accounts/models.py +++ b/colab/accounts/models.py @@ -9,7 +9,7 @@ from django.utils.translation import ugettext_lazy as _ from .signals import (user_created, user_password_changed, - user_basic_info_updated) + user_basic_info_updated, delete_user) from .utils import mailman @@ -93,6 +93,11 @@ def set_password(self, raw_password): if self.pk: user_password_changed.send(User, user=self, password=raw_password) + def delete(self, using=None): + super(User, self).delete(using) + user = User.objects.filter(id=self.id) + if not user: + delete_user.send(User,user=self) # We need to have `email` field set as unique but Django does not # support field overriding (at least not until 1.6). diff --git a/colab/accounts/signals.py b/colab/accounts/signals.py index d1f0a186..af478524 100644 --- a/colab/accounts/signals.py +++ b/colab/accounts/signals.py @@ -5,3 +5,4 @@ user_created = Signal(providing_args=['user', 'password']) user_password_changed = Signal(providing_args=['user', 'password']) user_basic_info_updated = Signal(providing_args=['user', 'update_email']) +delete_user = Signal(providing_args=['user']) From b392d57bcdbeb75ca16b5f3c031cc2fdba61a64f Mon Sep 17 00:00:00 2001 From: Macartur Sousa Date: Wed, 4 May 2016 17:31:07 -0300 Subject: [PATCH 2/3] Remove emails and user from list on mailman MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Macartur Sousa Signed-off-by: Simião Carvalho --- colab/accounts/models.py | 5 ++++- colab/accounts/signals.py | 4 +--- colab/super_archives/apps.py | 4 +--- colab/super_archives/signals.py | 30 ++++++++++++------------------ 4 files changed, 18 insertions(+), 25 deletions(-) diff --git a/colab/accounts/models.py b/colab/accounts/models.py index 8cfb428e..35f632dc 100644 --- a/colab/accounts/models.py +++ b/colab/accounts/models.py @@ -94,10 +94,13 @@ def set_password(self, raw_password): user_password_changed.send(User, user=self, password=raw_password) def delete(self, using=None): + + emails = " ".join(self.emails.values_list('address', flat=True)) super(User, self).delete(using) + user = User.objects.filter(id=self.id) if not user: - delete_user.send(User,user=self) + delete_user.send(User, user=self, emails=emails) # We need to have `email` field set as unique but Django does not # support field overriding (at least not until 1.6). diff --git a/colab/accounts/signals.py b/colab/accounts/signals.py index af478524..9417b42d 100644 --- a/colab/accounts/signals.py +++ b/colab/accounts/signals.py @@ -1,8 +1,6 @@ - from django.dispatch import Signal - user_created = Signal(providing_args=['user', 'password']) user_password_changed = Signal(providing_args=['user', 'password']) user_basic_info_updated = Signal(providing_args=['user', 'update_email']) -delete_user = Signal(providing_args=['user']) +delete_user = Signal(providing_args=['user', 'emails']) diff --git a/colab/super_archives/apps.py b/colab/super_archives/apps.py index 19f36c34..db840f64 100644 --- a/colab/super_archives/apps.py +++ b/colab/super_archives/apps.py @@ -1,4 +1,3 @@ - from django.apps import AppConfig @@ -7,5 +6,4 @@ class SuperArchivesConfig(AppConfig): verbose_name = 'Super Archives' def ready(self): - pass - # from . import signals + import colab.super_archives.signals # NOQA diff --git a/colab/super_archives/signals.py b/colab/super_archives/signals.py index ba3a4f75..ffe71d27 100644 --- a/colab/super_archives/signals.py +++ b/colab/super_archives/signals.py @@ -1,23 +1,17 @@ - -from django.db.models.signals import post_save -from django.dispatch import receiver -from django.conf import settings - from .models import EmailAddress +from django.dispatch import receiver +from colab.accounts.signals import (delete_user) -@receiver(post_save, sender=settings.AUTH_USER_MODEL) -def create_email_address(sender, instance, created, **kwargs): - if not created: - return +@receiver(delete_user) +def delete_user_from_superarchive(sender, **kwargs): + pass + user = kwargs.get('user') + emails = [] - email, email_created = EmailAddress.objects.get_or_create( - address=instance.email, - defaults={ - 'real_name': instance.get_full_name(), - 'user': instance, - } - ) + if kwargs.get('emails'): + emails = kwargs.get('emails').split(' ') - email.user = instance - email.save() + for email in emails: + EmailAddress.objects.filter(address=email).first().delete() + user.update_subscription(email, []) From 4d66a5b037d919871d83b35b178dbad2d56b2bca Mon Sep 17 00:00:00 2001 From: Macartur Sousa Date: Thu, 5 May 2016 17:16:13 -0300 Subject: [PATCH 3/3] Adding tests to super_archive signals Signed-off-by: Macartur Sousa --- colab/super_archives/signals.py | 1 - colab/super_archives/tests/test_signals.py | 43 ++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 colab/super_archives/tests/test_signals.py diff --git a/colab/super_archives/signals.py b/colab/super_archives/signals.py index ffe71d27..746cf620 100644 --- a/colab/super_archives/signals.py +++ b/colab/super_archives/signals.py @@ -5,7 +5,6 @@ @receiver(delete_user) def delete_user_from_superarchive(sender, **kwargs): - pass user = kwargs.get('user') emails = [] diff --git a/colab/super_archives/tests/test_signals.py b/colab/super_archives/tests/test_signals.py new file mode 100644 index 00000000..29447d92 --- /dev/null +++ b/colab/super_archives/tests/test_signals.py @@ -0,0 +1,43 @@ +# -*- coding:utf-8 -*- + +from mock import patch + +from colab.accounts.models import User +from django.test import TestCase +from colab.super_archives.models import EmailAddress + + +class SignalsTest(TestCase): + def setUp(self): + self.user = self.create_user() + + def create_user(self): + user = User() + user.username = "USERtestCoLaB" + user.set_password("123colab4") + user.email = "usertest@colab.com.br" + user.id = 1 + user.first_name = "USERtestCoLaB" + user.last_name = "COLAB" + user.save() + + return user + + @patch.object(User, 'update_subscription') + def test_delete_user_without_email(self, update_subscription_mock): + update_subscription_mock.return_value = True + self.user.delete() + self.assertEqual(0, update_subscription_mock.call_count) + + @patch.object(User, 'update_subscription') + def test_delete_user_with_email(self, update_subscription_mock): + update_subscription_mock.return_value = True + + EmailAddress.objects.get_or_create(user=self.user, + address="usertest@colab.com.br") + EmailAddress.objects.get_or_create(user=self.user, + address="teste@gmail.com") + + self.user.delete() + self.assertEqual(2, update_subscription_mock.call_count) + self.assertEqual(0, EmailAddress.objects.count())