9
9
from zulipterminal .api_types import Message
10
10
from zulipterminal .config .keys import is_command_key , keys_for_command
11
11
from zulipterminal .config .ui_mappings import EDIT_MODE_CAPTIONS
12
- from zulipterminal .helper import CustomProfileData , TidiedUserInfo
12
+ from zulipterminal .helper import (
13
+ CustomProfileData ,
14
+ MessageInfoPopupContent ,
15
+ TidiedUserInfo ,
16
+ )
13
17
from zulipterminal .ui_tools .messages import MessageBox
14
18
from zulipterminal .ui_tools .views import (
15
19
AboutView ,
41
45
# * classes derived from the base popup class, sorted alphabetically
42
46
43
47
48
+ @pytest .fixture
49
+ def msg_info_content () -> MessageInfoPopupContent :
50
+ return MessageInfoPopupContent (
51
+ message = Message (),
52
+ topic_links = OrderedDict (),
53
+ message_links = OrderedDict (),
54
+ time_mentions = list (),
55
+ )
56
+
57
+
44
58
class TestPopUpConfirmationView :
45
59
@pytest .fixture
46
60
def popup_view (self , mocker : MockerFixture ) -> PopUpConfirmationView :
@@ -490,7 +504,12 @@ def test_keypress_exit_popup_invalid_key(
490
504
491
505
class TestFullRenderedMsgView :
492
506
@pytest .fixture (autouse = True )
493
- def mock_external_classes (self , mocker : MockerFixture , msg_box : MessageBox ) -> None :
507
+ def mock_external_classes (
508
+ self ,
509
+ mocker : MockerFixture ,
510
+ msg_box : MessageBox ,
511
+ msg_info_content : MessageInfoPopupContent ,
512
+ ) -> None :
494
513
self .controller = mocker .Mock ()
495
514
mocker .patch .object (
496
515
self .controller , "maximum_popup_dimensions" , return_value = (64 , 64 )
@@ -499,23 +518,18 @@ def mock_external_classes(self, mocker: MockerFixture, msg_box: MessageBox) -> N
499
518
# NOTE: Given that the FullRenderedMsgView just uses the message ID from
500
519
# the message data currently, message_fixture is not used to avoid
501
520
# adding extra test runs unnecessarily.
502
- self .message = Message (id = 1 )
521
+ self .msg_info_content = msg_info_content
522
+ self .msg_info_content ["message" ] = Message (id = 1 )
503
523
self .full_rendered_message = FullRenderedMsgView (
504
524
controller = self .controller ,
505
- message = self .message ,
506
- topic_links = OrderedDict (),
507
- message_links = OrderedDict (),
508
- time_mentions = list (),
509
525
title = "Full Rendered Message" ,
526
+ msg_info_content = msg_info_content ,
510
527
)
511
528
512
529
def test_init (self , msg_box : MessageBox ) -> None :
513
530
assert self .full_rendered_message .title == "Full Rendered Message"
514
531
assert self .full_rendered_message .controller == self .controller
515
- assert self .full_rendered_message .message == self .message
516
- assert self .full_rendered_message .topic_links == OrderedDict ()
517
- assert self .full_rendered_message .message_links == OrderedDict ()
518
- assert self .full_rendered_message .time_mentions == list ()
532
+ assert self .full_rendered_message .msg_info_content == self .msg_info_content
519
533
assert self .full_rendered_message .header .widget_list == msg_box .header
520
534
assert self .full_rendered_message .footer .widget_list == msg_box .footer
521
535
@@ -547,23 +561,26 @@ def test_keypress_exit_popup_invalid_key(
547
561
},
548
562
)
549
563
def test_keypress_show_msg_info (
550
- self , key : str , widget_size : Callable [[Widget ], urwid_Size ]
564
+ self ,
565
+ key : str ,
566
+ widget_size : Callable [[Widget ], urwid_Size ],
567
+ msg_info_content : MessageInfoPopupContent ,
551
568
) -> None :
552
569
size = widget_size (self .full_rendered_message )
553
570
554
571
self .full_rendered_message .keypress (size , key )
555
572
556
- self .controller .show_msg_info .assert_called_once_with (
557
- msg = self .message ,
558
- topic_links = OrderedDict (),
559
- message_links = OrderedDict (),
560
- time_mentions = list (),
561
- )
573
+ self .controller .show_msg_info .assert_called_once_with (self .msg_info_content )
562
574
563
575
564
576
class TestFullRawMsgView :
565
577
@pytest .fixture (autouse = True )
566
- def mock_external_classes (self , mocker : MockerFixture , msg_box : MessageBox ) -> None :
578
+ def mock_external_classes (
579
+ self ,
580
+ mocker : MockerFixture ,
581
+ msg_box : MessageBox ,
582
+ msg_info_content : MessageInfoPopupContent ,
583
+ ) -> None :
567
584
self .controller = mocker .Mock ()
568
585
mocker .patch .object (
569
586
self .controller , "maximum_popup_dimensions" , return_value = (64 , 64 )
@@ -575,23 +592,18 @@ def mock_external_classes(self, mocker: MockerFixture, msg_box: MessageBox) -> N
575
592
# NOTE: Given that the FullRawMsgView just uses the message ID from
576
593
# the message data currently, message_fixture is not used to avoid
577
594
# adding extra test runs unnecessarily.
578
- self .message = Message (id = 1 )
595
+ self .msg_info_content = msg_info_content
596
+ self .msg_info_content ["message" ] = Message (id = 1 )
579
597
self .full_raw_message = FullRawMsgView (
580
598
controller = self .controller ,
581
- message = self .message ,
582
- topic_links = OrderedDict (),
583
- message_links = OrderedDict (),
584
- time_mentions = list (),
585
599
title = "Full Raw Message" ,
600
+ msg_info_content = self .msg_info_content ,
586
601
)
587
602
588
603
def test_init (self , msg_box : MessageBox ) -> None :
589
604
assert self .full_raw_message .title == "Full Raw Message"
590
605
assert self .full_raw_message .controller == self .controller
591
- assert self .full_raw_message .message == self .message
592
- assert self .full_raw_message .topic_links == OrderedDict ()
593
- assert self .full_raw_message .message_links == OrderedDict ()
594
- assert self .full_raw_message .time_mentions == list ()
606
+ assert self .full_raw_message .msg_info_content == self .msg_info_content
595
607
assert self .full_raw_message .header .widget_list == msg_box .header
596
608
assert self .full_raw_message .footer .widget_list == msg_box .footer
597
609
@@ -629,17 +641,14 @@ def test_keypress_show_msg_info(
629
641
630
642
self .full_raw_message .keypress (size , key )
631
643
632
- self .controller .show_msg_info .assert_called_once_with (
633
- msg = self .message ,
634
- topic_links = OrderedDict (),
635
- message_links = OrderedDict (),
636
- time_mentions = list (),
637
- )
644
+ self .controller .show_msg_info .assert_called_once_with (self .msg_info_content )
638
645
639
646
640
647
class TestEditHistoryView :
641
648
@pytest .fixture (autouse = True )
642
- def mock_external_classes (self , mocker : MockerFixture ) -> None :
649
+ def mock_external_classes (
650
+ self , mocker : MockerFixture , msg_info_content : MessageInfoPopupContent
651
+ ) -> None :
643
652
self .controller = mocker .Mock ()
644
653
mocker .patch .object (
645
654
self .controller , "maximum_popup_dimensions" , return_value = (64 , 64 )
@@ -650,24 +659,20 @@ def mock_external_classes(self, mocker: MockerFixture) -> None:
650
659
# NOTE: Given that the EditHistoryView just uses the message ID from
651
660
# the message data currently, message_fixture is not used to avoid
652
661
# adding extra test runs unnecessarily.
653
- self .message = Message (id = 1 )
662
+ self .msg_info_content = msg_info_content
663
+ self .msg_info_content ["message" ] = Message (id = 1 )
654
664
self .edit_history_view = EditHistoryView (
655
665
controller = self .controller ,
656
- message = self .message ,
657
- topic_links = OrderedDict (),
658
- message_links = OrderedDict (),
659
- time_mentions = list (),
660
666
title = "Edit History" ,
667
+ msg_info_content = self .msg_info_content ,
661
668
)
662
669
663
670
def test_init (self ) -> None :
664
671
assert self .edit_history_view .controller == self .controller
665
- assert self .edit_history_view .message == self .message
666
- assert self .edit_history_view .topic_links == OrderedDict ()
667
- assert self .edit_history_view .message_links == OrderedDict ()
668
- assert self .edit_history_view .time_mentions == list ()
672
+ assert self .edit_history_view .title == "Edit History"
673
+ assert self .edit_history_view .msg_info_content == self .msg_info_content
669
674
self .controller .model .fetch_message_history .assert_called_once_with (
670
- message_id = self .message ["id" ],
675
+ message_id = self .msg_info_content [ " message" ] ["id" ],
671
676
)
672
677
673
678
@pytest .mark .parametrize ("key" , keys_for_command ("MSG_INFO" ))
@@ -700,12 +705,7 @@ def test_keypress_show_msg_info(
700
705
701
706
self .edit_history_view .keypress (size , key )
702
707
703
- self .controller .show_msg_info .assert_called_once_with (
704
- msg = self .message ,
705
- topic_links = OrderedDict (),
706
- message_links = OrderedDict (),
707
- time_mentions = list (),
708
- )
708
+ self .controller .show_msg_info .assert_called_once_with (self .msg_info_content )
709
709
710
710
@pytest .mark .parametrize (
711
711
"snapshot" ,
@@ -958,7 +958,10 @@ def test_keypress_exit_popup(
958
958
class TestMsgInfoView :
959
959
@pytest .fixture (autouse = True )
960
960
def mock_external_classes (
961
- self , mocker : MockerFixture , message_fixture : Message
961
+ self ,
962
+ mocker : MockerFixture ,
963
+ message_fixture : Message ,
964
+ msg_info_content : MessageInfoPopupContent ,
962
965
) -> None :
963
966
self .controller = mocker .Mock ()
964
967
mocker .patch .object (
@@ -975,32 +978,31 @@ def mock_external_classes(
975
978
"Tue Mar 13 10:55:22" ,
976
979
"Tue Mar 13 10:55:37" ,
977
980
]
981
+ self .msg_info_content = msg_info_content
982
+ self .msg_info_content ["message" ] = message_fixture
978
983
self .msg_info_view = MsgInfoView (
979
984
self .controller ,
980
- message_fixture ,
981
985
"Message Information" ,
982
- OrderedDict (),
983
- OrderedDict (),
984
- list (),
986
+ self .msg_info_content ,
985
987
)
986
988
987
989
def test_init (self , message_fixture : Message ) -> None :
988
- assert self .msg_info_view .msg == message_fixture
989
- assert self .msg_info_view .topic_links == OrderedDict ()
990
- assert self .msg_info_view .message_links == OrderedDict ()
991
- assert self .msg_info_view .time_mentions == list ()
990
+ assert self .msg_info_view .msg_info_content == self .msg_info_content
992
991
993
992
def test_pop_up_info_order (self , message_fixture : Message ) -> None :
994
993
topic_links = OrderedDict ([("https://bar.com" , ("topic" , 1 , True ))])
995
994
message_links = OrderedDict ([("image.jpg" , ("image" , 1 , True ))])
996
- msg_info_view = MsgInfoView (
997
- self .controller ,
998
- message_fixture ,
999
- title = "Message Information" ,
995
+ msg_info_content = MessageInfoPopupContent (
996
+ message = message_fixture ,
1000
997
topic_links = topic_links ,
1001
998
message_links = message_links ,
1002
999
time_mentions = list (),
1003
1000
)
1001
+ msg_info_view = MsgInfoView (
1002
+ self .controller ,
1003
+ title = "Message Information" ,
1004
+ msg_info_content = msg_info_content ,
1005
+ )
1004
1006
msg_links = msg_info_view .button_widgets
1005
1007
assert msg_links == [message_links , topic_links ]
1006
1008
@@ -1043,22 +1045,16 @@ def test_keypress_edit_history(
1043
1045
}
1044
1046
msg_info_view = MsgInfoView (
1045
1047
self .controller ,
1046
- message_fixture ,
1047
1048
title = "Message Information" ,
1048
- topic_links = OrderedDict (),
1049
- message_links = OrderedDict (),
1050
- time_mentions = list (),
1049
+ msg_info_content = self .msg_info_content ,
1051
1050
)
1052
1051
size = widget_size (msg_info_view )
1053
1052
1054
1053
msg_info_view .keypress (size , key )
1055
1054
1056
1055
if msg_info_view .show_edit_history_label :
1057
1056
self .controller .show_edit_history .assert_called_once_with (
1058
- message = message_fixture ,
1059
- topic_links = OrderedDict (),
1060
- message_links = OrderedDict (),
1061
- time_mentions = list (),
1057
+ self .msg_info_content
1062
1058
)
1063
1059
else :
1064
1060
self .controller .show_edit_history .assert_not_called ()
@@ -1072,21 +1068,15 @@ def test_keypress_full_rendered_message(
1072
1068
) -> None :
1073
1069
msg_info_view = MsgInfoView (
1074
1070
self .controller ,
1075
- message_fixture ,
1076
1071
title = "Message Information" ,
1077
- topic_links = OrderedDict (),
1078
- message_links = OrderedDict (),
1079
- time_mentions = list (),
1072
+ msg_info_content = self .msg_info_content ,
1080
1073
)
1081
1074
size = widget_size (msg_info_view )
1082
1075
1083
1076
msg_info_view .keypress (size , key )
1084
1077
1085
1078
self .controller .show_full_rendered_message .assert_called_once_with (
1086
- message = message_fixture ,
1087
- topic_links = OrderedDict (),
1088
- message_links = OrderedDict (),
1089
- time_mentions = list (),
1079
+ self .msg_info_content
1090
1080
)
1091
1081
1092
1082
@pytest .mark .parametrize ("key" , keys_for_command ("FULL_RAW_MESSAGE" ))
@@ -1098,21 +1088,15 @@ def test_keypress_full_raw_message(
1098
1088
) -> None :
1099
1089
msg_info_view = MsgInfoView (
1100
1090
self .controller ,
1101
- message_fixture ,
1102
1091
title = "Message Information" ,
1103
- topic_links = OrderedDict (),
1104
- message_links = OrderedDict (),
1105
- time_mentions = list (),
1092
+ msg_info_content = self .msg_info_content ,
1106
1093
)
1107
1094
size = widget_size (msg_info_view )
1108
1095
1109
1096
msg_info_view .keypress (size , key )
1110
1097
1111
1098
self .controller .show_full_raw_message .assert_called_once_with (
1112
- message = message_fixture ,
1113
- topic_links = OrderedDict (),
1114
- message_links = OrderedDict (),
1115
- time_mentions = list (),
1099
+ self .msg_info_content
1116
1100
)
1117
1101
1118
1102
@pytest .mark .parametrize (
@@ -1204,16 +1188,12 @@ def test_height_reactions(
1204
1188
self ,
1205
1189
message_fixture : Message ,
1206
1190
to_vary_in_each_message : Message ,
1191
+ msg_info_content : MessageInfoPopupContent ,
1207
1192
) -> None :
1208
- varied_message = message_fixture
1209
- varied_message .update (to_vary_in_each_message )
1193
+ msg_info_content [ "message" ] = message_fixture
1194
+ msg_info_content [ "message" ] .update (to_vary_in_each_message )
1210
1195
self .msg_info_view = MsgInfoView (
1211
- self .controller ,
1212
- varied_message ,
1213
- "Message Information" ,
1214
- OrderedDict (),
1215
- OrderedDict (),
1216
- list (),
1196
+ self .controller , "Message Information" , msg_info_content
1217
1197
)
1218
1198
# 12 = 7 labels + 2 blank lines + 1 'Reactions' (category)
1219
1199
# + 4 reactions (excluding 'Message Links').
0 commit comments