Skip to content

Commit 4553b4e

Browse files
committed
tests: Add pytests for class FullMsgView.
With this ending commit: * A tested 'full message view' is added. * Fixes #543 (v1). * Allows user to view source message also by cycling the message content.
1 parent 44ad8c4 commit 4553b4e

File tree

1 file changed

+104
-2
lines changed

1 file changed

+104
-2
lines changed

tests/ui_tools/test_popups.py

Lines changed: 104 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66
from zulipterminal.config.keys import is_command_key, keys_for_command
77
from zulipterminal.ui_tools.views import (
8-
AboutView, EditHistoryView, EditModeView, HelpView, MsgInfoView,
9-
PopUpConfirmationView, PopUpView, StreamInfoView, StreamMembersView,
8+
AboutView, EditHistoryView, EditModeView, FullMsgView, HelpView,
9+
MsgInfoView, PopUpConfirmationView, PopUpView, StreamInfoView,
10+
StreamMembersView,
1011
)
1112
from zulipterminal.version import MINIMUM_SUPPORTED_SERVER_VERSION, ZT_VERSION
1213

@@ -177,6 +178,107 @@ def test_feature_level_content(self, mocker, zulip_version):
177178
)
178179

179180

181+
class TestFullMsgView:
182+
@pytest.fixture(autouse=True)
183+
def mock_external_classes(self, mocker, msg_box):
184+
self.content = msg_box.widget_list[2].original_widget[-1]
185+
self.controller = mocker.Mock()
186+
mocker.patch.object(self.controller, 'maximum_popup_dimensions',
187+
return_value=(64, 64))
188+
self.controller.model.client.get_raw_message = (
189+
mocker.Mock(return_value={
190+
'result': 'success',
191+
"raw_content": "**Don't** forget your towel!",
192+
})
193+
)
194+
mocker.patch(VIEWS + '.urwid.SimpleFocusListWalker', return_value=[])
195+
# NOTE: Given that the FullMsgView just uses the message ID from
196+
# the message data currently, message_fixture is not used to avoid
197+
# adding extra test runs unnecessarily.
198+
self.message = {'id': 1}
199+
self.full_msg_view = FullMsgView(
200+
controller=self.controller,
201+
message=self.message,
202+
message_links=OrderedDict(),
203+
time_mentions=list(),
204+
content=self.content,
205+
title='Full Message View',
206+
)
207+
208+
def test_init(self, msg_box):
209+
assert self.full_msg_view.controller == self.controller
210+
assert self.full_msg_view.message == self.message
211+
assert self.full_msg_view.message_links == OrderedDict()
212+
assert self.full_msg_view.time_mentions == list()
213+
assert self.full_msg_view.msg_body[0] == self.content
214+
assert len(self.full_msg_view.msg_body[1].widget_list) == 2
215+
assert self.full_msg_view.focus_tab == 0
216+
self.controller.model.client.get_raw_message.assert_called_once_with(
217+
self.message['id'],
218+
)
219+
220+
@pytest.mark.parametrize('key', keys_for_command('MSG_INFO'))
221+
def test_keypress_exit_popup(self, key, widget_size):
222+
size = widget_size(self.full_msg_view)
223+
224+
self.full_msg_view.keypress(size, key)
225+
226+
assert self.controller.exit_popup.called
227+
228+
def test_keypress_exit_popup_invalid_key(self, widget_size):
229+
size = widget_size(self.full_msg_view)
230+
key = 'a'
231+
232+
self.full_msg_view.keypress(size, key)
233+
234+
assert not self.controller.exit_popup.called
235+
236+
@pytest.mark.parametrize('key', {*keys_for_command('FULL_MSG_VIEW'),
237+
*keys_for_command('GO_BACK')})
238+
def test_keypress_show_msg_info(self, key, widget_size):
239+
size = widget_size(self.full_msg_view)
240+
241+
self.full_msg_view.keypress(size, key)
242+
243+
self.controller.show_msg_info.assert_called_once_with(
244+
msg=self.message,
245+
message_links=OrderedDict(),
246+
time_mentions=list(),
247+
)
248+
249+
def test_keypress_navigation(self, mocker, widget_size,
250+
navigation_key_expected_key_pair):
251+
size = widget_size(self.full_msg_view)
252+
key, expected_key = navigation_key_expected_key_pair
253+
super_keypress = mocker.patch(VIEWS + '.urwid.ListBox.keypress')
254+
255+
self.full_msg_view.keypress(size, key)
256+
257+
super_keypress.assert_called_once_with(size, expected_key)
258+
259+
@pytest.mark.parametrize('initial_foc_tab, expected_foc_tab', [
260+
(0, 1),
261+
(1, 0),
262+
],
263+
ids=[
264+
'rendered_msg_to_raw_msg',
265+
'raw_msg_to_rendered_msg',
266+
]
267+
)
268+
@pytest.mark.parametrize("tab_key",
269+
keys_for_command("CYCLE_COMPOSE_FOCUS"))
270+
def test_keypress_CYCLE_COMPOSE_FOCUS(self, mocker, initial_foc_tab,
271+
expected_foc_tab, widget_size,
272+
tab_key):
273+
274+
self.full_msg_view.focus_tab = initial_foc_tab
275+
size = widget_size(self.full_msg_view)
276+
277+
self.full_msg_view.keypress(size, tab_key)
278+
279+
assert self.full_msg_view.focus_tab == expected_foc_tab
280+
281+
180282
class TestEditHistoryView:
181283
@pytest.fixture(autouse=True)
182284
def mock_external_classes(self, mocker):

0 commit comments

Comments
 (0)