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 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+
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+ msg_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,18 @@ 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 .msg_info_content = msg_info_content
522+ self .msg_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+ msg_info_content = msg_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 self .full_rendered_message .msg_info_content == self .msg_info_content
519533 assert self .full_rendered_message .header .widget_list == msg_box .header
520534 assert self .full_rendered_message .footer .widget_list == msg_box .footer
521535
@@ -547,23 +561,26 @@ def test_keypress_exit_popup_invalid_key(
547561 },
548562 )
549563 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 ,
551568 ) -> None :
552569 size = widget_size (self .full_rendered_message )
553570
554571 self .full_rendered_message .keypress (size , key )
555572
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 )
562574
563575
564576class TestFullRawMsgView :
565577 @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 :
567584 self .controller = mocker .Mock ()
568585 mocker .patch .object (
569586 self .controller , "maximum_popup_dimensions" , return_value = (64 , 64 )
@@ -575,23 +592,18 @@ def mock_external_classes(self, mocker: MockerFixture, msg_box: MessageBox) -> N
575592 # NOTE: Given that the FullRawMsgView just uses the message ID from
576593 # the message data currently, message_fixture is not used to avoid
577594 # 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 )
579597 self .full_raw_message = FullRawMsgView (
580598 controller = self .controller ,
581- message = self .message ,
582- topic_links = OrderedDict (),
583- message_links = OrderedDict (),
584- time_mentions = list (),
585599 title = "Full Raw Message" ,
600+ msg_info_content = self .msg_info_content ,
586601 )
587602
588603 def test_init (self , msg_box : MessageBox ) -> None :
589604 assert self .full_raw_message .title == "Full Raw Message"
590605 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
595607 assert self .full_raw_message .header .widget_list == msg_box .header
596608 assert self .full_raw_message .footer .widget_list == msg_box .footer
597609
@@ -629,17 +641,14 @@ def test_keypress_show_msg_info(
629641
630642 self .full_raw_message .keypress (size , key )
631643
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 )
638645
639646
640647class TestEditHistoryView :
641648 @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 :
643652 self .controller = mocker .Mock ()
644653 mocker .patch .object (
645654 self .controller , "maximum_popup_dimensions" , return_value = (64 , 64 )
@@ -650,24 +659,20 @@ def mock_external_classes(self, mocker: MockerFixture) -> None:
650659 # NOTE: Given that the EditHistoryView just uses the message ID from
651660 # the message data currently, message_fixture is not used to avoid
652661 # 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 )
654664 self .edit_history_view = EditHistoryView (
655665 controller = self .controller ,
656- message = self .message ,
657- topic_links = OrderedDict (),
658- message_links = OrderedDict (),
659- time_mentions = list (),
660666 title = "Edit History" ,
667+ msg_info_content = self .msg_info_content ,
661668 )
662669
663670 def test_init (self ) -> None :
664671 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
669674 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" ],
671676 )
672677
673678 @pytest .mark .parametrize ("key" , keys_for_command ("MSG_INFO" ))
@@ -700,12 +705,7 @@ def test_keypress_show_msg_info(
700705
701706 self .edit_history_view .keypress (size , key )
702707
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 )
709709
710710 @pytest .mark .parametrize (
711711 "snapshot" ,
@@ -958,7 +958,10 @@ def test_keypress_exit_popup(
958958class TestMsgInfoView :
959959 @pytest .fixture (autouse = True )
960960 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 ,
962965 ) -> None :
963966 self .controller = mocker .Mock ()
964967 mocker .patch .object (
@@ -975,32 +978,31 @@ def mock_external_classes(
975978 "Tue Mar 13 10:55:22" ,
976979 "Tue Mar 13 10:55:37" ,
977980 ]
981+ self .msg_info_content = msg_info_content
982+ self .msg_info_content ["message" ] = message_fixture
978983 self .msg_info_view = MsgInfoView (
979984 self .controller ,
980- message_fixture ,
981985 "Message Information" ,
982- OrderedDict (),
983- OrderedDict (),
984- list (),
986+ self .msg_info_content ,
985987 )
986988
987989 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
992991
993992 def test_pop_up_info_order (self , message_fixture : Message ) -> None :
994993 topic_links = OrderedDict ([("https://bar.com" , ("topic" , 1 , True ))])
995994 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 ,
1000997 topic_links = topic_links ,
1001998 message_links = message_links ,
1002999 time_mentions = list (),
10031000 )
1001+ msg_info_view = MsgInfoView (
1002+ self .controller ,
1003+ title = "Message Information" ,
1004+ msg_info_content = msg_info_content ,
1005+ )
10041006 msg_links = msg_info_view .button_widgets
10051007 assert msg_links == [message_links , topic_links ]
10061008
@@ -1043,22 +1045,16 @@ def test_keypress_edit_history(
10431045 }
10441046 msg_info_view = MsgInfoView (
10451047 self .controller ,
1046- message_fixture ,
10471048 title = "Message Information" ,
1048- topic_links = OrderedDict (),
1049- message_links = OrderedDict (),
1050- time_mentions = list (),
1049+ msg_info_content = self .msg_info_content ,
10511050 )
10521051 size = widget_size (msg_info_view )
10531052
10541053 msg_info_view .keypress (size , key )
10551054
10561055 if msg_info_view .show_edit_history_label :
10571056 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
10621058 )
10631059 else :
10641060 self .controller .show_edit_history .assert_not_called ()
@@ -1072,21 +1068,15 @@ def test_keypress_full_rendered_message(
10721068 ) -> None :
10731069 msg_info_view = MsgInfoView (
10741070 self .controller ,
1075- message_fixture ,
10761071 title = "Message Information" ,
1077- topic_links = OrderedDict (),
1078- message_links = OrderedDict (),
1079- time_mentions = list (),
1072+ msg_info_content = self .msg_info_content ,
10801073 )
10811074 size = widget_size (msg_info_view )
10821075
10831076 msg_info_view .keypress (size , key )
10841077
10851078 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
10901080 )
10911081
10921082 @pytest .mark .parametrize ("key" , keys_for_command ("FULL_RAW_MESSAGE" ))
@@ -1098,21 +1088,15 @@ def test_keypress_full_raw_message(
10981088 ) -> None :
10991089 msg_info_view = MsgInfoView (
11001090 self .controller ,
1101- message_fixture ,
11021091 title = "Message Information" ,
1103- topic_links = OrderedDict (),
1104- message_links = OrderedDict (),
1105- time_mentions = list (),
1092+ msg_info_content = self .msg_info_content ,
11061093 )
11071094 size = widget_size (msg_info_view )
11081095
11091096 msg_info_view .keypress (size , key )
11101097
11111098 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
11161100 )
11171101
11181102 @pytest .mark .parametrize (
@@ -1204,16 +1188,12 @@ def test_height_reactions(
12041188 self ,
12051189 message_fixture : Message ,
12061190 to_vary_in_each_message : Message ,
1191+ msg_info_content : MessageInfoPopupContent ,
12071192 ) -> 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 )
12101195 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
12171197 )
12181198 # 12 = 7 labels + 2 blank lines + 1 'Reactions' (category)
12191199 # + 4 reactions (excluding 'Message Links').
0 commit comments