@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
55import 'package:flutter/services.dart' ;
66import 'package:flutter_test/flutter_test.dart' ;
77import 'package:http/http.dart' as http;
8+ import 'package:zulip/api/core.dart' ;
89import 'package:zulip/api/model/web_auth.dart' ;
910import 'package:zulip/api/route/account.dart' ;
1011import 'package:zulip/api/route/realm.dart' ;
@@ -116,10 +117,93 @@ void main() {
116117 connection.prepare (json: serverSettings.toJson ());
117118 await tester.tap (find.text ('Continue' ));
118119 await tester.pump (Duration .zero);
119- checkNoErrorDialog (tester);
120+ checkNoDialog (tester);
120121 check (takePushedRoutes ()).single.isA <WidgetRoute >().page.isA <LoginPage >()
121122 .serverSettings.realmUrl.equals (serverSettings.realmUrl);
122123 });
124+
125+ testWidgets ('Server too old, well-formed response' , (tester) async {
126+ await prepare (tester);
127+
128+ final serverSettings = eg.serverSettings (
129+ zulipFeatureLevel: 1 , zulipVersion: '3.0' );
130+
131+ testBinding.globalStore.useCachedApiConnections = true ;
132+ connection = testBinding.globalStore.apiConnection (
133+ realmUrl: serverSettings.realmUrl,
134+ zulipFeatureLevel: null );
135+
136+ await tester.enterText (find.byType (TextField ),
137+ serverSettings.realmUrl.toString ());
138+
139+ connection.prepare (json: serverSettings.toJson ());
140+ await tester.tap (find.text ('Continue' ));
141+ await tester.pump (Duration .zero);
142+ checkErrorDialog (tester,
143+ expectedTitle: 'Could not connect' ,
144+ expectedMessage: '${serverSettings .realmUrl } is running Zulip Server 3.0, which is unsupported. The minimum supported version is Zulip Server $kMinSupportedZulipVersion .' );
145+ // i.e., not the login route
146+ check (takePushedRoutes ()).single.isA <DialogRoute <void >>();
147+ });
148+
149+ testWidgets ('Server too old, malformed response' , (tester) async {
150+ await prepare (tester);
151+
152+ final serverSettings = eg.serverSettings (
153+ zulipFeatureLevel: 1 , zulipVersion: '3.0' );
154+ final serverSettingsMalformedJson =
155+ serverSettings.toJson ()..['push_notifications_enabled' ] = 'abcd' ;
156+ check (() => GetServerSettingsResult .fromJson (serverSettingsMalformedJson))
157+ .throws <void >();
158+
159+ testBinding.globalStore.useCachedApiConnections = true ;
160+ connection = testBinding.globalStore.apiConnection (
161+ realmUrl: serverSettings.realmUrl,
162+ zulipFeatureLevel: null );
163+
164+ await tester.enterText (find.byType (TextField ),
165+ serverSettings.realmUrl.toString ());
166+
167+ connection.prepare (json: serverSettingsMalformedJson);
168+ await tester.tap (find.text ('Continue' ));
169+ await tester.pump (Duration .zero);
170+ checkErrorDialog (tester,
171+ expectedTitle: 'Could not connect' ,
172+ expectedMessage: '${serverSettings .realmUrl } is running Zulip Server 3.0, which is unsupported. The minimum supported version is Zulip Server $kMinSupportedZulipVersion .' );
173+ // i.e., not the login route
174+ check (takePushedRoutes ()).single.isA <DialogRoute <void >>();
175+ });
176+
177+ testWidgets ('Malformed response, server not too old' , (tester) async {
178+ await prepare (tester);
179+
180+ final serverSettings = eg.serverSettings (
181+ zulipVersion: eg.recentZulipVersion,
182+ zulipFeatureLevel: eg.recentZulipFeatureLevel);
183+ final serverSettingsMalformedJson =
184+ serverSettings.toJson ()..['push_notifications_enabled' ] = 'abcd' ;
185+ check (() => GetServerSettingsResult .fromJson (serverSettingsMalformedJson))
186+ .throws <void >();
187+
188+ testBinding.globalStore.useCachedApiConnections = true ;
189+ connection = testBinding.globalStore.apiConnection (
190+ realmUrl: serverSettings.realmUrl,
191+ zulipFeatureLevel: null );
192+
193+ await tester.enterText (find.byType (TextField ),
194+ serverSettings.realmUrl.toString ());
195+
196+ connection.prepare (json: serverSettingsMalformedJson);
197+ await tester.tap (find.text ('Continue' ));
198+ await tester.pump (Duration .zero);
199+ checkErrorDialog (tester,
200+ expectedTitle: 'Could not connect' ,
201+ expectedMessage: 'Failed to connect to server:\n ${serverSettings .realmUrl }' );
202+ // i.e., not the login route
203+ check (takePushedRoutes ()).single.isA <DialogRoute <void >>();
204+ });
205+
206+ // TODO other errors
123207 });
124208
125209 group ('LoginPage' , () {
0 commit comments