@@ -4,6 +4,7 @@ import 'package:checks/checks.dart';
44import 'package:flutter/material.dart' ;
55import 'package:flutter_test/flutter_test.dart' ;
66import 'package:zulip/log.dart' ;
7+ import 'package:zulip/model/actions.dart' ;
78import 'package:zulip/model/database.dart' ;
89import 'package:zulip/widgets/app.dart' ;
910import 'package:zulip/widgets/home.dart' ;
@@ -57,6 +58,39 @@ void main() {
5758 });
5859 });
5960
61+ group ('_EmptyStackNavigatorObserver' , () {
62+ late List <Route <void >> pushedRoutes;
63+ late List <Route <void >> removedRoutes;
64+
65+ Future <void > prepare (WidgetTester tester) async {
66+ addTearDown (testBinding.reset);
67+
68+ pushedRoutes = [];
69+ removedRoutes = [];
70+ final testNavObserver = TestNavigatorObserver ();
71+ testNavObserver.onPushed = (route, prevRoute) => pushedRoutes.add (route);
72+ testNavObserver.onRemoved = (route, prevRoute) => removedRoutes.add (route);
73+
74+ await tester.pumpWidget (ZulipApp (navigatorObservers: [testNavObserver]));
75+ await tester.pump (); // start to load account
76+ check (pushedRoutes).single.isA <WidgetRoute >().page.isA <HomePage >();
77+ pushedRoutes.clear ();
78+ }
79+
80+ testWidgets ('push route when removing last route on stack' , (tester) async {
81+ await testBinding.globalStore.add (eg.selfAccount, eg.initialSnapshot ());
82+ await prepare (tester);
83+
84+ final future = logOutAccount (testBinding.globalStore, eg.selfAccount.id);
85+ await tester.pump (TestGlobalStore .removeAccountDuration);
86+ await future;
87+ check (pushedRoutes).single.isA <WidgetRoute >().page.isA <ChooseAccountPage >();
88+ check (removedRoutes).single.isA <WidgetRoute >().page.isA <HomePage >();
89+ check (testBinding.globalStore.takeDoRemoveAccountCalls ())
90+ .single.equals (eg.selfAccount.id);
91+ });
92+ });
93+
6094 group ('ChooseAccountPage' , () {
6195 Future <void > setupChooseAccountPage (WidgetTester tester, {
6296 required List <Account > accounts,
0 commit comments