@@ -6,6 +6,30 @@ import 'package:test/test.dart';
66
77import '../../test_utils.dart' ;
88
9+ /// Mock connectivity provider for testing different connectivity states
10+ class MockConnectivityProvider implements ParseConnectivityProvider {
11+ final StreamController <ParseConnectivityResult > _controller =
12+ StreamController <ParseConnectivityResult >.broadcast ();
13+ ParseConnectivityResult _currentState = ParseConnectivityResult .wifi;
14+
15+ @override
16+ Future <ParseConnectivityResult > checkConnectivity () async {
17+ return _currentState;
18+ }
19+
20+ @override
21+ Stream <ParseConnectivityResult > get connectivityStream => _controller.stream;
22+
23+ void setConnectivity (ParseConnectivityResult state) {
24+ _currentState = state;
25+ _controller.add (state);
26+ }
27+
28+ void dispose () {
29+ _controller.close ();
30+ }
31+ }
32+
933void main () {
1034 setUpAll (() async {
1135 // Create a fake server
@@ -62,4 +86,141 @@ void main() {
6286 // 10 millisecond hold for stream
6387 await Future .delayed (Duration (milliseconds: 10 ));
6488 });
89+
90+ group ('Connectivity handling' , () {
91+ late MockConnectivityProvider mockConnectivity;
92+
93+ setUp (() {
94+ mockConnectivity = MockConnectivityProvider ();
95+ });
96+
97+ tearDown (() {
98+ mockConnectivity.dispose ();
99+ });
100+
101+ test ('should handle wifi connectivity' , () async {
102+ // arrange
103+ mockConnectivity.setConnectivity (ParseConnectivityResult .wifi);
104+
105+ await Parse ().initialize (
106+ 'appId' ,
107+ serverUrl,
108+ debug: true ,
109+ fileDirectory: 'someDirectory' ,
110+ appName: 'appName' ,
111+ appPackageName: 'somePackageName' ,
112+ appVersion: 'someAppVersion' ,
113+ connectivityProvider: mockConnectivity,
114+ );
115+
116+ // act
117+ final result = await mockConnectivity.checkConnectivity ();
118+
119+ // assert
120+ expect (result, ParseConnectivityResult .wifi);
121+ });
122+
123+ test ('should handle ethernet connectivity' , () async {
124+ // arrange
125+ mockConnectivity.setConnectivity (ParseConnectivityResult .ethernet);
126+
127+ await Parse ().initialize (
128+ 'appId' ,
129+ serverUrl,
130+ debug: true ,
131+ fileDirectory: 'someDirectory' ,
132+ appName: 'appName' ,
133+ appPackageName: 'somePackageName' ,
134+ appVersion: 'someAppVersion' ,
135+ connectivityProvider: mockConnectivity,
136+ );
137+
138+ // act
139+ final result = await mockConnectivity.checkConnectivity ();
140+
141+ // assert
142+ expect (result, ParseConnectivityResult .ethernet);
143+ });
144+
145+ test ('should handle mobile connectivity' , () async {
146+ // arrange
147+ mockConnectivity.setConnectivity (ParseConnectivityResult .mobile);
148+
149+ await Parse ().initialize (
150+ 'appId' ,
151+ serverUrl,
152+ debug: true ,
153+ fileDirectory: 'someDirectory' ,
154+ appName: 'appName' ,
155+ appPackageName: 'somePackageName' ,
156+ appVersion: 'someAppVersion' ,
157+ connectivityProvider: mockConnectivity,
158+ );
159+
160+ // act
161+ final result = await mockConnectivity.checkConnectivity ();
162+
163+ // assert
164+ expect (result, ParseConnectivityResult .mobile);
165+ });
166+
167+ test ('should handle no connectivity' , () async {
168+ // arrange
169+ mockConnectivity.setConnectivity (ParseConnectivityResult .none);
170+
171+ await Parse ().initialize (
172+ 'appId' ,
173+ serverUrl,
174+ debug: true ,
175+ fileDirectory: 'someDirectory' ,
176+ appName: 'appName' ,
177+ appPackageName: 'somePackageName' ,
178+ appVersion: 'someAppVersion' ,
179+ connectivityProvider: mockConnectivity,
180+ );
181+
182+ // act
183+ final result = await mockConnectivity.checkConnectivity ();
184+
185+ // assert
186+ expect (result, ParseConnectivityResult .none);
187+ });
188+
189+ test ('should emit connectivity changes through stream' , () async {
190+ // arrange
191+ mockConnectivity.setConnectivity (ParseConnectivityResult .wifi);
192+
193+ await Parse ().initialize (
194+ 'appId' ,
195+ serverUrl,
196+ debug: true ,
197+ fileDirectory: 'someDirectory' ,
198+ appName: 'appName' ,
199+ appPackageName: 'somePackageName' ,
200+ appVersion: 'someAppVersion' ,
201+ connectivityProvider: mockConnectivity,
202+ );
203+
204+ final List <ParseConnectivityResult > emittedStates = [];
205+ final subscription = mockConnectivity.connectivityStream.listen ((state) {
206+ emittedStates.add (state);
207+ });
208+
209+ // act
210+ mockConnectivity.setConnectivity (ParseConnectivityResult .ethernet);
211+ await Future .delayed (Duration (milliseconds: 10 ));
212+ mockConnectivity.setConnectivity (ParseConnectivityResult .mobile);
213+ await Future .delayed (Duration (milliseconds: 10 ));
214+ mockConnectivity.setConnectivity (ParseConnectivityResult .none);
215+ await Future .delayed (Duration (milliseconds: 10 ));
216+
217+ // assert
218+ expect (emittedStates.length, 3 );
219+ expect (emittedStates[0 ], ParseConnectivityResult .ethernet);
220+ expect (emittedStates[1 ], ParseConnectivityResult .mobile);
221+ expect (emittedStates[2 ], ParseConnectivityResult .none);
222+
223+ await subscription.cancel ();
224+ });
225+ });
65226}
0 commit comments