2020-08-07 01:09:47 +02:00
|
|
|
import orjson
|
2020-06-11 00:54:34 +02:00
|
|
|
|
|
|
|
from zerver.lib.actions import do_create_user, do_mark_hotspot_as_read
|
2017-01-24 01:48:35 +01:00
|
|
|
from zerver.lib.hotspots import ALL_HOTSPOTS, get_next_hotspots
|
|
|
|
from zerver.lib.test_classes import ZulipTestCase
|
2020-06-11 00:54:34 +02:00
|
|
|
from zerver.models import UserHotspot, UserProfile, get_realm
|
2017-01-24 01:48:35 +01:00
|
|
|
|
|
|
|
|
|
|
|
# Splitting this out, since I imagine this will eventually have most of the
|
|
|
|
# complicated hotspots logic.
|
|
|
|
class TestGetNextHotspots(ZulipTestCase):
|
2017-11-05 10:51:25 +01:00
|
|
|
def setUp(self) -> None:
|
2019-10-19 20:47:00 +02:00
|
|
|
super().setUp()
|
2017-08-31 18:20:03 +02:00
|
|
|
self.user = do_create_user(
|
2020-07-16 14:10:43 +02:00
|
|
|
'user@zulip.com',
|
|
|
|
'password',
|
|
|
|
get_realm('zulip'),
|
|
|
|
'user',
|
|
|
|
)
|
2017-08-31 18:20:03 +02:00
|
|
|
|
2017-11-05 10:51:25 +01:00
|
|
|
def test_first_hotspot(self) -> None:
|
2017-08-31 18:20:03 +02:00
|
|
|
hotspots = get_next_hotspots(self.user)
|
2017-04-15 05:50:59 +02:00
|
|
|
self.assertEqual(len(hotspots), 1)
|
2017-08-30 02:13:04 +02:00
|
|
|
self.assertEqual(hotspots[0]['name'], 'intro_reply')
|
2017-01-24 01:48:35 +01:00
|
|
|
|
2017-11-05 10:51:25 +01:00
|
|
|
def test_some_done_some_not(self) -> None:
|
2017-08-31 18:20:03 +02:00
|
|
|
do_mark_hotspot_as_read(self.user, 'intro_reply')
|
|
|
|
do_mark_hotspot_as_read(self.user, 'intro_compose')
|
|
|
|
hotspots = get_next_hotspots(self.user)
|
2017-04-15 05:50:59 +02:00
|
|
|
self.assertEqual(len(hotspots), 1)
|
2017-08-30 02:19:55 +02:00
|
|
|
self.assertEqual(hotspots[0]['name'], 'intro_streams')
|
2017-01-24 01:48:35 +01:00
|
|
|
|
2017-11-05 10:51:25 +01:00
|
|
|
def test_all_done(self) -> None:
|
2017-08-31 18:20:03 +02:00
|
|
|
self.assertNotEqual(self.user.tutorial_status, UserProfile.TUTORIAL_FINISHED)
|
2017-01-24 01:48:35 +01:00
|
|
|
for hotspot in ALL_HOTSPOTS:
|
2017-08-31 18:20:03 +02:00
|
|
|
do_mark_hotspot_as_read(self.user, hotspot)
|
|
|
|
self.assertEqual(self.user.tutorial_status, UserProfile.TUTORIAL_FINISHED)
|
|
|
|
self.assertEqual(get_next_hotspots(self.user), [])
|
2017-01-24 01:48:35 +01:00
|
|
|
|
2018-03-18 20:59:10 +01:00
|
|
|
def test_send_all(self) -> None:
|
|
|
|
with self.settings(DEVELOPMENT=True, ALWAYS_SEND_ALL_HOTSPOTS = True):
|
|
|
|
self.assertEqual(len(ALL_HOTSPOTS), len(get_next_hotspots(self.user)))
|
|
|
|
|
2017-01-24 01:48:35 +01:00
|
|
|
class TestHotspots(ZulipTestCase):
|
2017-11-05 10:51:25 +01:00
|
|
|
def test_do_mark_hotspot_as_read(self) -> None:
|
2017-05-24 05:08:49 +02:00
|
|
|
user = self.example_user('hamlet')
|
2017-08-30 02:15:32 +02:00
|
|
|
do_mark_hotspot_as_read(user, 'intro_compose')
|
2017-01-24 01:48:35 +01:00
|
|
|
self.assertEqual(list(UserHotspot.objects.filter(user=user)
|
2017-08-30 02:15:32 +02:00
|
|
|
.values_list('hotspot', flat=True)), ['intro_compose'])
|
2017-01-24 01:48:35 +01:00
|
|
|
|
2017-11-05 10:51:25 +01:00
|
|
|
def test_hotspots_url_endpoint(self) -> None:
|
2017-05-24 05:08:49 +02:00
|
|
|
user = self.example_user('hamlet')
|
2020-03-06 18:40:46 +01:00
|
|
|
self.login_user(user)
|
2017-01-24 01:48:35 +01:00
|
|
|
result = self.client_post('/json/users/me/hotspots',
|
2020-08-07 01:09:47 +02:00
|
|
|
{'hotspot': orjson.dumps('intro_reply').decode()})
|
2017-01-24 01:48:35 +01:00
|
|
|
self.assert_json_success(result)
|
|
|
|
self.assertEqual(list(UserHotspot.objects.filter(user=user)
|
2017-08-30 02:13:04 +02:00
|
|
|
.values_list('hotspot', flat=True)), ['intro_reply'])
|
2017-03-29 23:04:25 +02:00
|
|
|
|
|
|
|
result = self.client_post('/json/users/me/hotspots',
|
2020-08-07 01:09:47 +02:00
|
|
|
{'hotspot': orjson.dumps('invalid').decode()})
|
2017-03-29 23:04:25 +02:00
|
|
|
self.assert_json_error(result, "Unknown hotspot: invalid")
|
|
|
|
self.assertEqual(list(UserHotspot.objects.filter(user=user)
|
2017-08-30 02:13:04 +02:00
|
|
|
.values_list('hotspot', flat=True)), ['intro_reply'])
|