soft_deactivation: Add helper functions for deactivating users.

This commit is contained in:
Aditya Bansal
2017-07-30 23:18:49 +05:30
committed by Tim Abbott
parent 0cd287b3f5
commit dc5510ce44
2 changed files with 74 additions and 0 deletions

View 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)

View 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)