mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
Fixes #2665. Regenerated by tabbott with `lint --fix` after a rebase and change in parameters. Note from tabbott: In a few cases, this converts technical debt in the form of unsorted imports into different technical debt in the form of our largest files having very long, ugly import sequences at the start. I expect this change will increase pressure for us to split those files, which isn't a bad thing. Signed-off-by: Anders Kaseorg <anders@zulip.com>
151 lines
4.5 KiB
Python
151 lines
4.5 KiB
Python
from typing import Any, Dict, List
|
|
from unittest import mock
|
|
|
|
from zerver.lib.message import MessageDict
|
|
from zerver.lib.test_classes import ZulipTestCase
|
|
from zerver.models import Message, SubMessage
|
|
|
|
|
|
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_user(cordelia)
|
|
|
|
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_user(cordelia)
|
|
|
|
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)
|