diff --git a/zerver/lib/test_classes.py b/zerver/lib/test_classes.py index 71faf60673..36acb7d947 100644 --- a/zerver/lib/test_classes.py +++ b/zerver/lib/test_classes.py @@ -430,14 +430,16 @@ class ZulipTestCase(TestCase): return self.encode_credentials(uuid, api_key) + def encode_user(self, user: UserProfile) -> str: + email = user.delivery_email + api_key = user.api_key + return self.encode_credentials(email, api_key) + def encode_email(self, email: str, realm: str="zulip") -> str: + # TODO: use encode_user where possible assert '@' in email - if email in self.API_KEYS: - api_key = self.API_KEYS[email] - else: - user = get_user_by_delivery_email(email, get_realm(realm)) - api_key = get_api_key(user) - self.API_KEYS[email] = api_key + user = get_user_by_delivery_email(email, get_realm(realm)) + api_key = get_api_key(user) return self.encode_credentials(email, api_key) @@ -456,20 +458,20 @@ class ZulipTestCase(TestCase): kwargs['HTTP_AUTHORIZATION'] = self.encode_uuid(identifier) return self.client_post(*args, **kwargs) - def api_get(self, identifier: str, *args: Any, **kwargs: Any) -> HttpResponse: - kwargs['HTTP_AUTHORIZATION'] = self.encode_email(identifier, kwargs.get('subdomain', 'zulip')) + def api_get(self, user: UserProfile, *args: Any, **kwargs: Any) -> HttpResponse: + kwargs['HTTP_AUTHORIZATION'] = self.encode_user(user) return self.client_get(*args, **kwargs) - def api_post(self, identifier: str, *args: Any, **kwargs: Any) -> HttpResponse: - kwargs['HTTP_AUTHORIZATION'] = self.encode_email(identifier, kwargs.get('subdomain', 'zulip')) + def api_post(self, user: UserProfile, *args: Any, **kwargs: Any) -> HttpResponse: + kwargs['HTTP_AUTHORIZATION'] = self.encode_user(user) return self.client_post(*args, **kwargs) - def api_patch(self, identifier: str, *args: Any, **kwargs: Any) -> HttpResponse: - kwargs['HTTP_AUTHORIZATION'] = self.encode_email(identifier, kwargs.get('subdomain', 'zulip')) + def api_patch(self, user: UserProfile, *args: Any, **kwargs: Any) -> HttpResponse: + kwargs['HTTP_AUTHORIZATION'] = self.encode_user(user) return self.client_patch(*args, **kwargs) - def api_delete(self, identifier: str, *args: Any, **kwargs: Any) -> HttpResponse: - kwargs['HTTP_AUTHORIZATION'] = self.encode_email(identifier, kwargs.get('subdomain', 'zulip')) + def api_delete(self, user: UserProfile, *args: Any, **kwargs: Any) -> HttpResponse: + kwargs['HTTP_AUTHORIZATION'] = self.encode_user(user) return self.client_delete(*args, **kwargs) def get_streams(self, user_profile: UserProfile) -> List[str]: @@ -696,7 +698,7 @@ class ZulipTestCase(TestCase): post_data = {'subscriptions': ujson.dumps([{"name": stream} for stream in streams]), 'invite_only': ujson.dumps(invite_only)} post_data.update(extra_post_data) - result = self.api_post(user.email, "/api/v1/users/me/subscriptions", post_data, **kwargs) + result = self.api_post(user, "/api/v1/users/me/subscriptions", post_data, **kwargs) return result def check_user_subscribed_only_to_streams(self, user_name: str, @@ -865,8 +867,8 @@ class WebhookTestCase(ZulipTestCase): super().setUp() self.url = self.build_webhook_url() - def api_stream_message(self, email: str, *args: Any, **kwargs: Any) -> HttpResponse: - kwargs['HTTP_AUTHORIZATION'] = self.encode_email(email) + def api_stream_message(self, user: UserProfile, *args: Any, **kwargs: Any) -> HttpResponse: + kwargs['HTTP_AUTHORIZATION'] = self.encode_user(user) return self.send_and_test_stream_message(*args, **kwargs) def send_and_test_stream_message(self, fixture_name: str, expected_topic: Optional[str]=None, diff --git a/zerver/tests/test_bots.py b/zerver/tests/test_bots.py index cf15d3fd84..6def44679b 100644 --- a/zerver/tests/test_bots.py +++ b/zerver/tests/test_bots.py @@ -1179,7 +1179,7 @@ class BotTest(ZulipTestCase, UploadSerializeMixin): # Make sure the bot cannot create their own default stream. url = "/api/v1/bots/{}".format(bot_user.id) - result = self.api_patch(bot_user.email, url, bot_info) + result = self.api_patch(bot_user, url, bot_info) self.assert_json_error_contains(result, 'endpoint does not accept') def test_patch_bot_events_register_stream_allowed(self) -> None: diff --git a/zerver/tests/test_bugdown.py b/zerver/tests/test_bugdown.py index d02f652407..f9ff086568 100644 --- a/zerver/tests/test_bugdown.py +++ b/zerver/tests/test_bugdown.py @@ -1970,7 +1970,7 @@ class BugdownApiTests(ZulipTestCase): def test_render_message_api(self) -> None: content = 'That is a **bold** statement' result = self.api_post( - self.example_email("othello"), + self.example_user("othello"), '/api/v1/messages/render', dict(content=content) ) @@ -1982,7 +1982,7 @@ class BugdownApiTests(ZulipTestCase): """Determines whether we're correctly passing the realm context""" content = 'This mentions #**Denmark** and @**King Hamlet**.' result = self.api_post( - self.example_email("othello"), + self.example_user("othello"), '/api/v1/messages/render', dict(content=content) ) diff --git a/zerver/tests/test_decorators.py b/zerver/tests/test_decorators.py index b5935b373a..f8b23d68a9 100644 --- a/zerver/tests/test_decorators.py +++ b/zerver/tests/test_decorators.py @@ -1014,7 +1014,7 @@ class DeactivatedRealmTest(ZulipTestCase): "to": self.example_email("othello")}) self.assert_json_error_contains(result, "has been deactivated", status_code=400) - result = self.api_post(self.example_email("hamlet"), + result = self.api_post(self.example_user("hamlet"), "/api/v1/messages", {"type": "private", "content": "Test message", "client": "test suite", @@ -1142,7 +1142,7 @@ class InactiveUserTest(ZulipTestCase): "to": self.example_email("othello")}) self.assert_json_error_contains(result, "Account is deactivated", status_code=400) - result = self.api_post(self.example_email("hamlet"), + result = self.api_post(self.example_user("hamlet"), "/api/v1/messages", {"type": "private", "content": "Test message", "client": "test suite", @@ -1238,20 +1238,16 @@ class InactiveUserTest(ZulipTestCase): class TestIncomingWebhookBot(ZulipTestCase): - def setUp(self) -> None: - super().setUp() - zulip_realm = get_realm('zulip') - self.webhook_bot = get_user('webhook-bot@zulip.com', zulip_realm) - def test_webhook_bot_permissions(self) -> None: - result = self.api_post("webhook-bot@zulip.com", + webhook_bot = self.example_user('webhook_bot') + result = self.api_post(webhook_bot, "/api/v1/messages", {"type": "private", "content": "Test message", "client": "test suite", "to": self.example_email("othello")}) self.assert_json_success(result) post_params = {"anchor": 1, "num_before": 1, "num_after": 1} - result = self.api_get("webhook-bot@zulip.com", "/api/v1/messages", dict(post_params)) + result = self.api_get(webhook_bot, "/api/v1/messages", dict(post_params)) self.assert_json_error(result, 'This API is not available to incoming webhook bots.', status_code=401) @@ -1405,6 +1401,8 @@ class TestInternalNotifyView(TestCase): class TestHumanUsersOnlyDecorator(ZulipTestCase): def test_human_only_endpoints(self) -> None: + default_bot = self.example_user('default_bot') + post_endpoints = [ "/api/v1/users/me/apns_device_token", "/api/v1/users/me/android_gcm_reg_id", @@ -1417,7 +1415,7 @@ class TestHumanUsersOnlyDecorator(ZulipTestCase): "/api/v1/report/unnarrow_times", ] for endpoint in post_endpoints: - result = self.api_post('default-bot@zulip.com', endpoint) + result = self.api_post(default_bot, endpoint) self.assert_json_error(result, "This endpoint does not accept bot requests.") patch_endpoints = [ @@ -1427,7 +1425,7 @@ class TestHumanUsersOnlyDecorator(ZulipTestCase): "/api/v1/users/me/profile_data" ] for endpoint in patch_endpoints: - result = self.api_patch('default-bot@zulip.com', endpoint) + result = self.api_patch(default_bot, endpoint) self.assert_json_error(result, "This endpoint does not accept bot requests.") delete_endpoints = [ @@ -1435,7 +1433,7 @@ class TestHumanUsersOnlyDecorator(ZulipTestCase): "/api/v1/users/me/android_gcm_reg_id", ] for endpoint in delete_endpoints: - result = self.api_delete('default-bot@zulip.com', endpoint) + result = self.api_delete(default_bot, endpoint) self.assert_json_error(result, "This endpoint does not accept bot requests.") class TestAuthenticatedJsonPostViewDecorator(ZulipTestCase): @@ -1650,7 +1648,8 @@ class TestRequireDecorators(ZulipTestCase): self.assert_json_error(result, "Not allowed for guest users") def test_require_member_or_admin_decorator(self) -> None: - result = self.api_get("outgoing-webhook@zulip.com", '/api/v1/bots') + outgoing_webhook_bot = self.example_user('outgoing_webhook_bot') + result = self.api_get(outgoing_webhook_bot, '/api/v1/bots') self.assert_json_error(result, "This endpoint does not accept bot requests.") guest_user = self.example_user('polonius') diff --git a/zerver/tests/test_events.py b/zerver/tests/test_events.py index b646a3141e..65dce6de49 100644 --- a/zerver/tests/test_events.py +++ b/zerver/tests/test_events.py @@ -178,13 +178,13 @@ class EventsEndpointTest(ZulipTestCase): # This test is intended to get minimal coverage on the # events_register code paths - email = self.example_email("hamlet") + user = self.example_user("hamlet") with mock.patch('zerver.views.events_register.do_events_register', return_value={}): - result = self.api_post(email, '/json/register') + result = self.api_post(user, '/json/register') self.assert_json_success(result) with mock.patch('zerver.lib.events.request_event_queue', return_value=None): - result = self.api_post(email, '/json/register') + result = self.api_post(user, '/json/register') self.assert_json_error(result, "Could not allocate event queue") return_event_queue = '15:11' @@ -193,11 +193,11 @@ class EventsEndpointTest(ZulipTestCase): # Test that call is made to deal with a returning soft deactivated user. with mock.patch('zerver.lib.events.reactivate_user_if_soft_deactivated') as fa: with stub_event_queue_user_events(return_event_queue, return_user_events): - result = self.api_post(email, '/json/register', dict(event_types=ujson.dumps(['pointer']))) + result = self.api_post(user, '/json/register', dict(event_types=ujson.dumps(['pointer']))) self.assertEqual(fa.call_count, 1) with stub_event_queue_user_events(return_event_queue, return_user_events): - result = self.api_post(email, '/json/register', dict(event_types=ujson.dumps(['pointer']))) + result = self.api_post(user, '/json/register', dict(event_types=ujson.dumps(['pointer']))) self.assert_json_success(result) result_dict = result.json() self.assertEqual(result_dict['last_event_id'], -1) @@ -212,7 +212,7 @@ class EventsEndpointTest(ZulipTestCase): } ] with stub_event_queue_user_events(return_event_queue, return_user_events): - result = self.api_post(email, '/json/register', dict(event_types=ujson.dumps(['pointer']))) + result = self.api_post(user, '/json/register', dict(event_types=ujson.dumps(['pointer']))) self.assert_json_success(result) result_dict = result.json() @@ -223,7 +223,7 @@ class EventsEndpointTest(ZulipTestCase): # Now test with `fetch_event_types` not matching the event return_event_queue = '15:13' with stub_event_queue_user_events(return_event_queue, return_user_events): - result = self.api_post(email, '/json/register', + result = self.api_post(user, '/json/register', dict(event_types=ujson.dumps(['pointer']), fetch_event_types=ujson.dumps(['message']))) self.assert_json_success(result) @@ -237,7 +237,7 @@ class EventsEndpointTest(ZulipTestCase): # Now test with `fetch_event_types` matching the event with stub_event_queue_user_events(return_event_queue, return_user_events): - result = self.api_post(email, '/json/register', + result = self.api_post(user, '/json/register', dict(fetch_event_types=ujson.dumps(['pointer']), event_types=ujson.dumps(['message']))) self.assert_json_success(result) @@ -1214,7 +1214,7 @@ class EventsRegisterTest(ZulipTestCase): ])), ]) - self.api_post(self.user_profile.email, "/api/v1/users/me/presence", {'status': 'idle'}, + self.api_post(self.user_profile, "/api/v1/users/me/presence", {'status': 'idle'}, HTTP_USER_AGENT="ZulipAndroid/1.0") self.do_test(lambda: do_update_user_presence( self.user_profile, get_client("website"), timezone_now(), UserPresence.ACTIVE)) diff --git a/zerver/tests/test_external.py b/zerver/tests/test_external.py index 3a2933ad9a..66e9e54bda 100644 --- a/zerver/tests/test_external.py +++ b/zerver/tests/test_external.py @@ -18,6 +18,10 @@ from zerver.lib.test_classes import ( ZulipTestCase, ) +from zerver.models import ( + UserProfile, +) + import DNS import mock import time @@ -58,43 +62,40 @@ class RateLimitTests(ZulipTestCase): super().tearDown() - def send_api_message(self, email: str, content: str) -> HttpResponse: - return self.api_post(email, "/api/v1/messages", {"type": "stream", - "to": "Verona", - "client": "test suite", - "content": content, - "topic": "whatever"}) + def send_api_message(self, user: UserProfile, content: str) -> HttpResponse: + return self.api_post(user, "/api/v1/messages", {"type": "stream", + "to": "Verona", + "client": "test suite", + "content": content, + "topic": "whatever"}) def test_headers(self) -> None: user = self.example_user('hamlet') - email = user.email clear_history(RateLimitedUser(user)) - result = self.send_api_message(email, "some stuff") + result = self.send_api_message(user, "some stuff") self.assertTrue('X-RateLimit-Remaining' in result) self.assertTrue('X-RateLimit-Limit' in result) self.assertTrue('X-RateLimit-Reset' in result) def test_ratelimit_decrease(self) -> None: user = self.example_user('hamlet') - email = user.email clear_history(RateLimitedUser(user)) - result = self.send_api_message(email, "some stuff") + result = self.send_api_message(user, "some stuff") limit = int(result['X-RateLimit-Remaining']) - result = self.send_api_message(email, "some stuff 2") + result = self.send_api_message(user, "some stuff 2") newlimit = int(result['X-RateLimit-Remaining']) self.assertEqual(limit, newlimit + 1) def test_hit_ratelimits(self) -> None: user = self.example_user('cordelia') - email = user.email clear_history(RateLimitedUser(user)) start_time = time.time() for i in range(6): with mock.patch('time.time', return_value=(start_time + i * 0.1)): - result = self.send_api_message(email, "some stuff %s" % (i,)) + result = self.send_api_message(user, "some stuff %s" % (i,)) self.assertEqual(result.status_code, 429) json = result.json() @@ -108,19 +109,18 @@ class RateLimitTests(ZulipTestCase): # to make sure the rate-limiting code automatically forgives a user # after some time has passed. with mock.patch('time.time', return_value=(start_time + 1.0)): - result = self.send_api_message(email, "Good message") + result = self.send_api_message(user, "Good message") self.assert_json_success(result) @mock.patch('zerver.lib.rate_limiter.logger.warning') def test_hit_ratelimiterlockingexception(self, mock_warn: mock.MagicMock) -> None: user = self.example_user('cordelia') - email = user.email clear_history(RateLimitedUser(user)) with mock.patch('zerver.lib.rate_limiter.incr_ratelimit', side_effect=RateLimiterLockingException): - result = self.send_api_message(email, "some stuff") + result = self.send_api_message(user, "some stuff") self.assertEqual(result.status_code, 429) mock_warn.assert_called_with("Deadlock trying to incr_ratelimit for RateLimitedUser:Id: %s" % (user.id,)) diff --git a/zerver/tests/test_messages.py b/zerver/tests/test_messages.py index 1fbe9f343e..4d0a6f68f8 100644 --- a/zerver/tests/test_messages.py +++ b/zerver/tests/test_messages.py @@ -1153,29 +1153,28 @@ class StreamMessagesTest(ZulipTestCase): self.assertTrue(user_message.flags.mentioned) def test_stream_message_mirroring(self) -> None: - user_profile = self.mit_user('starnine') - email = user_profile.email - self.subscribe(user_profile, 'Verona') + user = self.mit_user('starnine') + self.subscribe(user, 'Verona') - do_change_is_admin(user_profile, True, 'api_super_user') - result = self.api_post(email, "/api/v1/messages", {"type": "stream", - "to": "Verona", - "sender": self.mit_email("sipbtest"), - "client": "zephyr_mirror", - "topic": "announcement", - "content": "Everyone knows Iago rules", - "forged": "true"}, + do_change_is_admin(user, True, 'api_super_user') + result = self.api_post(user, "/api/v1/messages", {"type": "stream", + "to": "Verona", + "sender": self.mit_email("sipbtest"), + "client": "zephyr_mirror", + "topic": "announcement", + "content": "Everyone knows Iago rules", + "forged": "true"}, subdomain="zephyr") self.assert_json_success(result) - do_change_is_admin(user_profile, False, 'api_super_user') - result = self.api_post(email, "/api/v1/messages", {"type": "stream", - "to": "Verona", - "sender": self.mit_email("sipbtest"), - "client": "zephyr_mirror", - "topic": "announcement", - "content": "Everyone knows Iago rules", - "forged": "true"}, + do_change_is_admin(user, False, 'api_super_user') + result = self.api_post(user, "/api/v1/messages", {"type": "stream", + "to": "Verona", + "sender": self.mit_email("sipbtest"), + "client": "zephyr_mirror", + "topic": "announcement", + "content": "Everyone knows Iago rules", + "forged": "true"}, subdomain="zephyr") self.assert_json_error(result, "User not authorized for this query") @@ -1471,7 +1470,7 @@ class MessagePOSTTest(ZulipTestCase): def _send_and_verify_message(self, user: UserProfile, stream_name: str, error_msg: str=None) -> None: if error_msg is None: msg_id = self.send_stream_message(user, stream_name) - result = self.api_get(user.email, '/json/messages/' + str(msg_id)) + result = self.api_get(user, '/json/messages/' + str(msg_id)) self.assert_json_success(result) else: with self.assertRaisesRegex(JsonableError, error_msg): @@ -1494,12 +1493,12 @@ class MessagePOSTTest(ZulipTestCase): """ Same as above, but for the API view """ - email = self.example_email("hamlet") - result = self.api_post(email, "/api/v1/messages", {"type": "stream", - "to": "Verona", - "client": "test suite", - "content": "Test message", - "topic": "Test topic"}) + user = self.example_user('hamlet') + result = self.api_post(user, "/api/v1/messages", {"type": "stream", + "to": "Verona", + "client": "test suite", + "content": "Test message", + "topic": "Test topic"}) self.assert_json_success(result) def test_message_to_stream_with_nonexistent_id(self) -> None: @@ -1509,7 +1508,7 @@ class MessagePOSTTest(ZulipTestCase): user_profile=cordelia, ) result = self.api_post( - bot.email, "/api/v1/messages", + bot, "/api/v1/messages", { "type": "stream", "to": ujson.dumps([99999]), @@ -1664,14 +1663,13 @@ class MessagePOSTTest(ZulipTestCase): Sending messages without a to field should be sent to the default stream for the user_profile. """ - user_profile = self.example_user('hamlet') - email = user_profile.email - user_profile.default_sending_stream_id = get_stream('Verona', user_profile.realm).id - user_profile.save() - result = self.api_post(email, "/api/v1/messages", {"type": "stream", - "client": "test suite", - "content": "Test message no to", - "topic": "Test topic"}) + user = self.example_user('hamlet') + user.default_sending_stream_id = get_stream('Verona', user.realm).id + user.save() + result = self.api_post(user, "/api/v1/messages", {"type": "stream", + "client": "test suite", + "content": "Test message no to", + "topic": "Test topic"}) self.assert_json_success(result) sent_message = self.get_last_message() @@ -1911,7 +1909,7 @@ class MessagePOSTTest(ZulipTestCase): """ Sending a mirrored huddle message works """ - result = self.api_post(self.mit_email("starnine"), + result = self.api_post(self.mit_user("starnine"), "/json/messages", {"type": "private", "sender": self.mit_email("sipbtest"), "content": "Test message", @@ -1925,7 +1923,7 @@ class MessagePOSTTest(ZulipTestCase): """ Sending a mirrored personal message works """ - result = self.api_post(self.mit_email("starnine"), + result = self.api_post(self.mit_user("starnine"), "/json/messages", {"type": "private", "sender": self.mit_email("sipbtest"), "content": "Test message", @@ -1952,7 +1950,7 @@ class MessagePOSTTest(ZulipTestCase): """ Sending a mirrored personal message to someone else is not allowed. """ - result = self.api_post(self.mit_email("starnine"), "/api/v1/messages", + result = self.api_post(self.mit_user("starnine"), "/api/v1/messages", {"type": "private", "sender": self.mit_email("sipbtest"), "content": "Test message", @@ -1973,12 +1971,12 @@ class MessagePOSTTest(ZulipTestCase): self.mit_email("starnine")])} with mock.patch('DNS.dnslookup', return_value=[['starnine:*:84233:101:Athena Consulting Exchange User,,,:/mit/starnine:/bin/bash']]): - result1 = self.api_post(self.mit_email("starnine"), "/api/v1/messages", msg, + result1 = self.api_post(self.mit_user("starnine"), "/api/v1/messages", msg, subdomain="zephyr") self.assert_json_success(result1) with mock.patch('DNS.dnslookup', return_value=[['espuser:*:95494:101:Esp Classroom,,,:/mit/espuser:/bin/athena/bash']]): - result2 = self.api_post(self.mit_email("espuser"), "/api/v1/messages", msg, + result2 = self.api_post(self.mit_user("espuser"), "/api/v1/messages", msg, subdomain="zephyr") self.assert_json_success(result2) @@ -2065,7 +2063,7 @@ class MessagePOSTTest(ZulipTestCase): user.set_password(password) user.is_api_super_user = True user.save() - result = self.api_post(user.email, + result = self.api_post(user, "/api/v1/messages", {"type": "stream", "to": "Verona", "client": "test suite", @@ -2077,7 +2075,7 @@ class MessagePOSTTest(ZulipTestCase): self.assert_json_error(result, "Unknown organization 'non-existing'") def test_send_message_when_sender_is_not_set(self) -> None: - result = self.api_post(self.mit_email("starnine"), "/api/v1/messages", + result = self.api_post(self.mit_user("starnine"), "/api/v1/messages", {"type": "private", "content": "Test message", "client": "zephyr_mirror", @@ -2086,7 +2084,7 @@ class MessagePOSTTest(ZulipTestCase): self.assert_json_error(result, "Missing sender") def test_send_message_as_not_superuser_when_type_is_not_private(self) -> None: - result = self.api_post(self.mit_email("starnine"), "/api/v1/messages", + result = self.api_post(self.mit_user("starnine"), "/api/v1/messages", {"type": "not-private", "sender": self.mit_email("sipbtest"), "content": "Test message", @@ -2099,7 +2097,7 @@ class MessagePOSTTest(ZulipTestCase): def test_send_message_create_mirrored_message_user_returns_invalid_input( self, create_mirrored_message_users_mock: Any) -> None: create_mirrored_message_users_mock.side_effect = InvalidMirrorInput() - result = self.api_post(self.mit_email("starnine"), "/api/v1/messages", + result = self.api_post(self.mit_user("starnine"), "/api/v1/messages", {"type": "private", "sender": self.mit_email("sipbtest"), "content": "Test message", @@ -2115,7 +2113,7 @@ class MessagePOSTTest(ZulipTestCase): user = self.mit_user("starnine") user.realm.string_id = 'notzephyr' user.realm.save() - result = self.api_post(user.email, "/api/v1/messages", + result = self.api_post(user, "/api/v1/messages", {"type": "private", "sender": self.mit_email("sipbtest"), "content": "Test message", @@ -2130,7 +2128,7 @@ class MessagePOSTTest(ZulipTestCase): create_mirrored_message_users_mock.return_value = mock.Mock() user = self.mit_user("starnine") user_id = user.id - result = self.api_post(user.email, "/api/v1/messages", + result = self.api_post(user, "/api/v1/messages", {"type": "private", "sender": self.mit_email("sipbtest"), "content": "Test message", @@ -2159,14 +2157,14 @@ class MessagePOSTTest(ZulipTestCase): fake_date_sent = timezone_now() - datetime.timedelta(minutes=37) fake_timestamp = datetime_to_timestamp(fake_date_sent) - result = self.api_post(email, "/api/v1/messages", {"type": "stream", - "forged": "true", - "time": fake_timestamp, - "sender": "irc-user@irc.zulip.com", - "content": "Test message", - "client": "irc_mirror", - "topic": "from irc", - "to": "IRCLand"}) + result = self.api_post(user, "/api/v1/messages", {"type": "stream", + "forged": "true", + "time": fake_timestamp, + "sender": "irc-user@irc.zulip.com", + "content": "Test message", + "client": "irc_mirror", + "topic": "from irc", + "to": "IRCLand"}) self.assert_json_success(result) msg = self.get_last_message() @@ -2176,14 +2174,14 @@ class MessagePOSTTest(ZulipTestCase): fake_date_sent = timezone_now() - datetime.timedelta(minutes=22) fake_timestamp = datetime_to_timestamp(fake_date_sent) - result = self.api_post(email, "/api/v1/messages", {"type": "stream", - "forged": "yes", - "time": fake_timestamp, - "sender": "irc-user@irc.zulip.com", - "content": "Test message", - "client": "irc_mirror", - "topic": "from irc", - "to": "IRCLand"}) + result = self.api_post(user, "/api/v1/messages", {"type": "stream", + "forged": "yes", + "time": fake_timestamp, + "sender": "irc-user@irc.zulip.com", + "content": "Test message", + "client": "irc_mirror", + "topic": "from irc", + "to": "IRCLand"}) self.assert_json_success(result) msg = self.get_last_message() @@ -2217,13 +2215,13 @@ class MessagePOSTTest(ZulipTestCase): cordelia.is_api_super_user = False cordelia.save() - result = self.api_post(cordelia.email, "/api/v1/messages", payload) + result = self.api_post(cordelia, "/api/v1/messages", payload) self.assert_json_error_contains(result, 'authorized') cordelia.is_api_super_user = True cordelia.save() - result = self.api_post(cordelia.email, "/api/v1/messages", payload) + result = self.api_post(cordelia, "/api/v1/messages", payload) self.assert_json_success(result) test_with( @@ -2256,13 +2254,13 @@ class MessagePOSTTest(ZulipTestCase): content='whatever', ) - result = self.api_post(bot.email, "/api/v1/messages", payload) + result = self.api_post(bot, "/api/v1/messages", payload) self.assert_json_error_contains(result, 'Not authorized to send') # We subscribe the bot owner! (aka cordelia) self.subscribe(bot.bot_owner, stream_name) - result = self.api_post(bot.email, "/api/v1/messages", payload) + result = self.api_post(bot, "/api/v1/messages", payload) self.assert_json_success(result) def test_cross_realm_bots_can_use_api_on_own_subdomain(self) -> None: @@ -2270,7 +2268,7 @@ class MessagePOSTTest(ZulipTestCase): notification_bot = self.notification_bot() stream = self.make_stream("notify_channel", get_realm("zulipinternal")) - result = self.api_post(notification_bot.email, + result = self.api_post(notification_bot, "/api/v1/messages", {"type": "stream", "to": "notify_channel", @@ -2332,12 +2330,12 @@ class MessagePOSTTest(ZulipTestCase): ) # Guest user can't send message to unsubscribed public streams - result = self.api_post(sender.email, "/api/v1/messages", payload) + result = self.api_post(sender, "/api/v1/messages", payload) self.assert_json_error(result, "Not authorized to send to stream 'public stream'") self.subscribe(sender, stream_name) # Guest user can send message to subscribed public streams - result = self.api_post(sender.email, "/api/v1/messages", payload) + result = self.api_post(sender, "/api/v1/messages", payload) self.assert_json_success(result) class ScheduledMessageTest(ZulipTestCase): diff --git a/zerver/tests/test_muting.py b/zerver/tests/test_muting.py index 98b7b81ecd..ef20e9e4bf 100644 --- a/zerver/tests/test_muting.py +++ b/zerver/tests/test_muting.py @@ -70,7 +70,7 @@ class MutedTopicsTests(ZulipTestCase): ] for data in payloads: - result = self.api_patch(user.email, url, data) + result = self.api_patch(user, url, data) self.assert_json_success(result) self.assertIn([stream.name, 'Verona3'], get_topic_mutes(user)) @@ -109,7 +109,7 @@ class MutedTopicsTests(ZulipTestCase): ) self.assertIn([stream.name, 'Verona3'], get_topic_mutes(user)) - result = self.api_patch(email, url, data) + result = self.api_patch(user, url, data) self.assert_json_success(result) self.assertNotIn([stream.name, 'Verona3'], get_topic_mutes(user)) @@ -134,19 +134,19 @@ class MutedTopicsTests(ZulipTestCase): url = '/api/v1/users/me/subscriptions/muted_topics' data = {'stream': stream.name, 'topic': 'Verona3', 'op': 'add'} # type: Dict[str, Any] - result = self.api_patch(email, url, data) + result = self.api_patch(user, url, data) self.assert_json_error(result, "Topic already muted") data = {'stream_id': 999999999, 'topic': 'Verona3', 'op': 'add'} - result = self.api_patch(email, url, data) + result = self.api_patch(user, url, data) self.assert_json_error(result, "Invalid stream id") data = {'topic': 'Verona3', 'op': 'add'} - result = self.api_patch(email, url, data) + result = self.api_patch(user, url, data) self.assert_json_error(result, "Please supply 'stream'.") data = {'stream': stream.name, 'stream_id': stream.id, 'topic': 'Verona3', 'op': 'add'} - result = self.api_patch(email, url, data) + result = self.api_patch(user, url, data) self.assert_json_error(result, "Please choose one: 'stream' or 'stream_id'.") def test_muted_topic_remove_invalid(self) -> None: @@ -158,21 +158,21 @@ class MutedTopicsTests(ZulipTestCase): url = '/api/v1/users/me/subscriptions/muted_topics' data = {'stream': 'BOGUS', 'topic': 'Verona3', 'op': 'remove'} # type: Dict[str, Any] - result = self.api_patch(email, url, data) + result = self.api_patch(user, url, data) self.assert_json_error(result, "Topic is not muted") data = {'stream': stream.name, 'topic': 'BOGUS', 'op': 'remove'} - result = self.api_patch(email, url, data) + result = self.api_patch(user, url, data) self.assert_json_error(result, "Topic is not muted") data = {'stream_id': 999999999, 'topic': 'BOGUS', 'op': 'remove'} - result = self.api_patch(email, url, data) + result = self.api_patch(user, url, data) self.assert_json_error(result, "Topic is not muted") data = {'topic': 'Verona3', 'op': 'remove'} - result = self.api_patch(email, url, data) + result = self.api_patch(user, url, data) self.assert_json_error(result, "Please supply 'stream'.") data = {'stream': stream.name, 'stream_id': stream.id, 'topic': 'Verona3', 'op': 'remove'} - result = self.api_patch(email, url, data) + result = self.api_patch(user, url, data) self.assert_json_error(result, "Please choose one: 'stream' or 'stream_id'.") diff --git a/zerver/tests/test_presence.py b/zerver/tests/test_presence.py index 98dda2c4f6..a8233c9f5c 100644 --- a/zerver/tests/test_presence.py +++ b/zerver/tests/test_presence.py @@ -356,12 +356,12 @@ class SingleUserPresenceTests(ZulipTestCase): def test_single_user_get(self) -> None: # First, we setup the test with some data - email = self.example_email("othello") + user = self.example_user("othello") self.login(self.example_email("othello")) result = self.client_post("/json/users/me/presence", {'status': 'active'}) result = self.client_post("/json/users/me/presence", {'status': 'active'}, HTTP_USER_AGENT="ZulipDesktop/1.0") - result = self.api_post(email, "/api/v1/users/me/presence", {'status': 'idle'}, + result = self.api_post(user, "/api/v1/users/me/presence", {'status': 'idle'}, HTTP_USER_AGENT="ZulipAndroid/1.0") self.assert_json_success(result) @@ -404,17 +404,18 @@ class SingleUserPresenceTests(ZulipTestCase): self.assertEqual(result.json()['msg'], '') class UserPresenceAggregationTests(ZulipTestCase): - def _send_presence_for_aggregated_tests(self, email: str, status: str, + def _send_presence_for_aggregated_tests(self, user: UserProfile, status: str, validate_time: datetime.datetime) -> Dict[str, Dict[str, Any]]: + email = user.email self.login(email) timezone_util = 'zerver.views.presence.timezone_now' with mock.patch(timezone_util, return_value=validate_time - datetime.timedelta(seconds=5)): self.client_post("/json/users/me/presence", {'status': status}) with mock.patch(timezone_util, return_value=validate_time - datetime.timedelta(seconds=2)): - self.api_post(email, "/api/v1/users/me/presence", {'status': status}, + self.api_post(user, "/api/v1/users/me/presence", {'status': status}, HTTP_USER_AGENT="ZulipAndroid/1.0") with mock.patch(timezone_util, return_value=validate_time - datetime.timedelta(seconds=7)): - latest_result = self.api_post(email, "/api/v1/users/me/presence", {'status': status}, + latest_result = self.api_post(user, "/api/v1/users/me/presence", {'status': status}, HTTP_USER_AGENT="ZulipIOS/1.0") latest_result_dict = latest_result.json() self.assertDictEqual( @@ -429,16 +430,16 @@ class UserPresenceAggregationTests(ZulipTestCase): return result.json() def test_aggregated_info(self) -> None: - email = self.example_email("othello") + user = self.example_user("othello") validate_time = timezone_now() - self._send_presence_for_aggregated_tests(str(self.example_email("othello")), 'active', validate_time) + self._send_presence_for_aggregated_tests(user, 'active', validate_time) with mock.patch('zerver.views.presence.timezone_now', return_value=validate_time - datetime.timedelta(seconds=1)): - result = self.api_post(email, "/api/v1/users/me/presence", {'status': 'active'}, + result = self.api_post(user, "/api/v1/users/me/presence", {'status': 'active'}, HTTP_USER_AGENT="ZulipTestDev/1.0") result_dict = result.json() self.assertDictEqual( - result_dict['presences'][email]['aggregated'], + result_dict['presences'][user.email]['aggregated'], { 'status': 'active', 'timestamp': datetime_to_timestamp(validate_time - datetime.timedelta(seconds=1)), @@ -447,8 +448,9 @@ class UserPresenceAggregationTests(ZulipTestCase): ) def test_aggregated_presense_active(self) -> None: + user = self.example_user('othello') validate_time = timezone_now() - result_dict = self._send_presence_for_aggregated_tests(str(self.example_email("othello")), 'active', + result_dict = self._send_presence_for_aggregated_tests(user, 'active', validate_time) self.assertDictEqual( result_dict['presence']['aggregated'], @@ -459,8 +461,9 @@ class UserPresenceAggregationTests(ZulipTestCase): ) def test_aggregated_presense_idle(self) -> None: + user = self.example_user('othello') validate_time = timezone_now() - result_dict = self._send_presence_for_aggregated_tests(str(self.example_email("othello")), 'idle', + result_dict = self._send_presence_for_aggregated_tests(user, 'idle', validate_time) self.assertDictEqual( result_dict['presence']['aggregated'], @@ -471,14 +474,14 @@ class UserPresenceAggregationTests(ZulipTestCase): ) def test_aggregated_presense_mixed(self) -> None: - email = self.example_email("othello") - self.login(email) + user = self.example_user("othello") + self.login(user.email) validate_time = timezone_now() with mock.patch('zerver.views.presence.timezone_now', return_value=validate_time - datetime.timedelta(seconds=3)): - self.api_post(email, "/api/v1/users/me/presence", {'status': 'active'}, + self.api_post(user, "/api/v1/users/me/presence", {'status': 'active'}, HTTP_USER_AGENT="ZulipTestDev/1.0") - result_dict = self._send_presence_for_aggregated_tests(str(email), 'idle', validate_time) + result_dict = self._send_presence_for_aggregated_tests(user, 'idle', validate_time) self.assertDictEqual( result_dict['presence']['aggregated'], { @@ -488,11 +491,11 @@ class UserPresenceAggregationTests(ZulipTestCase): ) def test_aggregated_presense_offline(self) -> None: - email = self.example_email("othello") - self.login(email) + user = self.example_user("othello") + self.login(user.email) validate_time = timezone_now() with self.settings(OFFLINE_THRESHOLD_SECS=1): - result_dict = self._send_presence_for_aggregated_tests(str(email), 'idle', validate_time) + result_dict = self._send_presence_for_aggregated_tests(user, 'idle', validate_time) self.assertDictEqual( result_dict['presence']['aggregated'], { @@ -507,18 +510,18 @@ class GetRealmStatusesTest(ZulipTestCase): othello = self.example_user("othello") hamlet = self.example_user("hamlet") - result = self.api_post(othello.email, "/api/v1/users/me/presence", + result = self.api_post(othello, "/api/v1/users/me/presence", dict(status='active'), HTTP_USER_AGENT="ZulipAndroid/1.0") - result = self.api_post(hamlet.email, "/api/v1/users/me/presence", + result = self.api_post(hamlet, "/api/v1/users/me/presence", dict(status='idle'), HTTP_USER_AGENT="ZulipDesktop/1.0") self.assert_json_success(result) json = result.json() self.assertEqual(set(json['presences'].keys()), {hamlet.email, othello.email}) - result = self.api_post(hamlet.email, "/api/v1/users/me/presence", + result = self.api_post(hamlet, "/api/v1/users/me/presence", dict(status='active', slim_presence='true'), HTTP_USER_AGENT="ZulipDesktop/1.0") self.assert_json_success(result) @@ -526,7 +529,7 @@ class GetRealmStatusesTest(ZulipTestCase): self.assertEqual(set(json['presences'].keys()), {str(hamlet.id), str(othello.id)}) # Check that a bot can fetch the presence data for the realm. - result = self.api_get(self.example_email("default_bot"), "/api/v1/realm/presence") + result = self.api_get(self.example_user("default_bot"), "/api/v1/realm/presence") self.assert_json_success(result) json = result.json() self.assertEqual(set(json['presences'].keys()), {hamlet.email, othello.email}) diff --git a/zerver/tests/test_push_notifications.py b/zerver/tests/test_push_notifications.py index f9de22e51c..64c1d5dba6 100644 --- a/zerver/tests/test_push_notifications.py +++ b/zerver/tests/test_push_notifications.py @@ -138,14 +138,17 @@ class PushBouncerNotificationTest(BouncerTestCase): # We need the root ('') subdomain to be in use for this next # test, since the push bouncer API is only available there: + hamlet = self.example_user('hamlet') realm = get_realm("zulip") realm.string_id = "" realm.save() - result = self.api_post(self.example_email("hamlet"), endpoint, {'token': token, - 'user_id': 15, - 'token_kind': token_kind}, - subdomain="") + result = self.api_post( + hamlet, + endpoint, + dict(user_id=15, token=token, token_kind=token_kind), + subdomain='', + ) self.assert_json_error(result, "Must validate with valid Zulip server API key") def test_register_remote_push_user_paramas(self) -> None: @@ -164,21 +167,27 @@ class PushBouncerNotificationTest(BouncerTestCase): result = self.uuid_post(self.server_uuid, endpoint, {'user_id': user_id, 'token': token, 'token_kind': 17}) self.assert_json_error(result, "Invalid token type") - result = self.api_post(self.example_email("hamlet"), endpoint, {'user_id': user_id, - 'token_kind': token_kind, - 'token': token}) + result = self.api_post( + self.example_user("hamlet"), + endpoint, + dict(user_id=user_id, token_kin=token_kind, token=token), + ) self.assert_json_error(result, "Account is not associated with this subdomain", status_code=401) + hamlet = self.example_user('hamlet') + # We need the root ('') subdomain to be in use for this next # test, since the push bouncer API is only available there: realm = get_realm("zulip") realm.string_id = "" realm.save() - result = self.api_post(self.example_email("hamlet"), endpoint, {'user_id': user_id, - 'token_kind': token_kind, - 'token': token}) + result = self.api_post( + hamlet, + endpoint, + dict(user_id=user_id, token_kind=token_kind, token=token), + ) self.assert_json_error(result, "Must validate with valid Zulip server API key") result = self.uuid_post( diff --git a/zerver/tests/test_reactions.py b/zerver/tests/test_reactions.py index 87d5f90675..743ed20d3b 100644 --- a/zerver/tests/test_reactions.py +++ b/zerver/tests/test_reactions.py @@ -16,7 +16,7 @@ class ReactionEmojiTest(ZulipTestCase): """ Sending reaction without emoji fails """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") reaction_info = { 'emoji_name': '' } @@ -29,7 +29,7 @@ class ReactionEmojiTest(ZulipTestCase): """ Sending invalid emoji fails """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") reaction_info = { 'emoji_name': 'foo' } @@ -45,7 +45,7 @@ class ReactionEmojiTest(ZulipTestCase): emoji = RealmEmoji.objects.get(name="green_tick") emoji.deactivated = True emoji.save(update_fields=['deactivated']) - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") reaction_info = { 'emoji_name': 'green_tick', 'reaction_type': 'realm_emoji' @@ -59,7 +59,7 @@ class ReactionEmojiTest(ZulipTestCase): """ Reacting with valid emoji succeeds """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") reaction_info = { 'emoji_name': 'smile' } @@ -73,7 +73,7 @@ class ReactionEmojiTest(ZulipTestCase): """ Reacting with zulip emoji succeeds """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") reaction_info = { 'emoji_name': 'zulip', 'reaction_type': 'zulip_extra_emoji' @@ -93,7 +93,7 @@ class ReactionEmojiTest(ZulipTestCase): message_id = self.send_stream_message(self.example_user("cordelia"), stream_name) user_profile = self.example_user('hamlet') - sender = user_profile.email + sender = user_profile # Verify that hamlet did not receive the message. self.assertFalse(UserMessage.objects.filter(user_profile=user_profile, @@ -118,7 +118,7 @@ class ReactionEmojiTest(ZulipTestCase): """ Reacting with valid realm emoji succeeds """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") reaction_info = { 'emoji_name': 'green_tick', @@ -189,7 +189,7 @@ class ReactionMessageIDTest(ZulipTestCase): """ Reacting without a message_id fails """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") reaction_info = { 'emoji_name': 'smile' } @@ -202,7 +202,7 @@ class ReactionMessageIDTest(ZulipTestCase): """ Reacting to an invalid message id fails """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") reaction_info = { 'emoji_name': 'smile' } @@ -215,9 +215,9 @@ class ReactionMessageIDTest(ZulipTestCase): """ Reacting to a inaccessible (for instance, private) message fails """ - pm_sender = self.example_email("hamlet") + pm_sender = self.example_user("hamlet") pm_recipient = self.example_email("othello") - reaction_sender = self.example_email("iago") + reaction_sender = self.example_user("iago") result = self.api_post(pm_sender, "/api/v1/messages", {"type": "private", @@ -238,14 +238,14 @@ class ReactionTest(ZulipTestCase): """ Creating the same reaction twice fails """ - pm_sender = self.example_email("hamlet") - pm_recipient = self.example_email("othello") + pm_sender = self.example_user("hamlet") + pm_recipient = self.example_user("othello") reaction_sender = pm_recipient pm = self.api_post(pm_sender, "/api/v1/messages", {"type": "private", "content": "Test message", - "to": pm_recipient}) + "to": pm_recipient.email}) self.assert_json_success(pm) content = ujson.loads(pm.content) @@ -267,14 +267,14 @@ class ReactionTest(ZulipTestCase): """ Removing a reaction twice fails """ - pm_sender = self.example_email("hamlet") - pm_recipient = self.example_email("othello") + pm_sender = self.example_user("hamlet") + pm_recipient = self.example_user("othello") reaction_sender = pm_recipient pm = self.api_post(pm_sender, "/api/v1/messages", {"type": "private", "content": "Test message", - "to": pm_recipient}) + "to": pm_recipient.email}) self.assert_json_success(pm) content = ujson.loads(pm.content) @@ -301,7 +301,7 @@ class ReactionTest(ZulipTestCase): various emoji infra changes. """ realm = get_realm('zulip') - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") emoji_code, reaction_type = emoji_name_to_emoji_code(realm, 'smile') reaction_info = { 'emoji_name': 'smile', @@ -320,7 +320,7 @@ class ReactionTest(ZulipTestCase): """ Removes an old existing reaction but the realm emoji used there has been deactivated. """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") emoji = RealmEmoji.objects.get(name="green_tick") @@ -349,7 +349,7 @@ class ReactionEventTest(ZulipTestCase): pm_recipient = self.example_user('othello') reaction_sender = pm_recipient - result = self.api_post(pm_sender.email, + result = self.api_post(pm_sender, "/api/v1/messages", {"type": "private", "content": "Test message", "to": pm_recipient.email}) @@ -364,7 +364,7 @@ class ReactionEventTest(ZulipTestCase): events = [] # type: List[Mapping[str, Any]] with tornado_redirected_to_list(events): - result = self.api_post(reaction_sender.email, '/api/v1/messages/%s/reactions' % (pm_id,), + result = self.api_post(reaction_sender, '/api/v1/messages/%s/reactions' % (pm_id,), reaction_info) self.assert_json_success(result) self.assertEqual(len(events), 1) @@ -388,7 +388,7 @@ class ReactionEventTest(ZulipTestCase): pm_recipient = self.example_user('othello') reaction_sender = pm_recipient - result = self.api_post(pm_sender.email, + result = self.api_post(pm_sender, "/api/v1/messages", {"type": "private", "content": "Test message", "to": pm_recipient.email}) @@ -402,13 +402,13 @@ class ReactionEventTest(ZulipTestCase): 'emoji_name': 'smile' } - add = self.api_post(reaction_sender.email, '/api/v1/messages/%s/reactions' % (pm_id,), + add = self.api_post(reaction_sender, '/api/v1/messages/%s/reactions' % (pm_id,), reaction_info) self.assert_json_success(add) events = [] # type: List[Mapping[str, Any]] with tornado_redirected_to_list(events): - result = self.api_delete(reaction_sender.email, '/api/v1/messages/%s/reactions' % (pm_id,), + result = self.api_delete(reaction_sender, '/api/v1/messages/%s/reactions' % (pm_id,), reaction_info) self.assert_json_success(result) self.assertEqual(len(events), 1) @@ -434,7 +434,7 @@ class EmojiReactionBase(ZulipTestCase): sender: str='hamlet') -> HttpResponse: if 'reaction_type' not in reaction_info: reaction_info['reaction_type'] = self.reaction_type - sender = self.example_email(sender) + sender = self.example_user(sender) result = self.api_post(sender, '/api/v1/messages/%s/reactions' % (message_id,), reaction_info) return result @@ -453,7 +453,7 @@ class EmojiReactionBase(ZulipTestCase): sender: str='hamlet') -> HttpResponse: if 'reaction_type' not in reaction_info: reaction_info['reaction_type'] = self.reaction_type - sender = self.example_email(sender) + sender = self.example_user(sender) result = self.api_delete(sender, '/api/v1/messages/%s/reactions' % (message_id,), reaction_info) return result @@ -799,7 +799,7 @@ class RealmEmojiReactionTests(EmojiReactionBase): 'emoji_code': 'zulip', 'reaction_type': 'nonexistent_emoji_type', } - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") message_id = 1 result = self.api_post(sender, '/api/v1/messages/%s/reactions' % (message_id,), reaction_info) diff --git a/zerver/tests/test_realm.py b/zerver/tests/test_realm.py index 580ef2cc2f..a993e76a30 100644 --- a/zerver/tests/test_realm.py +++ b/zerver/tests/test_realm.py @@ -419,14 +419,14 @@ class RealmTest(ZulipTestCase): self.assertEqual(edited_user_profile.email, "user%s@zulip.testserver" % (edited_user_profile.id,)) # Check normal user cannot access email - result = self.api_get(cordelia.delivery_email, "/api/v1/users/%s" % (hamlet.id,)) + result = self.api_get(cordelia, "/api/v1/users/%s" % (hamlet.id,)) self.assert_json_success(result) self.assertEqual(result.json()['user']['email'], 'user%s@zulip.testserver' % (hamlet.id,)) self.assertEqual(result.json()['user'].get('delivery_email'), None) # Check administrator gets delivery_email with EMAIL_ADDRESS_VISIBILITY_ADMINS - result = self.api_get(user_profile.delivery_email, "/api/v1/users/%s" % (hamlet.id,)) + result = self.api_get(user_profile, "/api/v1/users/%s" % (hamlet.id,)) self.assert_json_success(result) self.assertEqual(result.json()['user']['email'], 'user%s@zulip.testserver' % (hamlet.id,)) @@ -444,7 +444,7 @@ class RealmTest(ZulipTestCase): # Check even administrator doesn't get delivery_email with # EMAIL_ADDRESS_VISIBILITY_NOBODY - result = self.api_get(user_profile.delivery_email, "/api/v1/users/%s" % (hamlet.id,)) + result = self.api_get(user_profile, "/api/v1/users/%s" % (hamlet.id,)) self.assert_json_success(result) self.assertEqual(result.json()['user']['email'], 'user%s@zulip.testserver' % (hamlet.id,)) diff --git a/zerver/tests/test_subs.py b/zerver/tests/test_subs.py index 144b064f4e..60bcb9bd64 100644 --- a/zerver/tests/test_subs.py +++ b/zerver/tests/test_subs.py @@ -180,7 +180,7 @@ class TestCreateStreams(ZulipTestCase): post_data = {'subscriptions': ujson.dumps([{"name": 'new_stream', "description": "multi\nline\ndescription"}]), 'invite_only': ujson.dumps(False)} - result = self.api_post(user.email, "/api/v1/users/me/subscriptions", post_data, + result = self.api_post(user, "/api/v1/users/me/subscriptions", post_data, subdomain="zulip") self.assert_json_success(result) stream = get_stream("new_stream", realm) @@ -1536,21 +1536,19 @@ class SubscriptionPropertiesTest(ZulipTestCase): any invalid hex color codes are bounced. """ test_user = self.example_user('hamlet') - test_email = test_user.email - test_realm = test_user.realm - self.login(test_email) + self.login(test_user.email) old_subs, _ = gather_subscriptions(test_user) sub = old_subs[0] stream_id = sub['stream_id'] new_color = "#ffffff" # TODO: ensure that this is different from old_color - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": "color", "stream_id": stream_id, "value": "#ffffff"}])}) self.assert_json_success(result) - new_subs = gather_subscriptions(get_user(test_email, test_realm))[0] + new_subs = gather_subscriptions(test_user)[0] found_sub = None for sub in new_subs: if sub['stream_id'] == stream_id: @@ -1569,7 +1567,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): self.assertEqual(old_subs, new_subs) invalid_color = "3ffrff" - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": "color", "stream_id": stream_id, "value": invalid_color}])}) @@ -1580,9 +1578,8 @@ class SubscriptionPropertiesTest(ZulipTestCase): Updating the color property requires a `stream_id` key. """ test_user = self.example_user('hamlet') - test_email = test_user.email - self.login(test_email) - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + self.login(test_user.email) + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": "color", "value": "#ffffff"}])}) self.assert_json_error( @@ -1592,14 +1589,12 @@ class SubscriptionPropertiesTest(ZulipTestCase): """ Updating the color property requires a subscribed stream. """ - test_email = self.example_email("hamlet") - self.login(test_email) - test_realm = get_realm("zulip") + test_user = self.example_user("hamlet") + self.login(test_user.email) - subscribed, unsubscribed, never_subscribed = gather_subscriptions_helper( - get_user(test_email, test_realm)) + subscribed, unsubscribed, never_subscribed = gather_subscriptions_helper(test_user) not_subbed = unsubscribed + never_subscribed - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": "color", "stream_id": not_subbed[0]["stream_id"], "value": "#ffffff"}])}) @@ -1611,10 +1606,9 @@ class SubscriptionPropertiesTest(ZulipTestCase): Updating the color property requires a color. """ test_user = self.example_user('hamlet') - test_email = test_user.email - self.login(test_email) + self.login(test_user.email) subs = gather_subscriptions(test_user)[0] - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": "color", "stream_id": subs[0]["stream_id"]}])}) self.assert_json_error( @@ -1626,12 +1620,11 @@ class SubscriptionPropertiesTest(ZulipTestCase): sets the property. """ test_user = self.example_user('hamlet') - test_email = test_user.email - self.login(test_email) + self.login(test_user.email) subs = gather_subscriptions(test_user)[0] sub = subs[0] - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": "wildcard_mentions_notify", "stream_id": sub["stream_id"], "value": True}])}) @@ -1647,29 +1640,27 @@ class SubscriptionPropertiesTest(ZulipTestCase): A POST request to /api/v1/users/me/subscriptions/properties with stream_id and pin_to_top data pins the stream. """ - user_profile = self.example_user('hamlet') - test_email = user_profile.email - self.login(test_email) + user = self.example_user('hamlet') + self.login(user.email) - old_subs, _ = gather_subscriptions(user_profile) + old_subs, _ = gather_subscriptions(user) sub = old_subs[0] stream_id = sub['stream_id'] new_pin_to_top = not sub['pin_to_top'] - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": "pin_to_top", "stream_id": stream_id, "value": new_pin_to_top}])}) self.assert_json_success(result) - updated_sub = get_subscription(sub['name'], user_profile) + updated_sub = get_subscription(sub['name'], user) self.assertIsNotNone(updated_sub) self.assertEqual(updated_sub.pin_to_top, new_pin_to_top) def test_change_is_muted(self) -> None: test_user = self.example_user('hamlet') - test_email = test_user.email - self.login(test_email) + self.login(test_user.email) subs = gather_subscriptions(test_user)[0] sub = Subscription.objects.get(recipient__type=Recipient.STREAM, @@ -1680,7 +1671,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): events = [] # type: List[Mapping[str, Any]] property_name = "is_muted" with tornado_redirected_to_list(events): - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": True, "stream_id": subs[0]["stream_id"]}])}) @@ -1696,7 +1687,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): events = [] legacy_property_name = 'in_home_view' with tornado_redirected_to_list(events): - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": legacy_property_name, "value": True, "stream_id": subs[0]["stream_id"]}])}) @@ -1712,7 +1703,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): events = [] with tornado_redirected_to_list(events): - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": legacy_property_name, "value": False, "stream_id": subs[0]["stream_id"]}])}) @@ -1731,12 +1722,11 @@ class SubscriptionPropertiesTest(ZulipTestCase): Trying to set a property incorrectly returns a JSON error. """ test_user = self.example_user('hamlet') - test_email = test_user.email - self.login(test_email) + self.login(test_user.email) subs = gather_subscriptions(test_user)[0] property_name = "is_muted" - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": "bad", "stream_id": subs[0]["stream_id"]}])}) @@ -1744,7 +1734,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): '%s is not a boolean' % (property_name,)) property_name = "in_home_view" - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": "bad", "stream_id": subs[0]["stream_id"]}])}) @@ -1752,7 +1742,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): '%s is not a boolean' % (property_name,)) property_name = "desktop_notifications" - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": "bad", "stream_id": subs[0]["stream_id"]}])}) @@ -1760,7 +1750,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): '%s is not a boolean' % (property_name,)) property_name = "audible_notifications" - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": "bad", "stream_id": subs[0]["stream_id"]}])}) @@ -1768,7 +1758,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): '%s is not a boolean' % (property_name,)) property_name = "push_notifications" - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": "bad", "stream_id": subs[0]["stream_id"]}])}) @@ -1776,7 +1766,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): '%s is not a boolean' % (property_name,)) property_name = "email_notifications" - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": "bad", "stream_id": subs[0]["stream_id"]}])}) @@ -1784,7 +1774,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): '%s is not a boolean' % (property_name,)) property_name = "wildcard_mentions_notify" - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": "bad", "stream_id": subs[0]["stream_id"]}])}) @@ -1793,7 +1783,7 @@ class SubscriptionPropertiesTest(ZulipTestCase): "%s is not a boolean" % (property_name,)) property_name = "color" - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": False, "stream_id": subs[0]["stream_id"]}])}) @@ -1801,11 +1791,11 @@ class SubscriptionPropertiesTest(ZulipTestCase): '%s is not a string' % (property_name,)) def test_json_subscription_property_invalid_stream(self) -> None: - test_email = self.example_email("hamlet") - self.login(test_email) + test_user = self.example_user("hamlet") + self.login(test_user.email) stream_id = 1000 - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": "is_muted", "stream_id": stream_id, "value": False}])}) @@ -1816,10 +1806,9 @@ class SubscriptionPropertiesTest(ZulipTestCase): Trying to set an invalid property returns a JSON error. """ test_user = self.example_user('hamlet') - test_email = test_user.email - self.login(test_email) + self.login(test_user.email) subs = gather_subscriptions(test_user)[0] - result = self.api_post(test_email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(test_user, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": "bad", "value": "bad", "stream_id": subs[0]["stream_id"]}])}) @@ -1828,56 +1817,54 @@ class SubscriptionPropertiesTest(ZulipTestCase): class SubscriptionRestApiTest(ZulipTestCase): def test_basic_add_delete(self) -> None: - hamlet = self.example_user('hamlet') - email = hamlet.email - self.login(hamlet.email) + user = self.example_user('hamlet') + self.login(user.email) # add request = { 'add': ujson.dumps([{'name': 'my_test_stream_1'}]) } - result = self.api_patch(email, "/api/v1/users/me/subscriptions", request) + result = self.api_patch(user, "/api/v1/users/me/subscriptions", request) self.assert_json_success(result) - streams = self.get_streams(hamlet) + streams = self.get_streams(user) self.assertTrue('my_test_stream_1' in streams) # now delete the same stream request = { 'delete': ujson.dumps(['my_test_stream_1']) } - result = self.api_patch(email, "/api/v1/users/me/subscriptions", request) + result = self.api_patch(user, "/api/v1/users/me/subscriptions", request) self.assert_json_success(result) - streams = self.get_streams(hamlet) + streams = self.get_streams(user) self.assertTrue('my_test_stream_1' not in streams) def test_add_with_color(self) -> None: - email = self.example_email('hamlet') - self.login(email) + user = self.example_user('hamlet') + self.login(user.email) # add with color proposition request = { 'add': ujson.dumps([{'name': 'my_test_stream_2', 'color': '#afafaf'}]) } - result = self.api_patch(email, "/api/v1/users/me/subscriptions", request) + result = self.api_patch(user, "/api/v1/users/me/subscriptions", request) self.assert_json_success(result) # incorrect color format request = { 'subscriptions': ujson.dumps([{'name': 'my_test_stream_3', 'color': '#0g0g0g'}]) } - result = self.api_post(email, "/api/v1/users/me/subscriptions", request) + result = self.api_post(user, "/api/v1/users/me/subscriptions", request) self.assert_json_error(result, 'subscriptions[0]["color"] is not a valid hex color code') def test_api_valid_property(self) -> None: """ Trying to set valid json returns success message. """ - test_user = self.example_user('hamlet') - test_email = test_user.email + user = self.example_user('hamlet') - self.login(test_email) - subs = gather_subscriptions(test_user)[0] - result = self.api_patch(test_email, "/api/v1/users/me/subscriptions/%d" % (subs[0]["stream_id"],), + self.login(user.email) + subs = gather_subscriptions(user)[0] + result = self.api_patch(user, "/api/v1/users/me/subscriptions/%d" % (subs[0]["stream_id"],), {'property': 'color', 'value': '#c2c2c2'}) self.assert_json_success(result) @@ -1886,13 +1873,12 @@ class SubscriptionRestApiTest(ZulipTestCase): Trying to set an invalid property returns a JSON error. """ - test_user = self.example_user('hamlet') - test_email = test_user.email + user = self.example_user('hamlet') - self.login(test_email) - subs = gather_subscriptions(test_user)[0] + self.login(user.email) + subs = gather_subscriptions(user)[0] - result = self.api_patch(test_email, "/api/v1/users/me/subscriptions/%d" % (subs[0]["stream_id"],), + result = self.api_patch(user, "/api/v1/users/me/subscriptions/%d" % (subs[0]["stream_id"],), {'property': 'invalid', 'value': 'somevalue'}) self.assert_json_error(result, "Unknown subscription property: invalid") @@ -1901,22 +1887,22 @@ class SubscriptionRestApiTest(ZulipTestCase): """ Trying to set an invalid stream id returns a JSON error. """ - test_email = self.example_email("hamlet") - self.login(test_email) - result = self.api_patch(test_email, "/api/v1/users/me/subscriptions/121", + user = self.example_user("hamlet") + self.login(user.email) + result = self.api_patch(user, "/api/v1/users/me/subscriptions/121", {'property': 'is_muted', 'value': 'somevalue'}) self.assert_json_error(result, "Invalid stream id") def test_bad_add_parameters(self) -> None: - email = self.example_email('hamlet') - self.login(email) + user = self.example_user('hamlet') + self.login(user.email) def check_for_error(val: Any, expected_message: str) -> None: request = { 'add': ujson.dumps(val) } - result = self.api_patch(email, "/api/v1/users/me/subscriptions", request) + result = self.api_patch(user, "/api/v1/users/me/subscriptions", request) self.assert_json_error(result, expected_message) check_for_error(['foo'], 'add[0] is not a dict') @@ -1924,31 +1910,31 @@ class SubscriptionRestApiTest(ZulipTestCase): check_for_error([{'name': {}}], 'add[0]["name"] is not a string') def test_bad_principals(self) -> None: - email = self.example_email('hamlet') - self.login(email) + user = self.example_user('hamlet') + self.login(user.email) request = { 'add': ujson.dumps([{'name': 'my_new_stream'}]), 'principals': ujson.dumps([{}]), } - result = self.api_patch(email, "/api/v1/users/me/subscriptions", request) + result = self.api_patch(user, "/api/v1/users/me/subscriptions", request) self.assert_json_error(result, 'principals[0] is not a string') def test_bad_delete_parameters(self) -> None: - email = self.example_email('hamlet') - self.login(email) + user = self.example_user('hamlet') + self.login(user.email) request = { 'delete': ujson.dumps([{'name': 'my_test_stream_1'}]) } - result = self.api_patch(email, "/api/v1/users/me/subscriptions", request) + result = self.api_patch(user, "/api/v1/users/me/subscriptions", request) self.assert_json_error(result, "delete[0] is not a string") def test_add_or_delete_not_specified(self) -> None: - email = self.example_email('hamlet') - self.login(email) + user = self.example_user('hamlet') + self.login(user.email) - result = self.api_patch(email, "/api/v1/users/me/subscriptions", {}) + result = self.api_patch(user, "/api/v1/users/me/subscriptions", {}) self.assert_json_error(result, 'Nothing to do. Specify at least one of "add" or "delete".') @@ -1956,38 +1942,38 @@ class SubscriptionRestApiTest(ZulipTestCase): """ Only way to force an error is with a empty string. """ - email = self.example_email('hamlet') - self.login(email) + user = self.example_user('hamlet') + self.login(user.email) invalid_stream_name = "" request = { 'delete': ujson.dumps([invalid_stream_name]) } - result = self.api_patch(email, "/api/v1/users/me/subscriptions", request) + result = self.api_patch(user, "/api/v1/users/me/subscriptions", request) self.assert_json_error(result, "Invalid stream name '%s'" % (invalid_stream_name,)) def test_stream_name_too_long(self) -> None: - email = self.example_email('hamlet') - self.login(email) + user = self.example_user('hamlet') + self.login(user.email) long_stream_name = "a" * 61 request = { 'delete': ujson.dumps([long_stream_name]) } - result = self.api_patch(email, "/api/v1/users/me/subscriptions", request) + result = self.api_patch(user, "/api/v1/users/me/subscriptions", request) self.assert_json_error(result, "Stream name too long (limit: 60 characters).") def test_stream_name_contains_null(self) -> None: - email = self.example_email('hamlet') - self.login(email) + user = self.example_user('hamlet') + self.login(user.email) stream_name = "abc\000" request = { 'delete': ujson.dumps([stream_name]) } - result = self.api_patch(email, "/api/v1/users/me/subscriptions", request) + result = self.api_patch(user, "/api/v1/users/me/subscriptions", request) self.assert_json_error(result, "Stream name '%s' contains NULL (0x00) characters." % (stream_name,)) @@ -2051,8 +2037,7 @@ class SubscriptionAPITest(ZulipTestCase): """ Calling /api/v1/users/me/subscriptions should successfully return your subscriptions. """ - email = self.test_email - result = self.api_get(email, "/api/v1/users/me/subscriptions") + result = self.api_get(self.test_user, "/api/v1/users/me/subscriptions") self.assert_json_success(result) json = result.json() self.assertIn("subscriptions", json) @@ -2442,7 +2427,7 @@ class SubscriptionAPITest(ZulipTestCase): streams_to_sub, dict(principals=ujson.dumps([user1.email, user2.email])), ) - self.assert_length(queries, 42) + self.assert_length(queries, 40) self.assert_length(events, 7) for ev in [x for x in events if x['event']['type'] not in ('message', 'stream')]: @@ -2815,7 +2800,7 @@ class SubscriptionAPITest(ZulipTestCase): # Make sure Zephyr mirroring realms such as MIT do not get # any tornado subscription events self.assert_length(events, 0) - self.assert_length(queries, 7) + self.assert_length(queries, 5) events = [] with tornado_redirected_to_list(events): @@ -2841,7 +2826,7 @@ class SubscriptionAPITest(ZulipTestCase): dict(principals=ujson.dumps([self.test_email])), ) # Make sure we don't make O(streams) queries - self.assert_length(queries, 18) + self.assert_length(queries, 16) def test_subscriptions_add_for_principal(self) -> None: """ @@ -3231,7 +3216,7 @@ class SubscriptionAPITest(ZulipTestCase): [new_streams[0]], dict(principals=ujson.dumps([user1.email, user2.email])), ) - self.assert_length(queries, 42) + self.assert_length(queries, 40) # Test creating private stream. with queries_captured() as queries: @@ -3269,9 +3254,9 @@ class GetStreamsTest(ZulipTestCase): # Check it correctly lists the bot owner's subs with # include_owner_subscribed=true result = self.api_get( - test_bot.email, + test_bot, "/api/v1/streams?include_owner_subscribed=true&include_public=false&include_subscribed=false") - owner_subs = self.api_get(hamlet.email, "/api/v1/users/me/subscriptions") + owner_subs = self.api_get(hamlet, "/api/v1/users/me/subscriptions") self.assert_json_success(result) json = result.json() @@ -3288,7 +3273,7 @@ class GetStreamsTest(ZulipTestCase): # bot's subs self.subscribe(test_bot, 'Scotland') result = self.api_get( - test_bot.email, + test_bot, "/api/v1/streams?include_owner_subscribed=true&include_public=false&include_subscribed=true" ) @@ -3308,7 +3293,7 @@ class GetStreamsTest(ZulipTestCase): self.make_stream('private_stream', realm=realm, invite_only=True) self.subscribe(test_bot, 'private_stream') result = self.api_get( - test_bot.email, + test_bot, "/api/v1/streams?include_owner_subscribed=true&include_public=true&include_subscribed=false" ) @@ -3327,7 +3312,7 @@ class GetStreamsTest(ZulipTestCase): # Check it correctly lists the bot owner's subs + all public streams + # the bot's subs result = self.api_get( - test_bot.email, + test_bot, "/api/v1/streams?include_owner_subscribed=true&include_public=true&include_subscribed=true" ) @@ -3348,14 +3333,14 @@ class GetStreamsTest(ZulipTestCase): # Check non-superuser can't use include_all_active normal_user = self.example_user('cordelia') - result = self.api_get(normal_user.email, url) + result = self.api_get(normal_user, url) self.assertEqual(result.status_code, 400) # Even realm admin users can't see all # active streams (without additional privileges). admin_user = self.example_user('iago') self.assertTrue(admin_user.is_realm_admin) - result = self.api_get(admin_user.email, url) + result = self.api_get(admin_user, url) self.assertEqual(result.status_code, 400) ''' @@ -3371,7 +3356,7 @@ class GetStreamsTest(ZulipTestCase): super_user.is_api_super_user = True super_user.save() - result = self.api_get(super_user.email, url) + result = self.api_get(super_user, url) self.assert_json_success(result) json = result.json() @@ -3390,13 +3375,13 @@ class GetStreamsTest(ZulipTestCase): Ensure that the query we use to get public streams successfully returns a list of streams """ - email = self.example_email('hamlet') + user = self.example_user('hamlet') realm = get_realm('zulip') - self.login(email) + self.login(user.email) # Check it correctly lists the user's subs with include_public=false - result = self.api_get(email, "/api/v1/streams?include_public=false") - result2 = self.api_get(email, "/api/v1/users/me/subscriptions") + result = self.api_get(user, "/api/v1/streams?include_public=false") + result2 = self.api_get(user, "/api/v1/users/me/subscriptions") self.assert_json_success(result) json = result.json() @@ -3412,7 +3397,7 @@ class GetStreamsTest(ZulipTestCase): sorted([s["name"] for s in json2["subscriptions"]])) # Check it correctly lists all public streams with include_subscribed=false - result = self.api_get(email, "/api/v1/streams?include_public=true&include_subscribed=false") + result = self.api_get(user, "/api/v1/streams?include_public=true&include_subscribed=false") self.assert_json_success(result) json = result.json() @@ -3468,7 +3453,7 @@ class InviteOnlyStreamTest(ZulipTestCase): self.assert_json_success(result1) result2 = self.common_subscribe_to_streams(user, ["Normandy"], invite_only=False) self.assert_json_success(result2) - result = self.api_get(user.email, "/api/v1/users/me/subscriptions") + result = self.api_get(user, "/api/v1/users/me/subscriptions") self.assert_json_success(result) self.assertIn("subscriptions", result.json()) for sub in result.json()["subscriptions"]: @@ -3512,8 +3497,7 @@ class InviteOnlyStreamTest(ZulipTestCase): # Inviting another user to an invite-only stream is allowed user_profile = self.example_user('hamlet') - email = user_profile.email - self.login(email) + self.login(user_profile.email) result = self.common_subscribe_to_streams( user_profile, [stream_name], extra_post_data={'principals': ujson.dumps([self.example_email("othello")])}) @@ -3524,7 +3508,7 @@ class InviteOnlyStreamTest(ZulipTestCase): # Make sure both users are subscribed to this stream stream_id = get_stream(stream_name, user_profile.realm).id - result = self.api_get(email, "/api/v1/streams/%d/members" % (stream_id,)) + result = self.api_get(user_profile, "/api/v1/streams/%d/members" % (stream_id,)) self.assert_json_success(result) json = result.json() @@ -3565,10 +3549,10 @@ class GetSubscribersTest(ZulipTestCase): stream_name, realm)] self.assertEqual(sorted(result["subscribers"]), sorted(true_subscribers)) - def make_subscriber_request(self, stream_id: int, email: Optional[str]=None) -> HttpResponse: - if email is None: - email = self.email - return self.api_get(email, "/api/v1/streams/%d/members" % (stream_id,)) + def make_subscriber_request(self, stream_id: int, user: Optional[UserProfile]=None) -> HttpResponse: + if user is None: + user = self.user_profile + return self.api_get(user, "/api/v1/streams/%d/members" % (stream_id,)) def make_successful_subscriber_request(self, stream_name: str) -> None: stream_id = get_stream(stream_name, self.user_profile.realm).id @@ -3910,11 +3894,10 @@ class GetSubscribersTest(ZulipTestCase): self.common_subscribe_to_streams(self.user_profile, [stream_name], invite_only=True) user_profile = self.example_user('othello') - other_email = user_profile.email # Try to fetch the subscriber list as a non-member & non-realm-admin-user. stream_id = get_stream(stream_name, user_profile.realm).id - result = self.make_subscriber_request(stream_id, email=other_email) + result = self.make_subscriber_request(stream_id, user=user_profile) self.assert_json_error(result, "Invalid stream id") # Try to fetch the subscriber list as a non-member & realm-admin-user. diff --git a/zerver/tests/test_thumbnail.py b/zerver/tests/test_thumbnail.py index 1cfe2d57c1..53234fd278 100644 --- a/zerver/tests/test_thumbnail.py +++ b/zerver/tests/test_thumbnail.py @@ -33,7 +33,8 @@ class ThumbnailTest(ZulipTestCase): settings.S3_AUTH_UPLOADS_BUCKET, settings.S3_AVATAR_BUCKET) - self.login(self.example_email("hamlet")) + hamlet = self.example_user('hamlet') + self.login(hamlet.email) fp = StringIO("zulip!") fp.name = "zulip.jpeg" @@ -79,7 +80,7 @@ class ThumbnailTest(ZulipTestCase): # Tests the /api/v1/thumbnail api endpoint with standard API auth self.logout() result = self.api_get( - self.example_email("hamlet"), + hamlet, '/thumbnail?url=%s&size=full' % (quoted_uri,)) self.assertEqual(result.status_code, 302, result) @@ -112,7 +113,7 @@ class ThumbnailTest(ZulipTestCase): # Test api endpoint with standard API authentication. self.logout() user_profile = self.example_user("hamlet") - result = self.api_get(user_profile.email, + result = self.api_get(user_profile, "/thumbnail?url=%s&size=thumbnail" % (quoted_url,)) self.assertEqual(result.status_code, 302, result) expected_part_url = '/0x300/smart/filters:no_upscale():sharpen(0.5,0.2,true)/' + encoded_url + '/source_type/external' @@ -227,7 +228,7 @@ class ThumbnailTest(ZulipTestCase): self.logout() user_profile = self.example_user("hamlet") result = self.api_get( - self.example_email("hamlet"), + user_profile, '/thumbnail?url=%s&size=full' % (quoted_uri,)) self.assertEqual(result.status_code, 302, result) diff --git a/zerver/tests/test_typing.py b/zerver/tests/test_typing.py index a2e81ad84c..fa8a4a15d4 100644 --- a/zerver/tests/test_typing.py +++ b/zerver/tests/test_typing.py @@ -24,7 +24,7 @@ class TypingValidateOperatorTest(ZulipTestCase): params = dict( to=ujson.dumps([sender.id]), ) - result = self.api_post(sender.email, '/api/v1/typing', params) + result = self.api_post(sender, '/api/v1/typing', params) self.assert_json_error(result, 'Missing \'op\' argument') def test_invalid_parameter(self) -> None: @@ -36,7 +36,7 @@ class TypingValidateOperatorTest(ZulipTestCase): to=ujson.dumps([sender.id]), op='foo' ) - result = self.api_post(sender.email, '/api/v1/typing', params) + result = self.api_post(sender, '/api/v1/typing', params) self.assert_json_error(result, 'Invalid \'op\' value (should be start or stop)') class TypingValidateUsersTest(ZulipTestCase): @@ -44,7 +44,7 @@ class TypingValidateUsersTest(ZulipTestCase): """ Sending typing notification without recipient fails """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") result = self.api_post(sender, '/api/v1/typing', {'op': 'start', 'to': '[]'}) self.assert_json_error(result, 'Missing parameter: \'to\' (recipient)') @@ -52,7 +52,7 @@ class TypingValidateUsersTest(ZulipTestCase): """ Sending typing notification without recipient fails """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") result = self.api_post(sender, '/api/v1/typing', {'op': 'start'}) self.assert_json_error(result, "Missing parameter: 'to' (recipient)") @@ -60,7 +60,7 @@ class TypingValidateUsersTest(ZulipTestCase): """ Sending typing notification to invalid recipient fails """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") invalid = 'bad email' result = self.api_post(sender, '/api/v1/typing', {'op': 'start', 'to': invalid}) self.assert_json_error(result, "Invalid email 'bad email'") @@ -69,7 +69,7 @@ class TypingValidateUsersTest(ZulipTestCase): """ Sending typing notification to invalid recipient fails """ - sender = self.example_email("hamlet") + sender = self.example_user("hamlet") invalid = '[9999999]' result = self.api_post(sender, '/api/v1/typing', {'op': 'start', 'to': invalid}) self.assert_json_error(result, 'Invalid user ID 9999999') @@ -90,11 +90,11 @@ class TypingHappyPathTest(ZulipTestCase): events = [] # type: List[Mapping[str, Any]] with queries_captured() as queries: with tornado_redirected_to_list(events): - result = self.api_post(sender.email, '/api/v1/typing', params) + result = self.api_post(sender, '/api/v1/typing', params) self.assert_json_success(result) self.assertEqual(len(events), 1) - self.assertEqual(len(queries), 6) + self.assertEqual(len(queries), 4) event = events[0]['event'] event_recipient_emails = set(user['email'] for user in event['recipients']) @@ -127,10 +127,10 @@ class TypingHappyPathTest(ZulipTestCase): with queries_captured() as queries: with tornado_redirected_to_list(events): - result = self.api_post(sender.email, '/api/v1/typing', params) + result = self.api_post(sender, '/api/v1/typing', params) self.assert_json_success(result) self.assertEqual(len(events), 1) - self.assertEqual(len(queries), 7) + self.assertEqual(len(queries), 5) # We should not be adding new Huddles just because # a user started typing in the compose box. Let's @@ -161,7 +161,7 @@ class TypingHappyPathTest(ZulipTestCase): events = [] # type: List[Mapping[str, Any]] with tornado_redirected_to_list(events): result = self.api_post( - email, + user, '/api/v1/typing', { 'to': ujson.dumps([user.id]), @@ -201,7 +201,7 @@ class TypingHappyPathTest(ZulipTestCase): events = [] # type: List[Mapping[str, Any]] with tornado_redirected_to_list(events): - result = self.api_post(sender.email, '/api/v1/typing', params) + result = self.api_post(sender, '/api/v1/typing', params) self.assert_json_success(result) self.assertEqual(len(events), 1) @@ -234,7 +234,7 @@ class TypingHappyPathTest(ZulipTestCase): to=ujson.dumps([user.id]), op='stop' ) - result = self.api_post(email, '/api/v1/typing', params) + result = self.api_post(user, '/api/v1/typing', params) self.assert_json_success(result) self.assertEqual(len(events), 1) @@ -268,7 +268,7 @@ class TypingHappyPathTest(ZulipTestCase): to=ujson.dumps([recipient.id]), op='stop' ) - result = self.api_post(sender.email, '/api/v1/typing', params) + result = self.api_post(sender, '/api/v1/typing', params) self.assert_json_success(result) self.assertEqual(len(events), 1) @@ -305,7 +305,7 @@ class TypingLegacyMobileSupportTest(ZulipTestCase): events = [] # type: List[Mapping[str, Any]] with tornado_redirected_to_list(events): - result = self.api_post(sender.email, '/api/v1/typing', params) + result = self.api_post(sender, '/api/v1/typing', params) self.assert_json_success(result) event = events[0]['event'] diff --git a/zerver/tests/test_unread.py b/zerver/tests/test_unread.py index 18fa35fc45..adaa4e6a2a 100644 --- a/zerver/tests/test_unread.py +++ b/zerver/tests/test_unread.py @@ -52,7 +52,7 @@ class PointerTest(ZulipTestCase): email = user.email self.assertEqual(user.pointer, -1) msg_id = self.send_stream_message(self.example_user("othello"), "Verona") - result = self.api_post(email, "/api/v1/users/me/pointer", {"pointer": msg_id}) + result = self.api_post(user, "/api/v1/users/me/pointer", {"pointer": msg_id}) self.assert_json_success(result) self.assertEqual(get_user(email, user.realm).pointer, msg_id) @@ -496,11 +496,11 @@ class PushNotificationMarkReadFlowsTest(ZulipTestCase): second_stream = self.subscribe(user_profile, "second_stream") property_name = "push_notifications" - result = self.api_post(user_profile.email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(user_profile, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": True, "stream_id": stream.id}])}) - result = self.api_post(user_profile.email, "/api/v1/users/me/subscriptions/properties", + result = self.api_post(user_profile, "/api/v1/users/me/subscriptions/properties", {"subscription_data": ujson.dumps([{"property": property_name, "value": True, "stream_id": second_stream.id}])}) diff --git a/zerver/tests/test_upload.py b/zerver/tests/test_upload.py index fabda45623..d35a163952 100644 --- a/zerver/tests/test_upload.py +++ b/zerver/tests/test_upload.py @@ -73,7 +73,7 @@ class FileUploadTest(UploadSerializeMixin, ZulipTestCase): fp.name = "zulip.txt" # Upload file via API - result = self.api_post(self.example_email("hamlet"), '/api/v1/user_uploads', {'file': fp}) + result = self.api_post(self.example_user("hamlet"), '/api/v1/user_uploads', {'file': fp}) self.assertIn("uri", result.json()) uri = result.json()['uri'] base = '/user_uploads/' @@ -81,7 +81,7 @@ class FileUploadTest(UploadSerializeMixin, ZulipTestCase): # Download file via API self.logout() - response = self.api_get(self.example_email("hamlet"), uri) + response = self.api_get(self.example_user("hamlet"), uri) self.assertEqual(response.status_code, 200) data = b"".join(response.streaming_content) self.assertEqual(b"zulip!", data) @@ -100,7 +100,7 @@ class FileUploadTest(UploadSerializeMixin, ZulipTestCase): fp.name = "zulip.txt" # Upload file via API - result = self.api_post(self.example_email("hamlet"), '/api/v1/user_uploads', {'file': fp}) + result = self.api_post(self.example_user("hamlet"), '/api/v1/user_uploads', {'file': fp}) self.assertIn("uri", result.json()) uri = result.json()['uri'] base = '/user_uploads/' @@ -127,7 +127,7 @@ class FileUploadTest(UploadSerializeMixin, ZulipTestCase): """ fp = StringIO("zulip!") fp.name = "pasted_file" - result = self.api_post(self.example_email("hamlet"), + result = self.api_post(self.example_user("hamlet"), "/api/v1/user_uploads?mimetype=image/png", {"file": fp}) self.assertEqual(result.status_code, 200) @@ -497,7 +497,7 @@ class FileUploadTest(UploadSerializeMixin, ZulipTestCase): def test_file_download_authorization_invite_only(self) -> None: user = self.example_user("hamlet") subscribed_emails = [user.email, self.example_email("cordelia")] - unsubscribed_emails = [self.example_email("othello"), self.example_email("prospero")] + unsubscribed_users = [self.example_user("othello"), self.example_user("prospero")] stream_name = "test-subscribe" self.make_stream(stream_name, realm=user.realm, invite_only=True, history_public_to_subscribers=False) @@ -534,17 +534,17 @@ class FileUploadTest(UploadSerializeMixin, ZulipTestCase): self.logout() self.assertEqual(len(queries), 6) - def assert_cannot_access_file(user_email: str) -> None: - response = self.api_get(user_email, uri) + def assert_cannot_access_file(user: UserProfile) -> None: + response = self.api_get(user, uri) self.assertEqual(response.status_code, 403) self.assert_in_response("You are not authorized to view this file.", response) late_subscribed_user = self.example_user("aaron") self.subscribe(late_subscribed_user, stream_name) - assert_cannot_access_file(late_subscribed_user.email) + assert_cannot_access_file(late_subscribed_user) # Unsubscribed user should not be able to view file - for unsubscribed_user in unsubscribed_emails: + for unsubscribed_user in unsubscribed_users: assert_cannot_access_file(unsubscribed_user) def test_file_download_authorization_invite_only_with_shared_history(self) -> None: @@ -858,8 +858,8 @@ class AvatarTest(UploadSerializeMixin, ZulipTestCase): self.assertTrue(redirect_url.endswith(str(avatar_url(cordelia)) + '&foo=bar')) def test_get_user_avatar(self) -> None: - hamlet = self.example_email("hamlet") - self.login(hamlet) + hamlet = self.example_user("hamlet") + self.login(hamlet.email) cordelia = self.example_user('cordelia') cross_realm_bot = get_system_bot(settings.WELCOME_BOT) @@ -902,8 +902,8 @@ class AvatarTest(UploadSerializeMixin, ZulipTestCase): status_code=401) def test_get_user_avatar_medium(self) -> None: - hamlet = self.example_email("hamlet") - self.login(hamlet) + hamlet = self.example_user("hamlet") + self.login(hamlet.email) cordelia = self.example_user('cordelia') cordelia.avatar_source = UserProfile.AVATAR_FROM_USER diff --git a/zerver/tests/test_user_groups.py b/zerver/tests/test_user_groups.py index 55a718d07e..fdd7e3d42a 100644 --- a/zerver/tests/test_user_groups.py +++ b/zerver/tests/test_user_groups.py @@ -429,7 +429,7 @@ class UserGroupAPITestCase(ZulipTestCase): ) with mock.patch('logging.info'): - result = self.api_post(sender.email, "/json/messages", payload) + result = self.api_post(sender, "/json/messages", payload) self.assert_json_success(result) diff --git a/zerver/tests/test_users.py b/zerver/tests/test_users.py index 3ac152a9a1..4093731e3e 100644 --- a/zerver/tests/test_users.py +++ b/zerver/tests/test_users.py @@ -1286,7 +1286,7 @@ class GetProfileTest(ZulipTestCase): user_profile = self.example_user(user_id) self.send_stream_message(user_profile, "Verona", "hello") - result = self.api_get(user_profile.email, "/api/v1/users/me") + result = self.api_get(user_profile, "/api/v1/users/me") max_id = most_recent_message(user_profile).id @@ -1384,7 +1384,7 @@ class GetProfileTest(ZulipTestCase): def test_get_all_profiles_avatar_urls(self) -> None: user_profile = self.example_user('hamlet') - result = self.api_get(self.example_email("hamlet"), "/api/v1/users") + result = self.api_get(self.example_user("hamlet"), "/api/v1/users") self.assert_json_success(result) for user in result.json()['members']: diff --git a/zerver/tests/test_widgets.py b/zerver/tests/test_widgets.py index b819196d0a..4cb54a541e 100644 --- a/zerver/tests/test_widgets.py +++ b/zerver/tests/test_widgets.py @@ -62,7 +62,7 @@ class WidgetContentTestCase(ZulipTestCase): self.assertEqual(check_widget_content(obj), None) def test_message_error_handling(self) -> None: - sender_email = self.example_email('cordelia') + sender = self.example_user('cordelia') stream_name = 'Verona' payload = dict( @@ -74,12 +74,12 @@ class WidgetContentTestCase(ZulipTestCase): ) payload['widget_content'] = '{{{{{{' # unparsable - result = self.api_post(sender_email, "/api/v1/messages", payload) + result = self.api_post(sender, "/api/v1/messages", payload) self.assert_json_error_contains(result, 'Widgets: API programmer sent invalid JSON') bogus_data = dict(color='red', foo='bar', x=2) payload['widget_content'] = ujson.dumps(bogus_data) - result = self.api_post(sender_email, "/api/v1/messages", payload) + result = self.api_post(sender, "/api/v1/messages", payload) self.assert_json_error_contains(result, 'Widgets: widget_type is not in widget_content') def test_get_widget_data_for_non_widget_messages(self) -> None: @@ -106,7 +106,7 @@ class WidgetContentTestCase(ZulipTestCase): # Users can send widget_content directly on messages # using the `widget_content` field. - sender_email = self.example_email('cordelia') + sender = self.example_user('cordelia') stream_name = 'Verona' content = 'does-not-matter' zform_data = dict( @@ -130,7 +130,7 @@ class WidgetContentTestCase(ZulipTestCase): content=content, widget_content=widget_content, ) - result = self.api_post(sender_email, "/api/v1/messages", payload) + result = self.api_post(sender, "/api/v1/messages", payload) self.assert_json_success(result) message = self.get_last_message() @@ -150,7 +150,7 @@ class WidgetContentTestCase(ZulipTestCase): # and it also helps us get test coverage that could apply # to future widgets. - sender_email = self.example_email('cordelia') + sender = self.example_user('cordelia') stream_name = 'Verona' content = '/tictactoe' @@ -161,7 +161,7 @@ class WidgetContentTestCase(ZulipTestCase): topic='whatever', content=content, ) - result = self.api_post(sender_email, "/api/v1/messages", payload) + result = self.api_post(sender, "/api/v1/messages", payload) self.assert_json_success(result) message = self.get_last_message() @@ -177,7 +177,7 @@ class WidgetContentTestCase(ZulipTestCase): self.assertEqual(ujson.loads(submessage.content), expected_submessage_content) def test_poll_command_extra_data(self) -> None: - sender_email = self.example_email('cordelia') + sender = self.example_user('cordelia') stream_name = 'Verona' # We test for both trailing and leading spaces, along with blank lines # for the poll options. @@ -190,7 +190,7 @@ class WidgetContentTestCase(ZulipTestCase): topic='whatever', content=content, ) - result = self.api_post(sender_email, "/api/v1/messages", payload) + result = self.api_post(sender, "/api/v1/messages", payload) self.assert_json_success(result) message = self.get_last_message() @@ -212,7 +212,7 @@ class WidgetContentTestCase(ZulipTestCase): content = '/poll' payload['content'] = content - result = self.api_post(sender_email, "/api/v1/messages", payload) + result = self.api_post(sender, "/api/v1/messages", payload) self.assert_json_success(result) expected_submessage_content = dict( diff --git a/zerver/webhooks/beanstalk/tests.py b/zerver/webhooks/beanstalk/tests.py index 42dfecd323..e7e9f49540 100644 --- a/zerver/webhooks/beanstalk/tests.py +++ b/zerver/webhooks/beanstalk/tests.py @@ -16,7 +16,7 @@ class BeanstalkHookTests(WebhookTestCase): expected_message = """Leo Franchi [pushed](http://lfranchi-svn.beanstalkapp.com/work-test) 1 commit to branch master. * add some stuff ([e50508d](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/e50508df))""" - self.api_stream_message(self.TEST_USER_EMAIL, 'git_singlecommit', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'git_singlecommit', expected_topic, expected_message, content_type=None) def test_git_single_filtered_by_branches(self) -> None: @@ -25,7 +25,7 @@ class BeanstalkHookTests(WebhookTestCase): expected_message = """Leo Franchi [pushed](http://lfranchi-svn.beanstalkapp.com/work-test) 1 commit to branch master. * add some stuff ([e50508d](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/e50508df))""" - self.api_stream_message(self.TEST_USER_EMAIL, 'git_singlecommit', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'git_singlecommit', expected_topic, expected_message, content_type=None) def test_git_multiple_committers(self) -> None: @@ -35,7 +35,7 @@ class BeanstalkHookTests(WebhookTestCase): * Added new file ([edf529c](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/edf529c7)) * Filled in new file with some stuff ([c2a191b](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/c2a191b9)) * More work to fix some bugs ([2009815](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/20098158))""" - self.api_stream_message(self.TEST_USER_EMAIL, 'git_multiple_committers', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'git_multiple_committers', expected_topic, expected_message, content_type=None) def test_git_multiple_committers_filtered_by_branches(self) -> None: @@ -46,7 +46,7 @@ class BeanstalkHookTests(WebhookTestCase): * Added new file ([edf529c](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/edf529c7)) * Filled in new file with some stuff ([c2a191b](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/c2a191b9)) * More work to fix some bugs ([2009815](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/20098158))""" - self.api_stream_message(self.TEST_USER_EMAIL, 'git_multiple_committers', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'git_multiple_committers', expected_topic, expected_message, content_type=None) def test_git_multiple(self) -> None: @@ -56,7 +56,7 @@ class BeanstalkHookTests(WebhookTestCase): * Added new file ([edf529c](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/edf529c7)) * Filled in new file with some stuff ([c2a191b](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/c2a191b9)) * More work to fix some bugs ([2009815](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/20098158))""" - self.api_stream_message(self.TEST_USER_EMAIL, 'git_multiple', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'git_multiple', expected_topic, expected_message, content_type=None) def test_git_multiple_filtered_by_branches(self) -> None: @@ -67,7 +67,7 @@ class BeanstalkHookTests(WebhookTestCase): * Added new file ([edf529c](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/edf529c7)) * Filled in new file with some stuff ([c2a191b](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/c2a191b9)) * More work to fix some bugs ([2009815](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/20098158))""" - self.api_stream_message(self.TEST_USER_EMAIL, 'git_multiple', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'git_multiple', expected_topic, expected_message, content_type=None) def test_git_more_than_limit(self) -> None: @@ -76,7 +76,7 @@ class BeanstalkHookTests(WebhookTestCase): expected_message = """Leo Franchi [pushed](http://lfranchi-svn.beanstalkapp.com/work-test) 50 commits to branch master. {}[and {} more commit(s)]""".format((commits_info * COMMITS_LIMIT), 50 - COMMITS_LIMIT) - self.api_stream_message(self.TEST_USER_EMAIL, 'git_morethanlimitcommits', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'git_morethanlimitcommits', expected_topic, expected_message, content_type=None) def test_git_more_than_limit_filtered_by_branches(self) -> None: @@ -86,14 +86,14 @@ class BeanstalkHookTests(WebhookTestCase): expected_message = """Leo Franchi [pushed](http://lfranchi-svn.beanstalkapp.com/work-test) 50 commits to branch master. {}[and {} more commit(s)]""".format((commits_info * COMMITS_LIMIT), 50 - COMMITS_LIMIT) - self.api_stream_message(self.TEST_USER_EMAIL, 'git_morethanlimitcommits', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'git_morethanlimitcommits', expected_topic, expected_message, content_type=None) @patch('zerver.webhooks.beanstalk.view.check_send_webhook_message') def test_git_single_filtered_by_branches_ignore(self, check_send_webhook_message_mock: MagicMock) -> None: self.url = self.build_webhook_url(branches='changes,development') payload = self.get_body('git_singlecommit') - result = self.api_post(self.TEST_USER_EMAIL, self.url, payload) + result = self.api_post(self.test_user, self.url, payload) self.assertFalse(check_send_webhook_message_mock.called) self.assert_json_success(result) @@ -102,7 +102,7 @@ class BeanstalkHookTests(WebhookTestCase): self, check_send_webhook_message_mock: MagicMock) -> None: self.url = self.build_webhook_url(branches='changes,development') payload = self.get_body('git_multiple_committers') - result = self.api_post(self.TEST_USER_EMAIL, self.url, payload) + result = self.api_post(self.test_user, self.url, payload) self.assertFalse(check_send_webhook_message_mock.called) self.assert_json_success(result) @@ -111,7 +111,7 @@ class BeanstalkHookTests(WebhookTestCase): self, check_send_webhook_message_mock: MagicMock) -> None: self.url = self.build_webhook_url(branches='changes,development') payload = self.get_body('git_multiple') - result = self.api_post(self.TEST_USER_EMAIL, self.url, payload) + result = self.api_post(self.test_user, self.url, payload) self.assertFalse(check_send_webhook_message_mock.called) self.assert_json_success(result) @@ -120,7 +120,7 @@ class BeanstalkHookTests(WebhookTestCase): self, check_send_webhook_message_mock: MagicMock) -> None: self.url = self.build_webhook_url(branches='changes,development') payload = self.get_body('git_morethanlimitcommits') - result = self.api_post(self.TEST_USER_EMAIL, self.url, payload) + result = self.api_post(self.test_user, self.url, payload) self.assertFalse(check_send_webhook_message_mock.called) self.assert_json_success(result) @@ -129,7 +129,7 @@ class BeanstalkHookTests(WebhookTestCase): expected_message = """Leo Franchi pushed [revision 3](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/3): > Removed a file and added another one!""" - self.api_stream_message(self.TEST_USER_EMAIL, 'svn_addremove', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'svn_addremove', expected_topic, expected_message, content_type=None) def test_svn_changefile(self) -> None: @@ -137,7 +137,7 @@ class BeanstalkHookTests(WebhookTestCase): expected_message = """Leo Franchi pushed [revision 2](http://lfranchi-svn.beanstalkapp.com/work-test/changesets/2): > Added some code""" - self.api_stream_message(self.TEST_USER_EMAIL, 'svn_changefile', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'svn_changefile', expected_topic, expected_message, content_type=None) def get_body(self, fixture_name: str) -> Dict[str, str]: diff --git a/zerver/webhooks/bitbucket/tests.py b/zerver/webhooks/bitbucket/tests.py index f6901f5e9e..6dddc1dd33 100644 --- a/zerver/webhooks/bitbucket/tests.py +++ b/zerver/webhooks/bitbucket/tests.py @@ -18,7 +18,7 @@ class BitbucketHookTests(WebhookTestCase): self.url = self.build_webhook_url(payload=self.get_body(fixture_name)) commit_info = u'* c ([25f93d2](https://bitbucket.org/kolaszek/repository-name/commits/25f93d22b719e2d678a7ad5ee0ef0d1fcdf39c12))' expected_message = u"kolaszek pushed 1 commit to branch master.\n\n{}".format(commit_info) - self.api_stream_message(self.TEST_USER_EMAIL, fixture_name, self.EXPECTED_TOPIC_BRANCH_EVENTS, + self.api_stream_message(self.test_user, fixture_name, self.EXPECTED_TOPIC_BRANCH_EVENTS, expected_message) def test_bitbucket_on_push_event_without_user_info(self) -> None: @@ -26,7 +26,7 @@ class BitbucketHookTests(WebhookTestCase): self.url = self.build_webhook_url(payload=self.get_body(fixture_name)) commit_info = u'* c ([25f93d2](https://bitbucket.org/kolaszek/repository-name/commits/25f93d22b719e2d678a7ad5ee0ef0d1fcdf39c12))' expected_message = u"Someone pushed 1 commit to branch master. Commits by eeshangarg (1).\n\n{}".format(commit_info) - self.api_stream_message(self.TEST_USER_EMAIL, fixture_name, self.EXPECTED_TOPIC_BRANCH_EVENTS, + self.api_stream_message(self.test_user, fixture_name, self.EXPECTED_TOPIC_BRANCH_EVENTS, expected_message) def test_bitbucket_on_push_event_filtered_by_branches(self) -> None: @@ -35,7 +35,7 @@ class BitbucketHookTests(WebhookTestCase): branches='master,development') commit_info = u'* c ([25f93d2](https://bitbucket.org/kolaszek/repository-name/commits/25f93d22b719e2d678a7ad5ee0ef0d1fcdf39c12))' expected_message = u"kolaszek pushed 1 commit to branch master.\n\n{}".format(commit_info) - self.api_stream_message(self.TEST_USER_EMAIL, fixture_name, self.EXPECTED_TOPIC_BRANCH_EVENTS, + self.api_stream_message(self.test_user, fixture_name, self.EXPECTED_TOPIC_BRANCH_EVENTS, expected_message) def test_bitbucket_on_push_commits_above_limit_event(self) -> None: @@ -43,7 +43,7 @@ class BitbucketHookTests(WebhookTestCase): self.url = self.build_webhook_url(payload=self.get_body(fixture_name)) commit_info = u'* c ([25f93d2](https://bitbucket.org/kolaszek/repository-name/commits/25f93d22b719e2d678a7ad5ee0ef0d1fcdf39c12))\n' expected_message = u"kolaszek pushed 50 commits to branch master.\n\n{}[and 30 more commit(s)]".format(commit_info * 20) - self.api_stream_message(self.TEST_USER_EMAIL, fixture_name, self.EXPECTED_TOPIC_BRANCH_EVENTS, + self.api_stream_message(self.test_user, fixture_name, self.EXPECTED_TOPIC_BRANCH_EVENTS, expected_message) def test_bitbucket_on_push_commits_above_limit_event_filtered_by_branches(self) -> None: @@ -52,21 +52,21 @@ class BitbucketHookTests(WebhookTestCase): branches='master,development') commit_info = u'* c ([25f93d2](https://bitbucket.org/kolaszek/repository-name/commits/25f93d22b719e2d678a7ad5ee0ef0d1fcdf39c12))\n' expected_message = u"kolaszek pushed 50 commits to branch master.\n\n{}[and 30 more commit(s)]".format(commit_info * 20) - self.api_stream_message(self.TEST_USER_EMAIL, fixture_name, self.EXPECTED_TOPIC_BRANCH_EVENTS, + self.api_stream_message(self.test_user, fixture_name, self.EXPECTED_TOPIC_BRANCH_EVENTS, expected_message) def test_bitbucket_on_force_push_event(self) -> None: fixture_name = 'force_push' self.url = self.build_webhook_url(payload=self.get_body(fixture_name)) expected_message = u"kolaszek [force pushed](https://bitbucket.org/kolaszek/repository-name)." - self.api_stream_message(self.TEST_USER_EMAIL, fixture_name, self.EXPECTED_TOPIC, + self.api_stream_message(self.test_user, fixture_name, self.EXPECTED_TOPIC, expected_message) def test_bitbucket_on_force_push_event_without_user_info(self) -> None: fixture_name = 'force_push_without_user_info' self.url = self.build_webhook_url(payload=self.get_body(fixture_name)) expected_message = u"Someone [force pushed](https://bitbucket.org/kolaszek/repository-name/)." - self.api_stream_message(self.TEST_USER_EMAIL, fixture_name, self.EXPECTED_TOPIC, + self.api_stream_message(self.test_user, fixture_name, self.EXPECTED_TOPIC, expected_message) @patch('zerver.webhooks.bitbucket.view.check_send_webhook_message') @@ -75,7 +75,7 @@ class BitbucketHookTests(WebhookTestCase): payload = self.get_body(fixture_name) self.url = self.build_webhook_url(payload=payload, branches='changes,development') - result = self.api_post(self.TEST_USER_EMAIL, self.url, payload, content_type="application/json,") + result = self.api_post(self.test_user, self.url, payload, content_type="application/json,") self.assertFalse(check_send_webhook_message_mock.called) self.assert_json_success(result) @@ -86,7 +86,7 @@ class BitbucketHookTests(WebhookTestCase): payload = self.get_body(fixture_name) self.url = self.build_webhook_url(payload=payload, branches='changes,development') - result = self.api_post(self.TEST_USER_EMAIL, self.url, payload, content_type="application/json,") + result = self.api_post(self.test_user, self.url, payload, content_type="application/json,") self.assertFalse(check_send_webhook_message_mock.called) self.assert_json_success(result) diff --git a/zerver/webhooks/deskdotcom/tests.py b/zerver/webhooks/deskdotcom/tests.py index a8d7b74c92..f067472e20 100644 --- a/zerver/webhooks/deskdotcom/tests.py +++ b/zerver/webhooks/deskdotcom/tests.py @@ -21,7 +21,7 @@ class DeskDotComHookTests(WebhookTestCase): expected_topic = u"static text notification" expected_message = u"This is a custom action." - self.api_stream_message(self.TEST_USER_EMAIL, 'static_text', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'static_text', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_case_updated_message(self) -> None: @@ -30,7 +30,7 @@ class DeskDotComHookTests(WebhookTestCase): u"Link: " u"I have a question") - self.api_stream_message(self.TEST_USER_EMAIL, 'case_updated', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'case_updated', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_unicode_text_italian(self) -> None: @@ -40,7 +40,7 @@ class DeskDotComHookTests(WebhookTestCase): u"Link: " u"Il mio hovercraft è pieno di anguille.") - self.api_stream_message(self.TEST_USER_EMAIL, 'unicode_text_italian', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'unicode_text_italian', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_unicode_text_japanese(self) -> None: @@ -50,7 +50,7 @@ class DeskDotComHookTests(WebhookTestCase): u"Link: " u"私のホバークラフトは鰻でいっぱいです") - self.api_stream_message(self.TEST_USER_EMAIL, 'unicode_text_japanese', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'unicode_text_japanese', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def get_body(self, fixture_name: str) -> str: diff --git a/zerver/webhooks/freshdesk/tests.py b/zerver/webhooks/freshdesk/tests.py index 1c2378abad..cd3707af61 100644 --- a/zerver/webhooks/freshdesk/tests.py +++ b/zerver/webhooks/freshdesk/tests.py @@ -26,7 +26,7 @@ Test ticket description ☃. * **Status**: Pending """.strip() - self.api_stream_message(self.TEST_USER_EMAIL, 'ticket_created', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'ticket_created', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_status_change(self) -> None: @@ -41,7 +41,7 @@ Requester Bob updated [ticket #11](http://test1234zz * **Status**: Resolved -> Waiting on Customer """.strip() - self.api_stream_message(self.TEST_USER_EMAIL, 'status_changed', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'status_changed', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_status_change_fixture_without_required_key(self) -> None: @@ -51,7 +51,7 @@ Requester Bob updated [ticket #11](http://test1234zz self.url = self.build_webhook_url() payload = self.get_body('status_changed_fixture_with_missing_key') kwargs = { - 'HTTP_AUTHORIZATION': self.encode_email(self.TEST_USER_EMAIL), + 'HTTP_AUTHORIZATION': self.encode_email(self.test_user.email), 'content_type': 'application/x-www-form-urlencoded', } result = self.client_post(self.url, payload, **kwargs) @@ -68,7 +68,7 @@ Requester Bob updated [ticket #11](http://test1234zz * **Priority**: High -> Low """.strip() - self.api_stream_message(self.TEST_USER_EMAIL, 'priority_changed', expected_topic, expected_message, + self.api_stream_message(self.test_user, 'priority_changed', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") @patch('zerver.lib.webhooks.common.check_send_webhook_message') @@ -80,7 +80,7 @@ Requester Bob updated [ticket #11](http://test1234zz self.url = self.build_webhook_url() payload = self.get_body('unknown_payload') kwargs = { - 'HTTP_AUTHORIZATION': self.encode_email(self.TEST_USER_EMAIL), + 'HTTP_AUTHORIZATION': self.encode_email(self.test_user.email), 'content_type': 'application/x-www-form-urlencoded', } result = self.client_post(self.url, payload, **kwargs) @@ -97,7 +97,7 @@ Requester Bob updated [ticket #11](http://test1234zz Requester Bob added a {} note to \ [ticket #11](http://test1234zzz.freshdesk.com/helpdesk/tickets/11). """.strip().format(note_type) - self.api_stream_message(self.TEST_USER_EMAIL, fixture, expected_topic, expected_message, + self.api_stream_message(self.test_user, fixture, expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_private_note_change(self) -> None: @@ -116,7 +116,7 @@ Requester Bob added a {} note to \ expected_message = """ Requester \u2603 Bob created [ticket #12](http://test1234zzz.freshdesk.com/helpdesk/tickets/12):\n\n``` quote\nThere are too many cat pictures on the internet \u2603. We need more guinea pigs.\nExhibit 1:\n\n \n\n[guinea_pig.png](http://cdn.freshdesk.com/data/helpdesk/attachments/production/12744808/original/guinea_pig.png)\n```\n\n* **Type**: Problem\n* **Priority**: Urgent\n* **Status**: Open """.strip() - self.api_stream_message(self.TEST_USER_EMAIL, "inline_images", expected_topic, expected_message, + self.api_stream_message(self.test_user, "inline_images", expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def get_body(self, fixture_name: str) -> str: diff --git a/zerver/webhooks/zendesk/tests.py b/zerver/webhooks/zendesk/tests.py index 43c69917cf..d3c25fe029 100644 --- a/zerver/webhooks/zendesk/tests.py +++ b/zerver/webhooks/zendesk/tests.py @@ -26,7 +26,7 @@ class ZenDeskHookTests(WebhookTestCase): } def do_test(self, expected_topic: Optional[str]=None, expected_message: Optional[str]=None) -> None: - self.api_stream_message(self.TEST_USER_EMAIL, "", expected_topic, expected_message, + self.api_stream_message(self.test_user, "", expected_topic, expected_message, content_type=None) self.TICKET_TITLE = self.DEFAULT_TICKET_TITLE self.TICKET_ID = self.DEFAULT_TICKET_ID