mirror of
https://github.com/zulip/zulip.git
synced 2025-11-15 19:31:58 +00:00
soft_deactivation: Add helper functions for deactivating users.
This commit is contained in:
committed by
Tim Abbott
parent
0cd287b3f5
commit
dc5510ce44
35
zerver/lib/soft_deactivation.py
Normal file
35
zerver/lib/soft_deactivation.py
Normal file
@@ -0,0 +1,35 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from django.db import transaction
|
||||
|
||||
from zerver.models import UserProfile, UserMessage, RealmAuditLog
|
||||
|
||||
from django.utils.timezone import now as timezone_now
|
||||
|
||||
from typing import List
|
||||
|
||||
def do_soft_deactivate_user(user_profile):
|
||||
# type: (UserProfile) -> None
|
||||
user_profile.last_active_message_id = UserMessage.objects.filter(
|
||||
user_profile=user_profile).order_by(
|
||||
'-message__id')[0].message_id
|
||||
user_profile.long_term_idle = True
|
||||
user_profile.save(update_fields=[
|
||||
'long_term_idle',
|
||||
'last_active_message_id'])
|
||||
|
||||
def do_soft_deactivate_users(users):
|
||||
# type: (List[UserProfile]) -> None
|
||||
with transaction.atomic():
|
||||
realm_logs = []
|
||||
for user in users:
|
||||
do_soft_deactivate_user(user)
|
||||
event_time = timezone_now()
|
||||
log = RealmAuditLog(
|
||||
realm=user.realm,
|
||||
modified_user=user,
|
||||
event_type='user_soft_deactivated',
|
||||
event_time=event_time
|
||||
)
|
||||
realm_logs.append(log)
|
||||
RealmAuditLog.objects.bulk_create(realm_logs)
|
||||
39
zerver/tests/test_soft_deactivation.py
Normal file
39
zerver/tests/test_soft_deactivation.py
Normal file
@@ -0,0 +1,39 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import absolute_import
|
||||
|
||||
from zerver.lib.soft_deactivation import (
|
||||
do_soft_deactivate_user,
|
||||
do_soft_deactivate_users
|
||||
)
|
||||
|
||||
from zerver.lib.test_classes import (
|
||||
ZulipTestCase,
|
||||
)
|
||||
|
||||
class UserSoftDeactivationTests(ZulipTestCase):
|
||||
|
||||
def test_do_soft_deactivate_user(self):
|
||||
# type: () -> None
|
||||
user = self.example_user('hamlet')
|
||||
self.assertFalse(user.long_term_idle)
|
||||
|
||||
do_soft_deactivate_user(user)
|
||||
|
||||
user.refresh_from_db()
|
||||
self.assertTrue(user.long_term_idle)
|
||||
|
||||
def test_do_soft_deactivate_users(self):
|
||||
# type: () -> None
|
||||
users = [
|
||||
self.example_user('hamlet'),
|
||||
self.example_user('iago'),
|
||||
self.example_user('cordelia'),
|
||||
]
|
||||
for user in users:
|
||||
self.assertFalse(user.long_term_idle)
|
||||
|
||||
do_soft_deactivate_users(users)
|
||||
|
||||
for user in users:
|
||||
user.refresh_from_db()
|
||||
self.assertTrue(user.long_term_idle)
|
||||
Reference in New Issue
Block a user