@@ -17,6 +17,7 @@ import 'package:zulip/widgets/login.dart';
1717import 'package:zulip/widgets/page.dart' ;
1818
1919import '../api/fake_api.dart' ;
20+ import '../api/route/route_checks.dart' ;
2021import '../example_data.dart' as eg;
2122import '../model/binding.dart' ;
2223import '../stdlib_checks.dart' ;
@@ -65,7 +66,61 @@ void main() {
6566 expectErrorFromText (
'[email protected] ' ,
ServerUrlValidationError .noUseEmail);
6667 });
6768
68- // TODO test AddAccountPage
69+ group ('AddAccountPage' , () {
70+ late FakeApiConnection connection;
71+ List <Route <dynamic >> pushedRoutes = [];
72+ List <Route <dynamic >> poppedRoutes = [];
73+
74+ List <Route <dynamic >> takePushedRoutes () {
75+ final routes = pushedRoutes.toList ();
76+ pushedRoutes.clear ();
77+ return routes;
78+ }
79+
80+ Future <void > prepare (WidgetTester tester) async {
81+ addTearDown (testBinding.reset);
82+
83+ pushedRoutes = [];
84+ poppedRoutes = [];
85+ final testNavObserver = TestNavigatorObserver ();
86+ testNavObserver.onPushed = (route, prevRoute) => pushedRoutes.add (route);
87+ testNavObserver.onPopped = (route, prevRoute) => poppedRoutes.add (route);
88+ testNavObserver.onReplaced = (route, prevRoute) {
89+ poppedRoutes.add (prevRoute! );
90+ pushedRoutes.add (route! );
91+ };
92+
93+ await tester.pumpWidget (ZulipApp (navigatorObservers: [testNavObserver]));
94+ await tester.pump ();
95+ check (takePushedRoutes ()).single.isA <WidgetRoute >().page.isA <ChooseAccountPage >();
96+ await tester.tap (find.text ('Add an account' ));
97+ check (takePushedRoutes ()).single.isA <WidgetRoute >().page.isA <AddAccountPage >();
98+ await testNavObserver.pumpPastTransition (tester);
99+ }
100+
101+ Future <void > attempt (WidgetTester tester,
102+ Uri realmUrl, Map <String , Object ?> responseJson) async {
103+ await tester.enterText (find.byType (TextField ), realmUrl.toString ());
104+ testBinding.globalStore.useCachedApiConnections = true ;
105+ connection = testBinding.globalStore.apiConnection (
106+ realmUrl: realmUrl,
107+ zulipFeatureLevel: null );
108+ connection.prepare (json: responseJson);
109+ await tester.tap (find.text ('Continue' ));
110+ await tester.pump (Duration .zero);
111+ }
112+
113+ testWidgets ('happy path' , (tester) async {
114+ await prepare (tester);
115+
116+ final serverSettings = eg.serverSettings ();
117+
118+ await attempt (tester, serverSettings.realmUrl, serverSettings.toJson ());
119+ checkNoDialog (tester);
120+ check (takePushedRoutes ()).single.isA <WidgetRoute >().page.isA <LoginPage >()
121+ .serverSettings.realmUrl.equals (serverSettings.realmUrl);
122+ });
123+ });
69124
70125 group ('LoginPage' , () {
71126 late FakeApiConnection connection;
0 commit comments