Example #1
0
    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)
Example #2
0
    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)
Example #3
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))