@@ -922,6 +922,72 @@ void main() {
922922        await  tester.pump ();
923923        tester.widget (find.text ('new stream name' ));
924924      });
925+ 
926+       testWidgets ('navigates to TopicNarrow on tapping topic in CombinedFeedNarrow' , (tester) async  {
927+         final  pushedRoutes =  < Route <void >> [];
928+         final  navObserver =  TestNavigatorObserver ()
929+           ..onPushed =  (route, prevRoute) =>  pushedRoutes.add (route);
930+ 
931+         final  channel =  eg.stream ();
932+         final  message =  eg.streamMessage (stream:  channel, topic:  'topic name' );
933+ 
934+         await  setupMessageListPage (
935+           tester,
936+           narrow:  const  CombinedFeedNarrow (),
937+           messages:  [message],
938+           subscriptions:  [eg.subscription (channel)],
939+           navObservers:  [navObserver],
940+         );
941+ 
942+         assert (pushedRoutes.length ==  1 );
943+         pushedRoutes.clear ();
944+ 
945+         connection.prepare (json:  eg.newestGetMessagesResult (
946+           messages:  [message],
947+           foundOldest:  true ,
948+         ).toJson ());
949+ 
950+         final  topicFinder =  find.descendant (
951+           of:  find.byType (StreamMessageRecipientHeader ),
952+           matching:  find.text ('topic name' ),
953+         );
954+         await  tester.tap (topicFinder);
955+         await  tester.pumpAndSettle ();
956+ 
957+         check (pushedRoutes).single
958+           .isA <WidgetRoute >()
959+           .page.isA <MessageListPage >()
960+           .initNarrow.equals (TopicNarrow (channel.streamId, 'topic name' ));
961+       });
962+ 
963+       testWidgets ('does not navigate on tapping topic in TopicNarrow' , (tester) async  {
964+         final  pushedRoutes =  < Route <void >> [];
965+         final  navObserver =  TestNavigatorObserver ()
966+           ..onPushed =  (route, prevRoute) =>  pushedRoutes.add (route);
967+ 
968+         final  channel =  eg.stream ();
969+         final  message =  eg.streamMessage (stream:  channel, topic:  'topic name' );
970+ 
971+         await  setupMessageListPage (
972+           tester,
973+           narrow:  TopicNarrow (channel.streamId, 'topic name' ),
974+           navObservers:  [navObserver],
975+           streams:  [channel],
976+           messages:  [message],
977+         );
978+ 
979+         assert (pushedRoutes.length ==  1 );
980+         pushedRoutes.clear ();
981+ 
982+         final  topicFinder =  find.descendant (
983+           of:  find.byType (StreamMessageRecipientHeader ),
984+           matching:  find.text ('topic name' ),
985+         );
986+         await  tester.tap (topicFinder);
987+         await  tester.pumpAndSettle ();
988+ 
989+         check (pushedRoutes).isEmpty ();
990+       });
925991    });
926992
927993    group ('DmRecipientHeader' , () {
@@ -987,6 +1053,62 @@ void main() {
9871053      tester.widget (find.textContaining (RegExp ("Dec 1[89], 2022" )));
9881054      tester.widget (find.textContaining (RegExp ("Aug 2[23], 2022" )));
9891055    });
1056+ 
1057+     testWidgets ('navigates to DmNarrow on tapping recipient header in CombinedFeedNarrow' , (tester) async  {
1058+       final  pushedRoutes =  < Route <void >> [];
1059+       final  navObserver =  TestNavigatorObserver ()
1060+         ..onPushed =  (route, prevRoute) =>  pushedRoutes.add (route);
1061+ 
1062+       final  dmMessage =  eg.dmMessage (from:  eg.selfUser, to:  [eg.otherUser]);
1063+ 
1064+       await  setupMessageListPage (
1065+         tester,
1066+         narrow:  const  CombinedFeedNarrow (),
1067+         messages:  [dmMessage],
1068+         navObservers:  [navObserver],
1069+       );
1070+ 
1071+       assert (pushedRoutes.length ==  1 );
1072+       pushedRoutes.clear ();
1073+ 
1074+       connection.prepare (json:  eg.newestGetMessagesResult (
1075+         messages:  [dmMessage],
1076+         foundOldest:  true ,
1077+       ).toJson ());
1078+ 
1079+       final  recipientHeaderFinder =  find.byType (DmRecipientHeader );
1080+       await  tester.tap (recipientHeaderFinder);
1081+       await  tester.pumpAndSettle ();
1082+ 
1083+       check (pushedRoutes).single
1084+         .isA <WidgetRoute >()
1085+         .page.isA <MessageListPage >()
1086+         .initNarrow.equals (DmNarrow .withUser (eg.otherUser.userId, selfUserId:  eg.selfUser.userId));
1087+     });
1088+ 
1089+     testWidgets ('does not navigate on tapping recipient header in DmNarrow' , (tester) async  {
1090+       final  pushedRoutes =  < Route <void >> [];
1091+       final  navObserver =  TestNavigatorObserver ()
1092+         ..onPushed =  (route, prevRoute) =>  pushedRoutes.add (route);
1093+ 
1094+       final  dmMessage =  eg.dmMessage (from:  eg.selfUser, to:  [eg.otherUser]);
1095+ 
1096+       await  setupMessageListPage (
1097+         tester,
1098+         narrow:  DmNarrow .withUser (eg.otherUser.userId, selfUserId:  eg.selfUser.userId),
1099+         navObservers:  [navObserver],
1100+         messages:  [dmMessage],
1101+       );
1102+ 
1103+       assert (pushedRoutes.length ==  1 );
1104+       pushedRoutes.clear ();
1105+ 
1106+       final  recipientHeaderFinder =  find.byType (DmRecipientHeader );
1107+       await  tester.tap (recipientHeaderFinder);
1108+       await  tester.pumpAndSettle ();
1109+ 
1110+       check (pushedRoutes).isEmpty ();
1111+     });
9901112  });
9911113
9921114  group ('formatHeaderDate' , () {
0 commit comments