Skip to content

Commit bafddc5

Browse files
committed
chore: include util test
1 parent 0e2ae9f commit bafddc5

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
@@ -74,6 +74,18 @@ void main() {
7474
}, throwsAssertionError);
7575
});
7676

77+
testWidgets('Test null Host options', (WidgetTester tester) async {
78+
expect(() {
79+
OfflineBuilder.initialize(
80+
connectivityService: TestConnectivityService(ConnectivityResult.none),
81+
hostToCheck: null,
82+
checkHost: null,
83+
connectivityBuilder: (_, __, Widget child) => child,
84+
child: const Text('child_result'),
85+
);
86+
}, throwsAssertionError);
87+
});
88+
7789
testWidgets('Test builder & child param', (WidgetTester tester) async {
7890
expect(() {
7991
OfflineBuilder.initialize(
@@ -159,6 +171,65 @@ void main() {
159171
});
160172
});
161173

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

282353
@override
283-
Future<ConnectivityResult> checkConnectivity() {
284-
return Future.delayed(Duration.zero, () => initialConnection);
285-
}
354+
Future<ConnectivityResult> checkConnectivity() async => initialConnection;
286355

287356
@override
288357
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)