@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
5
5
import 'package:flutter/services.dart' ;
6
6
import 'package:flutter_test/flutter_test.dart' ;
7
7
import 'package:http/http.dart' as http;
8
+ import 'package:zulip/api/core.dart' ;
8
9
import 'package:zulip/api/model/web_auth.dart' ;
9
10
import 'package:zulip/api/route/account.dart' ;
10
11
import 'package:zulip/api/route/realm.dart' ;
@@ -116,10 +117,93 @@ void main() {
116
117
connection.prepare (json: serverSettings.toJson ());
117
118
await tester.tap (find.text ('Continue' ));
118
119
await tester.pump (Duration .zero);
119
- checkNoErrorDialog (tester);
120
+ checkNoDialog (tester);
120
121
check (takePushedRoutes ()).single.isA <WidgetRoute >().page.isA <LoginPage >()
121
122
.serverSettings.realmUrl.equals (serverSettings.realmUrl);
122
123
});
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
123
207
});
124
208
125
209
group ('LoginPage' , () {
0 commit comments