actions.py: Clear ScheduledJobs of users in do_deactivate_{user,realm}.

This commit is contained in:
Rishi Gupta
2017-06-30 18:56:40 -07:00
committed by Tim Abbott
parent 2c10e7c0db
commit b55dce197d
3 changed files with 25 additions and 3 deletions

View File

@@ -524,6 +524,7 @@ def do_deactivate_realm(realm):
# bumped to the login screen, where they'll get a realm deactivation # bumped to the login screen, where they'll get a realm deactivation
# notice when they try to log in. # notice when they try to log in.
delete_user_sessions(user) delete_user_sessions(user)
clear_followup_emails_queue(user.email)
def do_reactivate_realm(realm): def do_reactivate_realm(realm):
# type: (Realm) -> None # type: (Realm) -> None
@@ -539,6 +540,7 @@ def do_deactivate_user(user_profile, _cascade=True):
user_profile.save(update_fields=["is_active"]) user_profile.save(update_fields=["is_active"])
delete_user_sessions(user_profile) delete_user_sessions(user_profile)
clear_followup_emails_queue(user_profile.email)
event_time = timezone_now() event_time = timezone_now()
RealmAuditLog.objects.create(realm=user_profile.realm, modified_user=user_profile, RealmAuditLog.objects.create(realm=user_profile.realm, modified_user=user_profile,

View File

@@ -1,6 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
from __future__ import print_function from __future__ import print_function
import datetime
import ujson import ujson
from django.http import HttpResponse from django.http import HttpResponse
@@ -13,10 +14,10 @@ from zerver.lib.actions import (
do_deactivate_realm, do_deactivate_realm,
) )
from zerver.lib.send_email import send_future_email
from zerver.lib.test_classes import ZulipTestCase from zerver.lib.test_classes import ZulipTestCase
from zerver.lib.test_helpers import tornado_redirected_to_list from zerver.lib.test_helpers import tornado_redirected_to_list
from zerver.models import get_realm, Realm, UserProfile from zerver.models import get_realm, Realm, UserProfile, ScheduledJob
class RealmTest(ZulipTestCase): class RealmTest(ZulipTestCase):
def assert_user_profile_cache_gets_new_name(self, user_profile, new_realm_name): def assert_user_profile_cache_gets_new_name(self, user_profile, new_realm_name):
@@ -140,6 +141,14 @@ class RealmTest(ZulipTestCase):
user = self.example_user('hamlet') user = self.example_user('hamlet')
self.assertTrue(user.realm.deactivated) self.assertTrue(user.realm.deactivated)
def test_do_deactivate_realm_clears_scheduled_jobs(self):
# type: () -> None
user = self.example_user('hamlet')
send_future_email('template_prefix', user.email, delay=datetime.timedelta(hours=1))
self.assertEqual(ScheduledJob.objects.count(), 1)
do_deactivate_realm(user.realm)
self.assertEqual(ScheduledJob.objects.count(), 0)
def test_do_deactivate_realm_on_deactived_realm(self): def test_do_deactivate_realm_on_deactived_realm(self):
# type: () -> None # type: () -> None
"""Ensure early exit is working in realm deactivation""" """Ensure early exit is working in realm deactivation"""

View File

@@ -22,10 +22,11 @@ from zerver.lib.test_runner import slow
from zerver.models import UserProfile, Recipient, \ from zerver.models import UserProfile, Recipient, \
Realm, RealmDomain, UserActivity, \ Realm, RealmDomain, UserActivity, \
get_user, get_realm, get_client, get_stream, \ get_user, get_realm, get_client, get_stream, \
Message, get_context_for_message Message, get_context_for_message, ScheduledJob
from zerver.lib.avatar import avatar_url from zerver.lib.avatar import avatar_url
from zerver.lib.email_mirror import create_missed_message_address from zerver.lib.email_mirror import create_missed_message_address
from zerver.lib.send_email import send_future_email
from zerver.lib.actions import ( from zerver.lib.actions import (
get_emails_from_user_ids, get_emails_from_user_ids,
do_deactivate_user, do_deactivate_user,
@@ -34,6 +35,8 @@ from zerver.lib.actions import (
) )
from django.conf import settings from django.conf import settings
import datetime
import os import os
import sys import sys
import time import time
@@ -339,6 +342,14 @@ class ActivateTest(ZulipTestCase):
result = self.client_post('/json/users/hamlet@zulip.com/reactivate') result = self.client_post('/json/users/hamlet@zulip.com/reactivate')
self.assert_json_error(result, 'Insufficient permission') self.assert_json_error(result, 'Insufficient permission')
def test_clear_scheduled_jobs(self):
# type: () -> None
user = self.example_user('hamlet')
send_future_email('template_prefix', user.email, delay=datetime.timedelta(hours=1))
self.assertEqual(ScheduledJob.objects.count(), 1)
do_deactivate_user(user)
self.assertEqual(ScheduledJob.objects.count(), 0)
class GetProfileTest(ZulipTestCase): class GetProfileTest(ZulipTestCase):
def common_update_pointer(self, email, pointer): def common_update_pointer(self, email, pointer):