Просмотр исходного кода

Fix #1004: respect user's wish to have their account deleted, small code style tweaks

Rafał Pitoń 7 лет назад
Родитель
Сommit
7aadad2dff

+ 4 - 7
misago/users/management/commands/deletemarkedusers.py

@@ -19,16 +19,13 @@ class Command(BaseCommand):
     )
 
     def handle(self, *args, **options):
-        if not settings.MISAGO_ENABLE_DELETE_OWN_ACCOUNT:
-            self.stdout.write("Delete own account option is currently disabled.")
-
-        deleted = 0
-
+        users_deleted = 0
+        
         queryset = UserModel.objects.filter(is_deleting_account=True)
 
         for user in chunk_queryset(queryset):
             if can_delete_own_account(user, user):
                 user.delete()
-                deleted += 1
+                users_deleted += 1
 
-        self.stdout.write("Deleted users: {}".format(deleted))
+        self.stdout.write("Deleted users: {}".format(users_deleted))

+ 3 - 3
misago/users/management/commands/deleteprofilefield.py

@@ -24,7 +24,7 @@ class Command(BaseCommand):
             self.stderr.write("Specify fieldname to delete.")
             return
 
-        deleted = 0
+        fields_deleted = 0
 
         queryset = UserModel.objects.filter(
             profile_fields__has_keys=[fieldname],
@@ -34,10 +34,10 @@ class Command(BaseCommand):
             if fieldname in user.profile_fields.keys():
                 user.profile_fields.pop(fieldname)
                 user.save(update_fields=['profile_fields'])
-                deleted += 1
+                fields_deleted += 1
 
         self.stdout.write(
             '"{}" profile field has been deleted from {} users.'.format(
-                fieldname, deleted
+                fieldname, fields_deleted
             )
         )

+ 1 - 0
misago/users/models/user.py

@@ -156,6 +156,7 @@ class User(AbstractBaseUser, PermissionsMixin):
         (LIMIT_INVITES_TO_FOLLOWED, _("Users I follow")),
         (LIMIT_INVITES_TO_NOBODY, _("Nobody")),
     ]
+    
     # Note that "username" field is purely for shows.
     # When searching users by their names, always use lowercased string
     # and slug field instead that is normalized around DB engines

+ 1 - 1
misago/users/permissions/delete.py

@@ -104,7 +104,7 @@ can_delete_user = return_boolean(allow_delete_user)
 
 
 def allow_delete_own_account(user, target):
-    if not settings.MISAGO_ENABLE_DELETE_OWN_ACCOUNT:
+    if not (user.is_deleting_account or settings.MISAGO_ENABLE_DELETE_OWN_ACCOUNT):
         raise PermissionDenied(_("You can't delete your account."))
     if user.pk != target.pk:
         raise PermissionDenied(_("You can't delete other users accounts."))

+ 12 - 11
misago/users/tests/test_deletemarkedusers.py

@@ -25,6 +25,18 @@ class DeleteMarkedUsersTests(TestCase):
         with self.assertRaises(UserModel.DoesNotExist):
             UserModel.objects.get(pk=self.user.pk)
 
+    @override_settings(MISAGO_ENABLE_DELETE_OWN_ACCOUNT=False)
+    def test_delete_disabled(self):
+        """deletion respects user decision even if configuration has changed"""
+        out = StringIO()
+        call_command(deletemarkedusers.Command(), stdout=out)
+        command_output = out.getvalue().splitlines()[0].strip()
+
+        self.assertEqual(command_output, "Deleted users: 1")
+        
+        with self.assertRaises(UserModel.DoesNotExist):
+            UserModel.objects.get(pk=self.user.pk)
+            
     def test_delete_not_marked(self):
         """user has to be marked to be deletable"""
         self.user.is_deleting_account = False
@@ -63,14 +75,3 @@ class DeleteMarkedUsersTests(TestCase):
         self.assertEqual(command_output, "Deleted users: 0")
         
         UserModel.objects.get(pk=self.user.pk)
-
-    @override_settings(MISAGO_ENABLE_DELETE_OWN_ACCOUNT=False)
-    def test_delete_disabled(self):
-        """deletion is disabled"""
-        out = StringIO()
-        call_command(deletemarkedusers.Command(), stdout=out)
-        command_output = out.getvalue().splitlines()[0].strip()
-
-        self.assertEqual(command_output, "Delete own account option is currently disabled.")
-        
-        UserModel.objects.get(pk=self.user.pk)