Skip to content

Commit b79d9b1

Browse files
committed
Add ethernet to ParseConnectivityResult
Provides better alignment with newer version of connectivity_plus Add basic testing Part 1 of 2 to fix Issue #1042
1 parent 5ab3974 commit b79d9b1

File tree

2 files changed

+164
-0
lines changed

2 files changed

+164
-0
lines changed

packages/dart/lib/src/network/parse_connectivity.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ enum ParseConnectivityResult {
55
/// WiFi: Device connected via Wi-Fi
66
wifi,
77

8+
/// Ethernet: Device connected via Ethernet
9+
ethernet,
10+
811
/// Mobile: Device connected to cellular network
912
mobile,
1013

packages/dart/test/src/network/parse_live_query_test.dart

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,30 @@ import 'package:test/test.dart';
66

77
import '../../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+
933
void 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

Comments
 (0)