2016-09-15 18:45:04 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
2019-07-15 21:29:47 +02:00
|
|
|
from django.conf import settings
|
2016-09-15 18:45:04 +02:00
|
|
|
|
2019-07-15 21:29:47 +02:00
|
|
|
from zerver.lib.actions import internal_send_private_message
|
2017-09-27 19:43:28 +02:00
|
|
|
from zerver.lib.test_classes import ZulipTestCase
|
|
|
|
from zerver.lib.test_helpers import message_stream_count, most_recent_message
|
2019-07-15 21:29:47 +02:00
|
|
|
from zerver.models import get_realm, get_user, get_system_bot, UserProfile
|
2017-09-27 19:43:28 +02:00
|
|
|
|
2016-09-15 18:45:04 +02:00
|
|
|
import ujson
|
|
|
|
|
|
|
|
class TutorialTests(ZulipTestCase):
|
2017-11-05 10:51:25 +01:00
|
|
|
def setUp(self) -> None:
|
2017-09-27 19:43:28 +02:00
|
|
|
# This emulates the welcome message sent by the welcome bot to hamlet@zulip.com
|
|
|
|
# This is only a quick fix - ideally, we would have this message sent by the initialization
|
|
|
|
# code in populate_db.py
|
2019-07-15 21:29:47 +02:00
|
|
|
user = self.example_user('hamlet')
|
|
|
|
welcome_bot = get_system_bot(settings.WELCOME_BOT)
|
2017-09-27 19:43:28 +02:00
|
|
|
content = 'Shortened welcome message.'
|
2019-07-15 21:29:47 +02:00
|
|
|
internal_send_private_message(welcome_bot.realm, welcome_bot, user, content)
|
2017-09-27 19:43:28 +02:00
|
|
|
|
2017-11-05 10:51:25 +01:00
|
|
|
def test_tutorial_status(self) -> None:
|
2017-05-24 02:42:31 +02:00
|
|
|
email = self.example_email('hamlet')
|
2016-09-15 18:45:04 +02:00
|
|
|
self.login(email)
|
|
|
|
|
|
|
|
cases = [
|
|
|
|
('started', UserProfile.TUTORIAL_STARTED),
|
|
|
|
('finished', UserProfile.TUTORIAL_FINISHED),
|
|
|
|
]
|
|
|
|
for incoming_status, expected_db_status in cases:
|
2017-10-04 21:37:37 +02:00
|
|
|
params = dict(status=ujson.dumps(incoming_status))
|
2017-10-09 22:55:38 +02:00
|
|
|
result = self.client_post('/json/users/me/tutorial_status', params)
|
2016-09-15 18:45:04 +02:00
|
|
|
self.assert_json_success(result)
|
2017-05-24 02:42:31 +02:00
|
|
|
user = self.example_user('hamlet')
|
2016-09-15 18:45:04 +02:00
|
|
|
self.assertEqual(user.tutorial_status, expected_db_status)
|
2017-09-27 19:43:28 +02:00
|
|
|
|
2017-11-05 10:51:25 +01:00
|
|
|
def test_single_response_to_pm(self) -> None:
|
2017-09-27 19:43:28 +02:00
|
|
|
realm = get_realm('zulip')
|
|
|
|
user_email = 'hamlet@zulip.com'
|
|
|
|
bot_email = 'welcome-bot@zulip.com'
|
|
|
|
content = 'whatever'
|
|
|
|
self.login(user_email)
|
2017-10-28 18:30:14 +02:00
|
|
|
self.send_personal_message(user_email, bot_email, content)
|
2017-09-27 19:43:28 +02:00
|
|
|
user = get_user(user_email, realm)
|
|
|
|
user_messages = message_stream_count(user)
|
|
|
|
expected_response = ("Congratulations on your first reply! :tada:\n\n"
|
|
|
|
"Feel free to continue using this space to practice your new messaging "
|
|
|
|
"skills. Or, try clicking on some of the stream names to your left!")
|
|
|
|
self.assertEqual(most_recent_message(user).content, expected_response)
|
|
|
|
# Welcome bot shouldn't respond to further PMs.
|
2017-10-28 18:30:14 +02:00
|
|
|
self.send_personal_message(user_email, bot_email, content)
|
2017-09-27 19:43:28 +02:00
|
|
|
self.assertEqual(message_stream_count(user), user_messages+1)
|
|
|
|
|
2017-11-05 10:51:25 +01:00
|
|
|
def test_no_response_to_group_pm(self) -> None:
|
2017-09-27 19:43:28 +02:00
|
|
|
realm = get_realm('zulip') # Assume realm is always 'zulip'
|
|
|
|
user1_email = self.example_email('hamlet')
|
|
|
|
user2_email = self.example_email('cordelia')
|
|
|
|
bot_email = self.example_email('welcome_bot')
|
|
|
|
content = "whatever"
|
|
|
|
self.login(user1_email)
|
2017-10-28 18:30:14 +02:00
|
|
|
self.send_huddle_message(user1_email, [bot_email, user2_email], content)
|
2017-09-27 19:43:28 +02:00
|
|
|
user1 = get_user(user1_email, realm)
|
|
|
|
user1_messages = message_stream_count(user1)
|
|
|
|
self.assertEqual(most_recent_message(user1).content, content)
|
|
|
|
# Welcome bot should still respond to initial PM after group PM.
|
2017-10-28 18:30:14 +02:00
|
|
|
self.send_personal_message(user1_email, bot_email, content)
|
2017-09-27 19:43:28 +02:00
|
|
|
self.assertEqual(message_stream_count(user1), user1_messages+2)
|