def test_no_email_digest_for_bots(self) -> None: RealmAuditLog.objects.all().delete() cutoff = timezone_now() - datetime.timedelta(days=5) realm = get_realm('zulip') realm.digest_emails_enabled = True realm.save() bot = do_create_user( '*****@*****.**', 'password', realm, 'some_bot', bot_type=UserProfile.DEFAULT_BOT, ) # Check that bots are not sent emails with mock.patch( 'zerver.lib.digest.queue_digest_user_ids') as queue_mock: _enqueue_emails_for_realm(realm, cutoff) num_queued_users = len(queue_mock.call_args[0][0]) assert num_queued_users >= 5 for arg in queue_mock.call_args_list: user_ids = arg[0][0] for user_id in user_ids: self.assertNotEqual(user_id, bot.id)
def test_twelve_hour_exemption(self) -> None: RealmAuditLog.objects.all().delete() realm = get_realm('zulip') cutoff = timezone_now() - datetime.timedelta(days=5) with mock.patch( 'zerver.lib.digest.queue_digest_user_ids') as queue_mock: _enqueue_emails_for_realm(realm, cutoff) users = self.active_human_users(realm) num_queued_users = len(queue_mock.call_args[0][0]) self.assertEqual(num_queued_users, len(users)) # Simulate that we have sent digests for all our users. bulk_write_realm_audit_logs(users) # Now if we run again, we won't get any users, since they will have # recent RealmAuditLog rows. with mock.patch( 'zerver.lib.digest.queue_digest_user_ids') as queue_mock: _enqueue_emails_for_realm(realm, cutoff) self.assertEqual(queue_mock.call_count, 0)
def test_inactive_users_queued_for_digest(self) -> None: UserActivityInterval.objects.all().delete() RealmAuditLog.objects.all().delete() # Turn on realm digest emails for all realms Realm.objects.update(digest_emails_enabled=True) cutoff = timezone_now() - datetime.timedelta(days=5) realm = get_realm("zulip") users = self.active_human_users(realm) # Check that all users without an a UserActivityInterval entry are considered # inactive users and get enqueued. with mock.patch( 'zerver.worker.queue_processors.bulk_handle_digest_email' ) as queue_mock: _enqueue_emails_for_realm(realm, cutoff) num_queued_users = len(queue_mock.call_args[0][0]) self.assertEqual(num_queued_users, len(users)) for user in users: last_visit = timezone_now() - datetime.timedelta(days=1) UserActivityInterval.objects.create( start=last_visit, end=last_visit, user_profile=user, ) # Now we expect no users, due to recent activity. with mock.patch( 'zerver.worker.queue_processors.bulk_handle_digest_email' ) as queue_mock: _enqueue_emails_for_realm(realm, cutoff) self.assertEqual(queue_mock.call_count, 0) # Now, backdate all our users activity. last_visit = timezone_now() - datetime.timedelta(days=7) UserActivityInterval.objects.all().update(start=last_visit, end=last_visit) with mock.patch( 'zerver.worker.queue_processors.bulk_handle_digest_email' ) as queue_mock: _enqueue_emails_for_realm(realm, cutoff) num_queued_users = len(queue_mock.call_args[0][0]) self.assertEqual(num_queued_users, len(users))