Files
zulip/zerver/tests/test_submessage.py
Steve Howell 5e2a32c936 tests: Use users in send_*_message.
This commit mostly makes our tests less
noisy, since emails are no longer an important
detail of sending messages (they're not even
really used in the API).

It also sets us up to have more scrutiny
on delivery_email/email in the future
for things that actually matter.  (This is
a prep commit for something along those
lines, kind of hard to explain the full
plan.)
2020-03-07 18:30:13 -08:00

158 lines
4.6 KiB
Python

import mock
from zerver.lib.test_classes import ZulipTestCase
from zerver.lib.message import (
MessageDict,
)
from zerver.models import (
Message,
SubMessage,
)
from typing import Any, Dict, List
class TestBasics(ZulipTestCase):
def test_get_raw_db_rows(self) -> None:
cordelia = self.example_user('cordelia')
hamlet = self.example_user('hamlet')
stream_name = 'Verona'
message_id = self.send_stream_message(
sender=cordelia,
stream_name=stream_name,
)
def get_raw_rows() -> List[Dict[str, Any]]:
query = SubMessage.get_raw_db_rows([message_id])
rows = list(query)
return rows
rows = get_raw_rows()
self.assertEqual(rows, [])
sm1 = SubMessage.objects.create(
msg_type='whatever',
content='stuff1',
message_id=message_id,
sender=cordelia,
)
sm2 = SubMessage.objects.create(
msg_type='whatever',
content='stuff2',
message_id=message_id,
sender=hamlet,
)
expected_data = [
dict(
id=sm1.id,
message_id=message_id,
sender_id=cordelia.id,
msg_type='whatever',
content='stuff1',
),
dict(
id=sm2.id,
message_id=message_id,
sender_id=hamlet.id,
msg_type='whatever',
content='stuff2',
),
]
self.assertEqual(get_raw_rows(), expected_data)
message = Message.objects.get(id=message_id)
message_json = MessageDict.wide_dict(message)
rows = message_json['submessages']
rows.sort(key=lambda r: r['id'])
self.assertEqual(rows, expected_data)
msg_rows = MessageDict.get_raw_db_rows([message_id])
rows = msg_rows[0]['submessages']
rows.sort(key=lambda r: r['id'])
self.assertEqual(rows, expected_data)
def test_endpoint_errors(self) -> None:
cordelia = self.example_user('cordelia')
stream_name = 'Verona'
message_id = self.send_stream_message(
sender=cordelia,
stream_name=stream_name,
)
self.login(cordelia.email)
payload = dict(
message_id=message_id,
msg_type='whatever',
content='not json',
)
result = self.client_post('/json/submessage', payload)
self.assert_json_error(result, 'Invalid json for submessage')
hamlet = self.example_user('hamlet')
bad_message_id = self.send_personal_message(
from_user=hamlet,
to_user=hamlet,
)
payload = dict(
message_id=bad_message_id,
msg_type='whatever',
content='does not matter',
)
result = self.client_post('/json/submessage', payload)
self.assert_json_error(result, 'Invalid message(s)')
def test_endpoint_success(self) -> None:
cordelia = self.example_user('cordelia')
hamlet = self.example_user('hamlet')
stream_name = 'Verona'
message_id = self.send_stream_message(
sender=cordelia,
stream_name=stream_name,
)
self.login(cordelia.email)
payload = dict(
message_id=message_id,
msg_type='whatever',
content='{"name": "alice", "salary": 20}'
)
with mock.patch('zerver.lib.actions.send_event') as m:
result = self.client_post('/json/submessage', payload)
self.assert_json_success(result)
submessage = SubMessage.objects.get(message_id=message_id)
expected_data = dict(
message_id=message_id,
submessage_id=submessage.id,
content=payload['content'],
msg_type='whatever',
sender_id=cordelia.id,
type='submessage',
)
self.assertEqual(m.call_count, 1)
data = m.call_args[0][1]
self.assertEqual(data, expected_data)
users = m.call_args[0][2]
self.assertIn(cordelia.id, users)
self.assertIn(hamlet.id, users)
rows = SubMessage.get_raw_db_rows([message_id])
self.assertEqual(len(rows), 1)
row = rows[0]
expected_data = dict(
id=row['id'],
message_id=message_id,
content='{"name": "alice", "salary": 20}',
msg_type='whatever',
sender_id=cordelia.id,
)
self.assertEqual(row, expected_data)