Skip to content

Commit 76e271e

Browse files
committed
chore: include util test
1 parent 72a56d6 commit 76e271e

File tree

2 files changed

+177
-3
lines changed

2 files changed

+177
-3
lines changed

test/flutter_offline_test.dart

Lines changed: 72 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,18 @@ void main() {
7676
}, throwsAssertionError);
7777
});
7878

79+
testWidgets('Test null Host options', (WidgetTester tester) async {
80+
expect(() {
81+
OfflineBuilder.initialize(
82+
connectivityService: TestConnectivityService(ConnectivityResult.none),
83+
hostToCheck: null,
84+
checkHost: null,
85+
connectivityBuilder: (_, __, Widget child) => child,
86+
child: const Text('child_result'),
87+
);
88+
}, throwsAssertionError);
89+
});
90+
7991
testWidgets('Test builder & child param', (WidgetTester tester) async {
8092
expect(() {
8193
OfflineBuilder.initialize(
@@ -168,6 +180,65 @@ void main() {
168180
});
169181
});
170182

183+
group("Test Check If Host", () {
184+
testWidgets('with default host', (WidgetTester tester) async {
185+
const debounceDuration = Duration.zero;
186+
await tester.pumpWidget(MaterialApp(
187+
home: OfflineBuilder.initialize(
188+
connectivityService:
189+
TestConnectivityService(ConnectivityResult.mobile),
190+
checkHost: true,
191+
debounceDuration: debounceDuration,
192+
connectivityBuilder: (_, ConnectivityResult connectivity, __) =>
193+
Text('$connectivity'),
194+
child: const SizedBox(),
195+
),
196+
));
197+
198+
await tester.pump(debounceDuration);
199+
expect(find.byType(SizedBox), findsOneWidget);
200+
});
201+
202+
testWidgets('with local host', (WidgetTester tester) async {
203+
const debounceDuration = Duration.zero;
204+
await tester.pumpWidget(MaterialApp(
205+
home: OfflineBuilder.initialize(
206+
connectivityService:
207+
TestConnectivityService(ConnectivityResult.mobile),
208+
checkHost: true,
209+
hostToCheck: "127.0.0.1",
210+
debounceDuration: debounceDuration,
211+
connectivityBuilder: (_, ConnectivityResult connectivity, __) =>
212+
Text('$connectivity'),
213+
child: const SizedBox(),
214+
),
215+
));
216+
217+
await tester.pump(debounceDuration);
218+
expect(find.byType(SizedBox), findsOneWidget);
219+
});
220+
221+
testWidgets('with bad host', (WidgetTester tester) async {
222+
const debounceDuration = Duration.zero;
223+
await tester.pumpWidget(MaterialApp(
224+
home: OfflineBuilder.initialize(
225+
connectivityService: TestConnectivityService(ConnectivityResult.none),
226+
checkHost: true,
227+
hostToCheck: "kkk",
228+
debounceDuration: debounceDuration,
229+
connectivityBuilder: (_, ConnectivityResult connectivity, __) {
230+
print(connectivity);
231+
return Text('$connectivity');
232+
},
233+
child: const SizedBox(),
234+
),
235+
));
236+
237+
await tester.pump(debounceDuration);
238+
expect(find.byType(SizedBox), findsOneWidget);
239+
});
240+
});
241+
171242
group("Test Debounce", () {
172243
testWidgets('Test for Debounce: Zero', (WidgetTester tester) async {
173244
final service = TestConnectivityService(ConnectivityResult.none);
@@ -293,9 +364,7 @@ class TestConnectivityService implements Connectivity {
293364
Stream<ConnectivityResult> get onConnectivityChanged => controller.stream;
294365

295366
@override
296-
Future<ConnectivityResult> checkConnectivity() {
297-
return Future.delayed(Duration.zero, () => initialConnection);
298-
}
367+
Future<ConnectivityResult> checkConnectivity() async => initialConnection;
299368

300369
@override
301370
Future<String> getWifiIP() async => '127.0.0.1';

test/utils_check_if_host_test.dart

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
import 'dart:async';
2+
3+
import 'package:connectivity/connectivity.dart';
4+
import 'package:flutter_offline/src/utils.dart';
5+
import 'package:flutter_test/flutter_test.dart';
6+
7+
Future<void> waitForTimer(int milliseconds) => Future<void>(() {
8+
/* ensure Timer is started*/
9+
})
10+
.then<void>(
11+
(_) => Future<void>.delayed(Duration(milliseconds: milliseconds + 1)),
12+
);
13+
14+
void main() {
15+
group('Group', () {
16+
StreamController<ConnectivityResult> values;
17+
List emittedValues;
18+
bool valuesCanceled;
19+
bool isDone;
20+
List errors;
21+
StreamSubscription subscription;
22+
23+
void setUpStreams(StreamTransformer transformer) {
24+
final stream = () => StreamController<ConnectivityResult>.broadcast();
25+
26+
valuesCanceled = false;
27+
values = stream()..onCancel = () => valuesCanceled = true;
28+
emittedValues = <ConnectivityResult>[];
29+
errors = <ConnectivityResult>[];
30+
isDone = false;
31+
subscription = values.stream.transform<void>(transformer).listen(
32+
emittedValues.add,
33+
onError: errors.add,
34+
onDone: () => isDone = true,
35+
);
36+
}
37+
38+
void cleanUpStreams() {
39+
valuesCanceled = null;
40+
values = null;
41+
emittedValues = null;
42+
errors = null;
43+
isDone = null;
44+
subscription = null;
45+
}
46+
47+
group('when host is ok', () {
48+
setUp(() async {
49+
setUpStreams(checkIfHostIsAvailble("127.0.0.1"));
50+
});
51+
52+
tearDown(() {
53+
cleanUpStreams();
54+
});
55+
56+
test('cancels values', () async {
57+
await subscription.cancel();
58+
expect(valuesCanceled, true);
59+
});
60+
61+
test('works as expected', () async {
62+
values.add(ConnectivityResult.wifi);
63+
await waitForTimer(5);
64+
expect(emittedValues, [ConnectivityResult.wifi]);
65+
});
66+
67+
test('waits for pending value to close', () async {
68+
values.add(ConnectivityResult.mobile);
69+
await waitForTimer(5);
70+
await values.close();
71+
await Future(() {});
72+
expect(isDone, true);
73+
});
74+
});
75+
76+
group('when host is not ok', () {
77+
setUp(() async {
78+
setUpStreams(checkIfHostIsAvailble("fake"));
79+
});
80+
81+
tearDown(() {
82+
cleanUpStreams();
83+
});
84+
85+
test('cancels values', () async {
86+
await subscription.cancel();
87+
expect(valuesCanceled, true);
88+
});
89+
90+
test('returns a ConnectivityResult.none', () async {
91+
values.add(ConnectivityResult.wifi);
92+
await waitForTimer(5);
93+
expect(emittedValues, [ConnectivityResult.none]);
94+
});
95+
96+
test('waits for pending value to close', () async {
97+
values.add(ConnectivityResult.mobile);
98+
await waitForTimer(5);
99+
await values.close();
100+
await Future(() {});
101+
expect(isDone, true);
102+
});
103+
});
104+
});
105+
}

0 commit comments

Comments
 (0)