mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 04:53:36 +00:00
tests: Add a good set of unit tests for UserActivityInterval.
This system was written years ago and has been working well the whole time, but having unit tests for it will help future developers in understanding what the intent is.
This commit is contained in:
@@ -20,6 +20,7 @@ from zerver.models import (
|
||||
Client,
|
||||
PushDeviceToken,
|
||||
UserActivity,
|
||||
UserActivityInterval,
|
||||
UserProfile,
|
||||
UserPresence,
|
||||
flush_per_request_caches,
|
||||
@@ -171,6 +172,47 @@ class UserPresenceTests(ZulipTestCase):
|
||||
self.assertEqual(json['presences'][email][client]['status'], 'active')
|
||||
self.assertEqual(json['presences'][self.example_email("hamlet")][client]['status'], 'idle')
|
||||
|
||||
def test_new_user_input(self) -> None:
|
||||
"""Mostly a test for UserActivityInterval"""
|
||||
user_profile = self.example_user("hamlet")
|
||||
self.login(self.example_email("hamlet"))
|
||||
self.assertEqual(UserActivityInterval.objects.filter(user_profile=user_profile).count(), 0)
|
||||
from django.utils.timezone import now as timezone_now
|
||||
from datetime import timedelta
|
||||
time_zero = timezone_now().replace(microsecond=0)
|
||||
with mock.patch('zerver.views.presence.timezone_now', return_value=time_zero):
|
||||
result = self.client_post("/json/users/me/presence", {'status': 'active',
|
||||
'new_user_input': 'true'})
|
||||
self.assert_json_success(result)
|
||||
self.assertEqual(UserActivityInterval.objects.filter(user_profile=user_profile).count(), 1)
|
||||
interval = UserActivityInterval.objects.get(user_profile=user_profile)
|
||||
self.assertEqual(interval.start, time_zero)
|
||||
self.assertEqual(interval.end, time_zero + UserActivityInterval.MIN_INTERVAL_LENGTH)
|
||||
|
||||
second_time = time_zero + timedelta(seconds=600)
|
||||
# Extent the interval
|
||||
with mock.patch('zerver.views.presence.timezone_now', return_value=second_time):
|
||||
result = self.client_post("/json/users/me/presence", {'status': 'active',
|
||||
'new_user_input': 'true'})
|
||||
self.assert_json_success(result)
|
||||
self.assertEqual(UserActivityInterval.objects.filter(user_profile=user_profile).count(), 1)
|
||||
interval = UserActivityInterval.objects.get(user_profile=user_profile)
|
||||
self.assertEqual(interval.start, time_zero)
|
||||
self.assertEqual(interval.end, second_time + UserActivityInterval.MIN_INTERVAL_LENGTH)
|
||||
|
||||
third_time = time_zero + timedelta(seconds=6000)
|
||||
with mock.patch('zerver.views.presence.timezone_now', return_value=third_time):
|
||||
result = self.client_post("/json/users/me/presence", {'status': 'active',
|
||||
'new_user_input': 'true'})
|
||||
self.assert_json_success(result)
|
||||
self.assertEqual(UserActivityInterval.objects.filter(user_profile=user_profile).count(), 2)
|
||||
interval = UserActivityInterval.objects.filter(user_profile=user_profile).order_by('start')[0]
|
||||
self.assertEqual(interval.start, time_zero)
|
||||
self.assertEqual(interval.end, second_time + UserActivityInterval.MIN_INTERVAL_LENGTH)
|
||||
interval = UserActivityInterval.objects.filter(user_profile=user_profile).order_by('start')[1]
|
||||
self.assertEqual(interval.start, third_time)
|
||||
self.assertEqual(interval.end, third_time + UserActivityInterval.MIN_INTERVAL_LENGTH)
|
||||
|
||||
def test_filter_presence_idle_user_ids(self) -> None:
|
||||
user_profile = self.example_user("hamlet")
|
||||
from zerver.lib.actions import filter_presence_idle_user_ids
|
||||
|
||||
Reference in New Issue
Block a user