1
+ import 'dart:convert' ;
2
+
1
3
import 'package:checks/checks.dart' ;
2
4
import 'package:flutter/material.dart' ;
3
5
import 'package:flutter_checks/flutter_checks.dart' ;
4
6
import 'package:flutter_test/flutter_test.dart' ;
7
+ import 'package:http/http.dart' as http;
5
8
import 'package:zulip/api/model/model.dart' ;
6
9
import 'package:zulip/model/store.dart' ;
7
10
import 'package:zulip/widgets/all_channels.dart' ;
@@ -12,18 +15,21 @@ import 'package:zulip/widgets/icons.dart';
12
15
import 'package:zulip/widgets/page.dart' ;
13
16
import 'package:zulip/widgets/theme.dart' ;
14
17
18
+ import '../api/fake_api.dart' ;
15
19
import '../api/model/model_checks.dart' ;
16
20
import '../flutter_checks.dart' ;
17
21
import '../model/binding.dart' ;
18
22
import '../example_data.dart' as eg;
19
23
import '../model/test_store.dart' ;
24
+ import '../stdlib_checks.dart' ;
20
25
import 'checks.dart' ;
21
26
import 'test_app.dart' ;
22
27
23
28
void main () {
24
29
TestZulipBinding .ensureInitialized ();
25
30
26
31
late PerAccountStore store;
32
+ late FakeApiConnection connection;
27
33
late TransitionDurationObserver transitionDurationObserver;
28
34
29
35
final groupSettingWithSelf = eg.groupSetting (members: [eg.selfUser.userId]);
@@ -40,6 +46,7 @@ void main() {
40
46
);
41
47
await testBinding.globalStore.add (eg.selfAccount, initialSnapshot);
42
48
store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
49
+ connection = store.connection as FakeApiConnection ;
43
50
44
51
transitionDurationObserver = TransitionDurationObserver ();
45
52
await tester.pumpWidget (TestZulipApp (accountId: eg.selfAccount.id,
@@ -207,4 +214,28 @@ void main() {
207
214
208
215
check (find.byType (BottomSheet )).findsOne ();
209
216
});
217
+
218
+ testWidgets ('use toggle switch to subscribe/unsubscribe' , (tester) async {
219
+ final channel = eg.stream ();
220
+ await setupAllChannelsPage (tester, channels: [channel]);
221
+
222
+ await tester.tap (find.byType (Toggle ));
223
+ check (connection.lastRequest).isA< http.Request > ()
224
+ ..method.equals ('POST' )
225
+ ..url.path.equals ('/api/v1/users/me/subscriptions' )
226
+ ..bodyFields.deepEquals ({
227
+ 'subscriptions' : jsonEncode ([{'name' : channel.name}]),
228
+ });
229
+
230
+ await store.addSubscription (eg.subscription (channel));
231
+ await tester.pump (); // Toggle changes state
232
+
233
+ await tester.tap (find.byType (Toggle ));
234
+ check (connection.lastRequest).isA< http.Request > ()
235
+ ..method.equals ('DELETE' )
236
+ ..url.path.equals ('/api/v1/users/me/subscriptions' )
237
+ ..bodyFields.deepEquals ({
238
+ 'subscriptions' : jsonEncode ([channel.name]),
239
+ });
240
+ });
210
241
}
0 commit comments