zulip/zerver/tests/test_realm_emoji.py

186 lines
7.9 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
from zerver.lib.actions import get_realm, check_add_realm_emoji
from zerver.lib.test_classes import ZulipTestCase
from zerver.lib.test_helpers import get_test_image_file, get_user
from zerver.models import RealmEmoji
class RealmEmojiTest(ZulipTestCase):
def test_list(self) -> None:
email = self.example_email('iago')
self.login(email)
realm = get_realm('zulip')
check_add_realm_emoji(realm, "my_emoji", "my_emoji")
2016-07-28 00:38:45 +02:00
result = self.client_get("/json/realm/emoji")
self.assert_json_success(result)
self.assertEqual(200, result.status_code)
self.assertEqual(len(result.json()["emoji"]), 2)
def test_list_no_author(self) -> None:
email = self.example_email('iago')
self.login(email)
realm = get_realm('zulip')
2017-07-22 21:10:45 +02:00
RealmEmoji.objects.create(realm=realm, name='my_emoji', file_name='my_emoji')
result = self.client_get("/json/realm/emoji")
self.assert_json_success(result)
2017-08-17 08:43:38 +02:00
content = result.json()
self.assertEqual(len(content["emoji"]), 2)
2017-07-22 21:10:45 +02:00
self.assertIsNone(content["emoji"]['my_emoji']['author'])
def test_list_admins_only(self) -> None:
email = self.example_email('othello')
self.login(email)
realm = get_realm('zulip')
realm.add_emoji_by_admins_only = True
realm.save()
2017-07-22 21:10:45 +02:00
check_add_realm_emoji(realm, 'my_emoji', 'my_emoji')
result = self.client_get("/json/realm/emoji")
self.assert_json_success(result)
2017-08-17 08:43:38 +02:00
content = result.json()
self.assertEqual(len(content["emoji"]), 2)
2017-07-22 21:10:45 +02:00
self.assertIsNone(content["emoji"]['my_emoji']['author'])
def test_upload(self) -> None:
email = self.example_email('iago')
self.login(email)
with get_test_image_file('img.png') as fp1:
emoji_data = {'f1': fp1}
result = self.client_post('/json/realm/emoji/my_emoji', info=emoji_data)
self.assert_json_success(result)
self.assertEqual(200, result.status_code)
emoji = RealmEmoji.objects.get(name="my_emoji")
self.assertEqual(emoji.author.email, email)
2016-07-28 00:38:45 +02:00
result = self.client_get("/json/realm/emoji")
2017-08-17 08:43:38 +02:00
content = result.json()
self.assert_json_success(result)
self.assertEqual(len(content["emoji"]), 2)
2016-12-20 10:51:28 +01:00
self.assertIn('author', content["emoji"]['my_emoji'])
self.assertEqual(
content["emoji"]['my_emoji']['author']['email'], email)
realm_emoji = RealmEmoji.objects.get(name='my_emoji')
file_name = realm_emoji.name + '.png'
self.assertEqual(
str(realm_emoji),
'<RealmEmoji(zulip): %s my_emoji False %s>' % (realm_emoji.id, file_name)
)
def test_upload_exception(self) -> None:
email = self.example_email('iago')
self.login(email)
with get_test_image_file('img.png') as fp1:
emoji_data = {'f1': fp1}
result = self.client_post('/json/realm/emoji/my_em*oji', info=emoji_data)
self.assert_json_error(result, 'Invalid characters in emoji name')
def test_upload_uppercase_exception(self) -> None:
email = self.example_email('iago')
self.login(email)
with get_test_image_file('img.png') as fp1:
emoji_data = {'f1': fp1}
result = self.client_post('/json/realm/emoji/my_EMoji', info=emoji_data)
self.assert_json_error(result, 'Invalid characters in emoji name')
def test_upload_admins_only(self) -> None:
email = self.example_email('othello')
self.login(email)
realm = get_realm('zulip')
realm.add_emoji_by_admins_only = True
realm.save()
with get_test_image_file('img.png') as fp1:
emoji_data = {'f1': fp1}
result = self.client_post('/json/realm/emoji/my_emoji', info=emoji_data)
self.assert_json_error(result, 'Must be an organization administrator')
def test_upload_anyone(self) -> None:
email = self.example_email('othello')
self.login(email)
realm = get_realm('zulip')
realm.add_emoji_by_admins_only = False
realm.save()
with get_test_image_file('img.png') as fp1:
emoji_data = {'f1': fp1}
result = self.client_post('/json/realm/emoji/my_emoji', info=emoji_data)
self.assert_json_success(result)
def test_delete(self) -> None:
email = self.example_email('iago')
self.login(email)
realm = get_realm('zulip')
check_add_realm_emoji(realm, "my_emoji", "my_emoji.png")
result = self.client_delete("/json/realm/emoji/my_emoji")
self.assert_json_success(result)
2016-07-28 00:38:45 +02:00
result = self.client_get("/json/realm/emoji")
emojis = result.json()["emoji"]
self.assert_json_success(result)
# We only mark an emoji as deactivated instead of
# removing it from the database.
self.assertEqual(len(emojis), 2)
self.assertEqual(emojis["my_emoji"]["deactivated"], True)
def test_delete_admins_only(self) -> None:
email = self.example_email('othello')
self.login(email)
realm = get_realm('zulip')
realm.add_emoji_by_admins_only = True
realm.save()
check_add_realm_emoji(realm, "my_emoji", "my_emoji.png")
result = self.client_delete("/json/realm/emoji/my_emoji")
self.assert_json_error(result, 'Must be an organization administrator')
def test_delete_admin_or_author(self) -> None:
# If any user in a realm can upload the emoji then the user who
# uploaded it as well as the admin should be able to delete it.
realm = get_realm('zulip')
author = get_user('othello@zulip.com', realm)
realm.add_emoji_by_admins_only = False
realm.save()
check_add_realm_emoji(realm, "my_emoji_1", "my_emoji.png", author)
self.login('othello@zulip.com')
result = self.client_delete("/json/realm/emoji/my_emoji_1")
self.assert_json_success(result)
self.logout()
check_add_realm_emoji(realm, "my_emoji_2", "my_emoji.png", author)
self.login('iago@zulip.com')
result = self.client_delete("/json/realm/emoji/my_emoji_2")
self.assert_json_success(result)
self.logout()
check_add_realm_emoji(realm, "my_emoji_3", "my_emoji.png", author)
self.login('cordelia@zulip.com')
result = self.client_delete("/json/realm/emoji/my_emoji_3")
self.assert_json_error(result, 'Must be an organization administrator or emoji author')
def test_delete_exception(self) -> None:
email = self.example_email('iago')
self.login(email)
result = self.client_delete("/json/realm/emoji/invalid_emoji")
self.assert_json_error(result, "Emoji 'invalid_emoji' does not exist")
def test_multiple_upload(self) -> None:
email = self.example_email('iago')
self.login(email)
with get_test_image_file('img.png') as fp1, get_test_image_file('img.png') as fp2:
result = self.client_post('/json/realm/emoji/my_emoji', {'f1': fp1, 'f2': fp2})
self.assert_json_error(result, 'You must upload exactly one file.')
def test_emoji_upload_file_size_error(self) -> None:
email = self.example_email('iago')
self.login(email)
with get_test_image_file('img.png') as fp:
with self.settings(MAX_EMOJI_FILE_SIZE=0):
result = self.client_post('/json/realm/emoji/my_emoji', {'file': fp})
self.assert_json_error(result, 'Uploaded file is larger than the allowed limit of 0 MB')
def test_upload_already_existed_emoji(self) -> None:
email = self.example_email('iago')
self.login(email)
with get_test_image_file('img.png') as fp1:
emoji_data = {'f1': fp1}
result = self.client_post('/json/realm/emoji/green_tick', info=emoji_data)
self.assert_json_error(result, 'Realm emoji with this Realm and Name already exists.')