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 message_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
+ message_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,20 @@ 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 .message_info_content = message_info_content
522
+ self .message_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
+ message_info_content = message_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 (
533
+ self .full_rendered_message .message_info_content == self .message_info_content
534
+ )
519
535
assert self .full_rendered_message .header .widget_list == msg_box .header
520
536
assert self .full_rendered_message .footer .widget_list == msg_box .footer
521
537
@@ -547,23 +563,26 @@ def test_keypress_exit_popup_invalid_key(
547
563
},
548
564
)
549
565
def test_keypress_show_msg_info (
550
- self , key : str , widget_size : Callable [[Widget ], urwid_Size ]
566
+ self ,
567
+ key : str ,
568
+ widget_size : Callable [[Widget ], urwid_Size ],
569
+ message_info_content : MessageInfoPopupContent ,
551
570
) -> None :
552
571
size = widget_size (self .full_rendered_message )
553
572
554
573
self .full_rendered_message .keypress (size , key )
555
574
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
- )
575
+ self .controller .show_msg_info .assert_called_once_with (self .message_info_content )
562
576
563
577
564
578
class TestFullRawMsgView :
565
579
@pytest .fixture (autouse = True )
566
- def mock_external_classes (self , mocker : MockerFixture , msg_box : MessageBox ) -> None :
580
+ def mock_external_classes (
581
+ self ,
582
+ mocker : MockerFixture ,
583
+ msg_box : MessageBox ,
584
+ message_info_content : MessageInfoPopupContent ,
585
+ ) -> None :
567
586
self .controller = mocker .Mock ()
568
587
mocker .patch .object (
569
588
self .controller , "maximum_popup_dimensions" , return_value = (64 , 64 )
@@ -575,23 +594,18 @@ def mock_external_classes(self, mocker: MockerFixture, msg_box: MessageBox) -> N
575
594
# NOTE: Given that the FullRawMsgView just uses the message ID from
576
595
# the message data currently, message_fixture is not used to avoid
577
596
# adding extra test runs unnecessarily.
578
- self .message = Message (id = 1 )
597
+ self .message_info_content = message_info_content
598
+ self .message_info_content ["message" ] = Message (id = 1 )
579
599
self .full_raw_message = FullRawMsgView (
580
600
controller = self .controller ,
581
- message = self .message ,
582
- topic_links = OrderedDict (),
583
- message_links = OrderedDict (),
584
- time_mentions = list (),
585
601
title = "Full Raw Message" ,
602
+ message_info_content = self .message_info_content ,
586
603
)
587
604
588
605
def test_init (self , msg_box : MessageBox ) -> None :
589
606
assert self .full_raw_message .title == "Full Raw Message"
590
607
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 ()
608
+ assert self .full_raw_message .message_info_content == self .message_info_content
595
609
assert self .full_raw_message .header .widget_list == msg_box .header
596
610
assert self .full_raw_message .footer .widget_list == msg_box .footer
597
611
@@ -629,17 +643,14 @@ def test_keypress_show_msg_info(
629
643
630
644
self .full_raw_message .keypress (size , key )
631
645
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
- )
646
+ self .controller .show_msg_info .assert_called_once_with (self .message_info_content )
638
647
639
648
640
649
class TestEditHistoryView :
641
650
@pytest .fixture (autouse = True )
642
- def mock_external_classes (self , mocker : MockerFixture ) -> None :
651
+ def mock_external_classes (
652
+ self , mocker : MockerFixture , message_info_content : MessageInfoPopupContent
653
+ ) -> None :
643
654
self .controller = mocker .Mock ()
644
655
mocker .patch .object (
645
656
self .controller , "maximum_popup_dimensions" , return_value = (64 , 64 )
@@ -650,24 +661,20 @@ def mock_external_classes(self, mocker: MockerFixture) -> None:
650
661
# NOTE: Given that the EditHistoryView just uses the message ID from
651
662
# the message data currently, message_fixture is not used to avoid
652
663
# adding extra test runs unnecessarily.
653
- self .message = Message (id = 1 )
664
+ self .message_info_content = message_info_content
665
+ self .message_info_content ["message" ] = Message (id = 1 )
654
666
self .edit_history_view = EditHistoryView (
655
667
controller = self .controller ,
656
- message = self .message ,
657
- topic_links = OrderedDict (),
658
- message_links = OrderedDict (),
659
- time_mentions = list (),
660
668
title = "Edit History" ,
669
+ message_info_content = self .message_info_content ,
661
670
)
662
671
663
672
def test_init (self ) -> None :
664
673
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 ()
674
+ assert self .edit_history_view .title == "Edit History"
675
+ assert self .edit_history_view .message_info_content == self .message_info_content
669
676
self .controller .model .fetch_message_history .assert_called_once_with (
670
- message_id = self .message ["id" ],
677
+ message_id = self .message_info_content [ " message" ] ["id" ],
671
678
)
672
679
673
680
@pytest .mark .parametrize ("key" , keys_for_command ("MSG_INFO" ))
@@ -700,12 +707,7 @@ def test_keypress_show_msg_info(
700
707
701
708
self .edit_history_view .keypress (size , key )
702
709
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
- )
710
+ self .controller .show_msg_info .assert_called_once_with (self .message_info_content )
709
711
710
712
@pytest .mark .parametrize (
711
713
"snapshot" ,
@@ -958,7 +960,10 @@ def test_keypress_exit_popup(
958
960
class TestMsgInfoView :
959
961
@pytest .fixture (autouse = True )
960
962
def mock_external_classes (
961
- self , mocker : MockerFixture , message_fixture : Message
963
+ self ,
964
+ mocker : MockerFixture ,
965
+ message_fixture : Message ,
966
+ message_info_content : MessageInfoPopupContent ,
962
967
) -> None :
963
968
self .controller = mocker .Mock ()
964
969
mocker .patch .object (
@@ -975,32 +980,31 @@ def mock_external_classes(
975
980
"Tue Mar 13 10:55:22" ,
976
981
"Tue Mar 13 10:55:37" ,
977
982
]
983
+ self .message_info_content = message_info_content
984
+ self .message_info_content ["message" ] = message_fixture
978
985
self .msg_info_view = MsgInfoView (
979
986
self .controller ,
980
- message_fixture ,
981
987
"Message Information" ,
982
- OrderedDict (),
983
- OrderedDict (),
984
- list (),
988
+ self .message_info_content ,
985
989
)
986
990
987
991
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 ()
992
+ assert self .msg_info_view .message_info_content == self .message_info_content
992
993
993
994
def test_pop_up_info_order (self , message_fixture : Message ) -> None :
994
995
topic_links = OrderedDict ([("https://bar.com" , ("topic" , 1 , True ))])
995
996
message_links = OrderedDict ([("image.jpg" , ("image" , 1 , True ))])
996
- msg_info_view = MsgInfoView (
997
- self .controller ,
998
- message_fixture ,
999
- title = "Message Information" ,
997
+ message_info_content = MessageInfoPopupContent (
998
+ message = message_fixture ,
1000
999
topic_links = topic_links ,
1001
1000
message_links = message_links ,
1002
1001
time_mentions = list (),
1003
1002
)
1003
+ msg_info_view = MsgInfoView (
1004
+ self .controller ,
1005
+ title = "Message Information" ,
1006
+ message_info_content = message_info_content ,
1007
+ )
1004
1008
msg_links = msg_info_view .button_widgets
1005
1009
assert msg_links == [message_links , topic_links ]
1006
1010
@@ -1043,22 +1047,16 @@ def test_keypress_edit_history(
1043
1047
}
1044
1048
msg_info_view = MsgInfoView (
1045
1049
self .controller ,
1046
- message_fixture ,
1047
1050
title = "Message Information" ,
1048
- topic_links = OrderedDict (),
1049
- message_links = OrderedDict (),
1050
- time_mentions = list (),
1051
+ message_info_content = self .message_info_content ,
1051
1052
)
1052
1053
size = widget_size (msg_info_view )
1053
1054
1054
1055
msg_info_view .keypress (size , key )
1055
1056
1056
1057
if msg_info_view .show_edit_history_label :
1057
1058
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 (),
1059
+ self .message_info_content
1062
1060
)
1063
1061
else :
1064
1062
self .controller .show_edit_history .assert_not_called ()
@@ -1072,21 +1070,15 @@ def test_keypress_full_rendered_message(
1072
1070
) -> None :
1073
1071
msg_info_view = MsgInfoView (
1074
1072
self .controller ,
1075
- message_fixture ,
1076
1073
title = "Message Information" ,
1077
- topic_links = OrderedDict (),
1078
- message_links = OrderedDict (),
1079
- time_mentions = list (),
1074
+ message_info_content = self .message_info_content ,
1080
1075
)
1081
1076
size = widget_size (msg_info_view )
1082
1077
1083
1078
msg_info_view .keypress (size , key )
1084
1079
1085
1080
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 (),
1081
+ self .message_info_content
1090
1082
)
1091
1083
1092
1084
@pytest .mark .parametrize ("key" , keys_for_command ("FULL_RAW_MESSAGE" ))
@@ -1098,21 +1090,15 @@ def test_keypress_full_raw_message(
1098
1090
) -> None :
1099
1091
msg_info_view = MsgInfoView (
1100
1092
self .controller ,
1101
- message_fixture ,
1102
1093
title = "Message Information" ,
1103
- topic_links = OrderedDict (),
1104
- message_links = OrderedDict (),
1105
- time_mentions = list (),
1094
+ message_info_content = self .message_info_content ,
1106
1095
)
1107
1096
size = widget_size (msg_info_view )
1108
1097
1109
1098
msg_info_view .keypress (size , key )
1110
1099
1111
1100
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 (),
1101
+ self .message_info_content
1116
1102
)
1117
1103
1118
1104
@pytest .mark .parametrize (
@@ -1204,16 +1190,12 @@ def test_height_reactions(
1204
1190
self ,
1205
1191
message_fixture : Message ,
1206
1192
to_vary_in_each_message : Message ,
1193
+ message_info_content : MessageInfoPopupContent ,
1207
1194
) -> None :
1208
- varied_message = message_fixture
1209
- varied_message .update (to_vary_in_each_message )
1195
+ message_info_content [ "message" ] = message_fixture
1196
+ message_info_content [ "message" ] .update (to_vary_in_each_message )
1210
1197
self .msg_info_view = MsgInfoView (
1211
- self .controller ,
1212
- varied_message ,
1213
- "Message Information" ,
1214
- OrderedDict (),
1215
- OrderedDict (),
1216
- list (),
1198
+ self .controller , "Message Information" , message_info_content
1217
1199
)
1218
1200
# 12 = 7 labels + 2 blank lines + 1 'Reactions' (category)
1219
1201
# + 4 reactions (excluding 'Message Links').
0 commit comments