Skip to content

Commit 26fddd2

Browse files
committed
Add: ListBloc integration tests with ViewStateBuilder.
1 parent acdf2a2 commit 26fddd2

File tree

3 files changed

+94
-2
lines changed

3 files changed

+94
-2
lines changed

test/src/details/details_repository_mock.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter_bloc_patterns/src/details/details_repository.dart';
22

3-
const _delay = Duration(milliseconds: 1);
3+
const _delay = Duration.zero;
44

55
class InMemoryDetailsRepository<T, I> extends DetailsRepository<T, I> {
66
final Map<I, T> elements;
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import 'package:flutter_bloc_patterns/base_list.dart';
2+
import 'package:flutter_test/flutter_test.dart';
3+
4+
import '../../util/widget_tester_ext.dart';
5+
import '../../view/view_state_builder_util.dart';
6+
import '../../view/view_state_matchers.dart';
7+
import '../filter/filter_list_repository_mock.dart';
8+
9+
void main() {
10+
ListBloc<int> bloc;
11+
12+
setUp(() {
13+
bloc = ListBloc(InMemoryFilterRepository());
14+
});
15+
16+
Future<void> pumpViewStateBuilder(WidgetTester tester) {
17+
return tester.pumpWidget(makeTestableViewStateBuilder(bloc));
18+
}
19+
20+
testWidgets(
21+
'should display onReady widget when no action has been performed by the bloc',
22+
(WidgetTester tester) async {
23+
await pumpViewStateBuilder(tester);
24+
expectReadyWidgetIsDisplayed();
25+
});
26+
27+
group(
28+
'when loading list succeeds',
29+
() {
30+
setUp(() {
31+
bloc = ListBloc(InMemoryFilterRepository([1, 2, 3]));
32+
});
33+
34+
testWidgets('then should display ready, loading and success widgets',
35+
(WidgetTester tester) async {
36+
await pumpViewStateBuilder(tester);
37+
expectReadyWidgetIsDisplayed();
38+
bloc.loadElements();
39+
await tester.asyncPump();
40+
expectLoadingWidgetIsDisplayed();
41+
await tester.asyncPump();
42+
expectSuccessWidgetIsDisplayed();
43+
});
44+
},
45+
);
46+
47+
group(
48+
'when list is empty',
49+
() {
50+
setUp(() {
51+
bloc = ListBloc(InMemoryFilterRepository());
52+
});
53+
54+
testWidgets('then should display ready, loading and empty widgets',
55+
(WidgetTester tester) async {
56+
await pumpViewStateBuilder(tester);
57+
expectReadyWidgetIsDisplayed();
58+
bloc.loadElements();
59+
await tester.asyncPump();
60+
expectLoadingWidgetIsDisplayed();
61+
await tester.asyncPump();
62+
expectEmptyWidgetIsDisplayed();
63+
});
64+
},
65+
);
66+
67+
group(
68+
'when loading list fails',
69+
() {
70+
final someError = Exception();
71+
72+
setUp(() {
73+
bloc = ListBloc(FailingFilterRepository(someError));
74+
});
75+
76+
testWidgets('then should display ready, loading and error widgets',
77+
(WidgetTester tester) async {
78+
await pumpViewStateBuilder(tester);
79+
expectReadyWidgetIsDisplayed();
80+
bloc.loadElements();
81+
await tester.asyncPump();
82+
expectLoadingWidgetIsDisplayed();
83+
await tester.asyncPump();
84+
expectErrorWidgetIsDisplayed();
85+
});
86+
},
87+
);
88+
89+
tearDown(() {
90+
bloc.close();
91+
});
92+
}

test/src/list/filter/filter_list_repository_mock.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter_bloc_patterns/src/list/filter/filter_list_repository.dart';
22

3-
const _delay = Duration(milliseconds: 1);
3+
const _delay = Duration.zero;
44

55
class InMemoryFilterRepository<T, F> extends FilterListRepository<T, F> {
66
final List<T> elements;

0 commit comments

Comments
 (0)