do_delete_user: Preserve date_joined value of the user.

This commit is contained in:
Mateusz Mandera
2021-12-29 18:14:40 +01:00
committed by Tim Abbott
parent 444bb6d0e9
commit 30ccb76e19
3 changed files with 15 additions and 3 deletions

View File

@@ -1215,6 +1215,7 @@ def do_delete_user(user_profile: UserProfile) -> None:
) )
user_id = user_profile.id user_id = user_profile.id
realm = user_profile.realm realm = user_profile.realm
date_joined = user_profile.date_joined
personal_recipient = user_profile.recipient personal_recipient = user_profile.recipient
with transaction.atomic(): with transaction.atomic():
@@ -1232,6 +1233,7 @@ def do_delete_user(user_profile: UserProfile) -> None:
full_name=f"Deleted User {user_id}", full_name=f"Deleted User {user_id}",
active=False, active=False,
is_mirror_dummy=True, is_mirror_dummy=True,
force_date_joined=date_joined,
) )
subs_to_recreate = [ subs_to_recreate = [
Subscription( Subscription(

View File

@@ -1,3 +1,4 @@
from datetime import datetime
from typing import Optional, Union from typing import Optional, Union
import orjson import orjson
@@ -85,8 +86,13 @@ def create_user_profile(
tutorial_status: str = UserProfile.TUTORIAL_WAITING, tutorial_status: str = UserProfile.TUTORIAL_WAITING,
enter_sends: bool = False, enter_sends: bool = False,
force_id: Optional[int] = None, force_id: Optional[int] = None,
force_date_joined: Optional[datetime] = None,
) -> UserProfile: ) -> UserProfile:
now = timezone_now() if force_date_joined is None:
date_joined = timezone_now()
else:
date_joined = force_date_joined
email = UserManager.normalize_email(email) email = UserManager.normalize_email(email)
extra_kwargs = {} extra_kwargs = {}
@@ -97,8 +103,8 @@ def create_user_profile(
is_staff=False, is_staff=False,
is_active=active, is_active=active,
full_name=full_name, full_name=full_name,
last_login=now, last_login=date_joined,
date_joined=now, date_joined=date_joined,
realm=realm, realm=realm,
is_bot=bool(bot_type), is_bot=bool(bot_type),
bot_type=bot_type, bot_type=bot_type,
@@ -141,6 +147,7 @@ def create_user(
default_all_public_streams: Optional[bool] = None, default_all_public_streams: Optional[bool] = None,
source_profile: Optional[UserProfile] = None, source_profile: Optional[UserProfile] = None,
force_id: Optional[int] = None, force_id: Optional[int] = None,
force_date_joined: Optional[datetime] = None,
enable_marketing_emails: Optional[bool] = None, enable_marketing_emails: Optional[bool] = None,
) -> UserProfile: ) -> UserProfile:
user_profile = create_user_profile( user_profile = create_user_profile(
@@ -155,6 +162,7 @@ def create_user(
tos_version, tos_version,
timezone, timezone,
force_id=force_id, force_id=force_id,
force_date_joined=force_date_joined,
) )
user_profile.avatar_source = avatar_source user_profile.avatar_source = avatar_source
user_profile.timezone = timezone user_profile.timezone = timezone

View File

@@ -2039,6 +2039,7 @@ class DeleteUserTest(ZulipTestCase):
hamlet = self.example_user("hamlet") hamlet = self.example_user("hamlet")
hamlet_personal_recipient = hamlet.recipient hamlet_personal_recipient = hamlet.recipient
hamlet_user_id = hamlet.id hamlet_user_id = hamlet.id
hamlet_date_joined = hamlet.date_joined
self.send_personal_message(cordelia, hamlet) self.send_personal_message(cordelia, hamlet)
self.send_personal_message(hamlet, cordelia) self.send_personal_message(hamlet, cordelia)
@@ -2072,6 +2073,7 @@ class DeleteUserTest(ZulipTestCase):
) )
self.assertEqual(replacement_dummy_user.is_mirror_dummy, True) self.assertEqual(replacement_dummy_user.is_mirror_dummy, True)
self.assertEqual(replacement_dummy_user.is_active, False) self.assertEqual(replacement_dummy_user.is_active, False)
self.assertEqual(replacement_dummy_user.date_joined, hamlet_date_joined)
self.assertEqual(Message.objects.filter(id__in=personal_message_ids_to_hamlet).count(), 0) self.assertEqual(Message.objects.filter(id__in=personal_message_ids_to_hamlet).count(), 0)
# Huddle messages from hamlet should have been deleted, but messages of other participants should # Huddle messages from hamlet should have been deleted, but messages of other participants should