99from zulipterminal .api_types import Message
1010from zulipterminal .config .keys import is_command_key , keys_for_command
1111from 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+ )
1317from zulipterminal .ui_tools .messages import MessageBox
1418from zulipterminal .ui_tools .views import (
1519 AboutView ,
4145# * classes derived from the base popup class, sorted alphabetically
4246
4347
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+
4458class TestPopUpConfirmationView :
4559 @pytest .fixture
4660 def popup_view (self , mocker : MockerFixture ) -> PopUpConfirmationView :
@@ -490,7 +504,12 @@ def test_keypress_exit_popup_invalid_key(
490504
491505class TestFullRenderedMsgView :
492506 @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 :
494513 self .controller = mocker .Mock ()
495514 mocker .patch .object (
496515 self .controller , "maximum_popup_dimensions" , return_value = (64 , 64 )
@@ -499,23 +518,20 @@ def mock_external_classes(self, mocker: MockerFixture, msg_box: MessageBox) -> N
499518 # NOTE: Given that the FullRenderedMsgView just uses the message ID from
500519 # the message data currently, message_fixture is not used to avoid
501520 # 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 )
503523 self .full_rendered_message = FullRenderedMsgView (
504524 controller = self .controller ,
505- message = self .message ,
506- topic_links = OrderedDict (),
507- message_links = OrderedDict (),
508- time_mentions = list (),
509525 title = "Full Rendered Message" ,
526+ message_info_content = message_info_content ,
510527 )
511528
512529 def test_init (self , msg_box : MessageBox ) -> None :
513530 assert self .full_rendered_message .title == "Full Rendered Message"
514531 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+ )
519535 assert self .full_rendered_message .header .widget_list == msg_box .header
520536 assert self .full_rendered_message .footer .widget_list == msg_box .footer
521537
@@ -547,23 +563,26 @@ def test_keypress_exit_popup_invalid_key(
547563 },
548564 )
549565 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 ,
551570 ) -> None :
552571 size = widget_size (self .full_rendered_message )
553572
554573 self .full_rendered_message .keypress (size , key )
555574
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 )
562576
563577
564578class TestFullRawMsgView :
565579 @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 :
567586 self .controller = mocker .Mock ()
568587 mocker .patch .object (
569588 self .controller , "maximum_popup_dimensions" , return_value = (64 , 64 )
@@ -575,23 +594,18 @@ def mock_external_classes(self, mocker: MockerFixture, msg_box: MessageBox) -> N
575594 # NOTE: Given that the FullRawMsgView just uses the message ID from
576595 # the message data currently, message_fixture is not used to avoid
577596 # 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 )
579599 self .full_raw_message = FullRawMsgView (
580600 controller = self .controller ,
581- message = self .message ,
582- topic_links = OrderedDict (),
583- message_links = OrderedDict (),
584- time_mentions = list (),
585601 title = "Full Raw Message" ,
602+ message_info_content = self .message_info_content ,
586603 )
587604
588605 def test_init (self , msg_box : MessageBox ) -> None :
589606 assert self .full_raw_message .title == "Full Raw Message"
590607 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
595609 assert self .full_raw_message .header .widget_list == msg_box .header
596610 assert self .full_raw_message .footer .widget_list == msg_box .footer
597611
@@ -629,17 +643,14 @@ def test_keypress_show_msg_info(
629643
630644 self .full_raw_message .keypress (size , key )
631645
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 )
638647
639648
640649class TestEditHistoryView :
641650 @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 :
643654 self .controller = mocker .Mock ()
644655 mocker .patch .object (
645656 self .controller , "maximum_popup_dimensions" , return_value = (64 , 64 )
@@ -650,24 +661,20 @@ def mock_external_classes(self, mocker: MockerFixture) -> None:
650661 # NOTE: Given that the EditHistoryView just uses the message ID from
651662 # the message data currently, message_fixture is not used to avoid
652663 # 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 )
654666 self .edit_history_view = EditHistoryView (
655667 controller = self .controller ,
656- message = self .message ,
657- topic_links = OrderedDict (),
658- message_links = OrderedDict (),
659- time_mentions = list (),
660668 title = "Edit History" ,
669+ message_info_content = self .message_info_content ,
661670 )
662671
663672 def test_init (self ) -> None :
664673 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
669676 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" ],
671678 )
672679
673680 @pytest .mark .parametrize ("key" , keys_for_command ("MSG_INFO" ))
@@ -700,12 +707,7 @@ def test_keypress_show_msg_info(
700707
701708 self .edit_history_view .keypress (size , key )
702709
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 )
709711
710712 @pytest .mark .parametrize (
711713 "snapshot" ,
@@ -958,7 +960,10 @@ def test_keypress_exit_popup(
958960class TestMsgInfoView :
959961 @pytest .fixture (autouse = True )
960962 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 ,
962967 ) -> None :
963968 self .controller = mocker .Mock ()
964969 mocker .patch .object (
@@ -975,32 +980,31 @@ def mock_external_classes(
975980 "Tue Mar 13 10:55:22" ,
976981 "Tue Mar 13 10:55:37" ,
977982 ]
983+ self .message_info_content = message_info_content
984+ self .message_info_content ["message" ] = message_fixture
978985 self .msg_info_view = MsgInfoView (
979986 self .controller ,
980- message_fixture ,
981987 "Message Information" ,
982- OrderedDict (),
983- OrderedDict (),
984- list (),
988+ self .message_info_content ,
985989 )
986990
987991 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
992993
993994 def test_pop_up_info_order (self , message_fixture : Message ) -> None :
994995 topic_links = OrderedDict ([("https://bar.com" , ("topic" , 1 , True ))])
995996 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 ,
1000999 topic_links = topic_links ,
10011000 message_links = message_links ,
10021001 time_mentions = list (),
10031002 )
1003+ msg_info_view = MsgInfoView (
1004+ self .controller ,
1005+ title = "Message Information" ,
1006+ message_info_content = message_info_content ,
1007+ )
10041008 msg_links = msg_info_view .button_widgets
10051009 assert msg_links == [message_links , topic_links ]
10061010
@@ -1043,22 +1047,16 @@ def test_keypress_edit_history(
10431047 }
10441048 msg_info_view = MsgInfoView (
10451049 self .controller ,
1046- message_fixture ,
10471050 title = "Message Information" ,
1048- topic_links = OrderedDict (),
1049- message_links = OrderedDict (),
1050- time_mentions = list (),
1051+ message_info_content = self .message_info_content ,
10511052 )
10521053 size = widget_size (msg_info_view )
10531054
10541055 msg_info_view .keypress (size , key )
10551056
10561057 if msg_info_view .show_edit_history_label :
10571058 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
10621060 )
10631061 else :
10641062 self .controller .show_edit_history .assert_not_called ()
@@ -1072,21 +1070,15 @@ def test_keypress_full_rendered_message(
10721070 ) -> None :
10731071 msg_info_view = MsgInfoView (
10741072 self .controller ,
1075- message_fixture ,
10761073 title = "Message Information" ,
1077- topic_links = OrderedDict (),
1078- message_links = OrderedDict (),
1079- time_mentions = list (),
1074+ message_info_content = self .message_info_content ,
10801075 )
10811076 size = widget_size (msg_info_view )
10821077
10831078 msg_info_view .keypress (size , key )
10841079
10851080 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
10901082 )
10911083
10921084 @pytest .mark .parametrize ("key" , keys_for_command ("FULL_RAW_MESSAGE" ))
@@ -1098,21 +1090,15 @@ def test_keypress_full_raw_message(
10981090 ) -> None :
10991091 msg_info_view = MsgInfoView (
11001092 self .controller ,
1101- message_fixture ,
11021093 title = "Message Information" ,
1103- topic_links = OrderedDict (),
1104- message_links = OrderedDict (),
1105- time_mentions = list (),
1094+ message_info_content = self .message_info_content ,
11061095 )
11071096 size = widget_size (msg_info_view )
11081097
11091098 msg_info_view .keypress (size , key )
11101099
11111100 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
11161102 )
11171103
11181104 @pytest .mark .parametrize (
@@ -1204,16 +1190,12 @@ def test_height_reactions(
12041190 self ,
12051191 message_fixture : Message ,
12061192 to_vary_in_each_message : Message ,
1193+ message_info_content : MessageInfoPopupContent ,
12071194 ) -> 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 )
12101197 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
12171199 )
12181200 # 12 = 7 labels + 2 blank lines + 1 'Reactions' (category)
12191201 # + 4 reactions (excluding 'Message Links').
0 commit comments