Skip to content

Commit 312926c

Browse files
committed
Test fixes based on PR feedback
1 parent 69d65fe commit 312926c

File tree

1 file changed

+68
-57
lines changed

1 file changed

+68
-57
lines changed

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

Lines changed: 68 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -90,107 +90,118 @@ void main() {
9090
group('Connectivity handling', () {
9191
late MockConnectivityProvider mockConnectivity;
9292

93-
setUp(() {
93+
// Initialize once with mock provider, then test state changes
94+
setUpAll(() async {
9495
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-
96+
// Initialize Parse once with the mock provider
10597
await Parse().initialize(
10698
'appId',
10799
serverUrl,
108-
debug: true,
100+
debug: false,
109101
fileDirectory: 'someDirectory',
110102
appName: 'appName',
111103
appPackageName: 'somePackageName',
112104
appVersion: 'someAppVersion',
113105
connectivityProvider: mockConnectivity,
114106
);
107+
});
115108

116-
// act
117-
final result = await mockConnectivity.checkConnectivity();
118-
119-
// assert
120-
expect(result, ParseConnectivityResult.wifi);
109+
tearDownAll(() {
110+
mockConnectivity.dispose();
121111
});
122112

123-
final connectivityCases = <Map<String, dynamic>>[
113+
// Test data for parameterized connectivity state tests
114+
final connectivityTestCases = <Map<String, dynamic>>[
115+
{
116+
'state': ParseConnectivityResult.wifi,
117+
'isOnline': true,
118+
'description': 'wifi should be treated as online',
119+
},
124120
{
125-
'desc': 'ethernet',
126121
'state': ParseConnectivityResult.ethernet,
122+
'isOnline': true,
123+
'description': 'ethernet should be treated as online',
127124
},
128125
{
129-
'desc': 'mobile',
130126
'state': ParseConnectivityResult.mobile,
127+
'isOnline': true,
128+
'description': 'mobile should be treated as online',
131129
},
132130
{
133-
'desc': 'none',
134131
'state': ParseConnectivityResult.none,
132+
'isOnline': false,
133+
'description': 'none should be treated as offline',
135134
},
136135
];
137136

138-
for (final testCase in connectivityCases) {
139-
test('should handle ${testCase['desc']} connectivity', () async {
137+
for (final testCase in connectivityTestCases) {
138+
test(testCase['description'], () async {
140139
// arrange
141-
mockConnectivity.setConnectivity(testCase['state']);
142-
143-
await Parse().initialize(
144-
'appId',
145-
serverUrl,
146-
debug: true,
147-
fileDirectory: 'someDirectory',
148-
appName: 'appName',
149-
appPackageName: 'somePackageName',
150-
appVersion: 'someAppVersion',
151-
connectivityProvider: mockConnectivity,
152-
);
140+
final state = testCase['state'] as ParseConnectivityResult;
141+
final isOnline = testCase['isOnline'] as bool;
153142

154143
// act
144+
mockConnectivity.setConnectivity(state);
155145
final result = await mockConnectivity.checkConnectivity();
156146

157-
// assert
158-
expect(result, testCase['state']);
147+
// assert - verify the state is correctly identified
148+
expect(result, state);
149+
expect(result != ParseConnectivityResult.none, isOnline);
159150
});
160151
}
161-
test('should emit connectivity changes through stream', () async {
162-
// arrange
163-
mockConnectivity.setConnectivity(ParseConnectivityResult.wifi);
164152

165-
await Parse().initialize(
166-
'appId',
167-
serverUrl,
168-
debug: true,
169-
fileDirectory: 'someDirectory',
170-
appName: 'appName',
171-
appPackageName: 'somePackageName',
172-
appVersion: 'someAppVersion',
173-
connectivityProvider: mockConnectivity,
174-
);
175-
176-
final List<ParseConnectivityResult> emittedStates = [];
153+
test('should emit connectivity state transitions through stream', () async {
154+
// arrange
155+
final emittedStates = <ParseConnectivityResult>[];
177156
final subscription = mockConnectivity.connectivityStream.listen((state) {
178157
emittedStates.add(state);
179158
});
180159

181-
// act
160+
// act - transition through different connectivity states
161+
mockConnectivity.setConnectivity(ParseConnectivityResult.wifi);
162+
await Future.delayed(Duration(milliseconds: 10));
182163
mockConnectivity.setConnectivity(ParseConnectivityResult.ethernet);
183164
await Future.delayed(Duration(milliseconds: 10));
184165
mockConnectivity.setConnectivity(ParseConnectivityResult.mobile);
185166
await Future.delayed(Duration(milliseconds: 10));
186167
mockConnectivity.setConnectivity(ParseConnectivityResult.none);
187168
await Future.delayed(Duration(milliseconds: 10));
188169

170+
// assert - all state changes should be emitted
171+
expect(emittedStates.length, 4);
172+
expect(emittedStates[0], ParseConnectivityResult.wifi);
173+
expect(emittedStates[1], ParseConnectivityResult.ethernet);
174+
expect(emittedStates[2], ParseConnectivityResult.mobile);
175+
expect(emittedStates[3], ParseConnectivityResult.none);
176+
177+
// verify online states (wifi, ethernet, mobile) are not "none"
178+
expect(emittedStates[0], isNot(ParseConnectivityResult.none));
179+
expect(emittedStates[1], isNot(ParseConnectivityResult.none));
180+
expect(emittedStates[2], isNot(ParseConnectivityResult.none));
181+
182+
await subscription.cancel();
183+
});
184+
185+
test('should transition from offline to online correctly', () async {
186+
// arrange
187+
final stateChanges = <ParseConnectivityResult>[];
188+
final subscription = mockConnectivity.connectivityStream.listen((state) {
189+
stateChanges.add(state);
190+
});
191+
192+
// act - start offline, then go online via ethernet
193+
mockConnectivity.setConnectivity(ParseConnectivityResult.none);
194+
await Future.delayed(Duration(milliseconds: 10));
195+
mockConnectivity.setConnectivity(ParseConnectivityResult.ethernet);
196+
await Future.delayed(Duration(milliseconds: 10));
197+
189198
// assert
190-
expect(emittedStates.length, 3);
191-
expect(emittedStates[0], ParseConnectivityResult.ethernet);
192-
expect(emittedStates[1], ParseConnectivityResult.mobile);
193-
expect(emittedStates[2], ParseConnectivityResult.none);
199+
expect(stateChanges.length, 2);
200+
expect(stateChanges[0], ParseConnectivityResult.none);
201+
expect(stateChanges[1], ParseConnectivityResult.ethernet);
202+
// Verify the transition is from offline to online
203+
expect(stateChanges[0] == ParseConnectivityResult.none, true);
204+
expect(stateChanges[1] != ParseConnectivityResult.none, true);
194205

195206
await subscription.cancel();
196207
});

0 commit comments

Comments
 (0)