@@ -21,6 +21,7 @@ import 'package:zulip/widgets/color.dart';
2121import 'package:zulip/widgets/content.dart' ;
2222import 'package:zulip/widgets/icons.dart' ;
2323import 'package:zulip/widgets/message_list.dart' ;
24+ import 'package:zulip/widgets/page.dart' ;
2425import 'package:zulip/widgets/store.dart' ;
2526import 'package:zulip/widgets/channel_colors.dart' ;
2627
@@ -32,8 +33,11 @@ import '../model/test_store.dart';
3233import '../flutter_checks.dart' ;
3334import '../stdlib_checks.dart' ;
3435import '../test_images.dart' ;
36+ import '../test_navigation.dart' ;
3537import 'content_checks.dart' ;
3638import 'dialog_checks.dart' ;
39+ import 'message_list_checks.dart' ;
40+ import 'page_checks.dart' ;
3741import 'test_app.dart' ;
3842
3943void main () {
@@ -51,6 +55,7 @@ void main() {
5155 List <User >? users,
5256 List <Subscription >? subscriptions,
5357 UnreadMessagesSnapshot ? unreadMsgs,
58+ List <NavigatorObserver > navObservers = const [],
5459 }) async {
5560 TypingNotifier .debugEnable = false ;
5661 addTearDown (TypingNotifier .debugReset);
@@ -72,6 +77,7 @@ void main() {
7277 eg.newestGetMessagesResult (foundOldest: foundOldest, messages: messages).toJson ());
7378
7479 await tester.pumpWidget (TestZulipApp (accountId: eg.selfAccount.id,
80+ navigatorObservers: navObservers,
7581 child: MessageListPage (initNarrow: narrow)));
7682
7783 // global store, per-account store, and message list get loaded
@@ -126,6 +132,28 @@ void main() {
126132 });
127133 });
128134
135+ group ('app bar' , () {
136+ testWidgets ('has channel-feed action for topic narrows' , (tester) async {
137+ final pushedRoutes = < Route <void >> [];
138+ final navObserver = TestNavigatorObserver ()
139+ ..onPushed = (route, prevRoute) => pushedRoutes.add (route);
140+ final channel = eg.stream ();
141+ await setupMessageListPage (tester, narrow: TopicNarrow (channel.streamId, 'hi' ),
142+ navObservers: [navObserver],
143+ streams: [channel], messageCount: 1 );
144+
145+ // Clear out initial route.
146+ assert (pushedRoutes.length == 1 );
147+ pushedRoutes.clear ();
148+
149+ // Tap button; it works.
150+ await tester.tap (find.byIcon (ZulipIcons .message_feed));
151+ check (pushedRoutes).single.isA <WidgetRoute >()
152+ .page.isA <MessageListPage >().initNarrow
153+ .equals (ChannelNarrow (channel.streamId));
154+ });
155+ });
156+
129157 group ('presents message content appropriately' , () {
130158 testWidgets ('content not asked to consume insets (including bottom), even without compose box' , (tester) async {
131159 // Regression test for: https://github.com/zulip/zulip-flutter/issues/736
0 commit comments