1
+ import 'package:flutter/material.dart' ;
2
+ import 'package:flutter_bloc/flutter_bloc.dart' ;
3
+ import 'package:flutter_movie_deep_dive_test/src/blocs/blocs.dart' ;
4
+ import 'package:flutter_movie_deep_dive_test/src/models/models.dart' ;
5
+ import 'package:flutter_movie_deep_dive_test/src/providers/providers.dart' ;
6
+ import 'package:flutter_movie_deep_dive_test/src/widgets/widgets.dart' ;
7
+ import 'package:flutter_test/flutter_test.dart' ;
8
+ import 'package:http/http.dart' ;
9
+ import 'package:image_test_utils/image_test_utils.dart' ;
10
+ import 'package:mockito/mockito.dart' ;
11
+
12
+ import '../common.dart' ;
13
+
14
+ class UnknowState extends AppState {}
15
+
16
+ void main () {
17
+ AppServiceMock serviceMock;
18
+ AppBloc appBloc;
19
+ MoviesResponse response;
20
+ setUp (() {
21
+ serviceMock = AppServiceMock ();
22
+ response = MoviesResponse .fromJson (exampleJsonResponse2);
23
+ when (serviceMock.loadMovies ()).thenAnswer ((_) => Future .value (response));
24
+ });
25
+
26
+ tearDown (() {
27
+ appBloc? .close ();
28
+ });
29
+
30
+ group ('Display Home' , () {
31
+ testWidgets ('state: AppLoading' , (WidgetTester tester) async {
32
+ await tester.pumpWidget (
33
+ MaterialApp (
34
+ home: Scaffold (
35
+ body: AppProvider (
36
+ child: BlocProvider (
37
+ builder: (context) =>
38
+ AppBloc (service: serviceMock, initWithState: AppLoading ()),
39
+ child: MyHomePage (title: 'Test Widget' ),
40
+ ),
41
+ ),
42
+ ),
43
+ ),
44
+ );
45
+
46
+ Finder textFinder = find.byType (CircularProgressIndicator );
47
+ expect (textFinder, findsOneWidget);
48
+ });
49
+
50
+ testWidgets ('state: AppLoaded' , (WidgetTester tester) async {
51
+ provideMockedNetworkImages (() async {
52
+ await tester.pumpWidget (
53
+ MaterialApp (
54
+ home: Scaffold (
55
+ body: AppProvider (
56
+ child: BlocProvider (
57
+ builder: (context) => AppBloc (
58
+ service: serviceMock,
59
+ initWithState: AppLoaded (response: response)),
60
+ child: MyHomePage (title: 'Test Widget' ),
61
+ ),
62
+ ),
63
+ ),
64
+ ),
65
+ );
66
+
67
+ Finder textFinder = find.byType (MoviesList );
68
+ expect (textFinder, findsOneWidget);
69
+ });
70
+ });
71
+
72
+ testWidgets ('state: AppError' , (WidgetTester tester) async {
73
+ await tester.pumpWidget (
74
+ MaterialApp (
75
+ home: Scaffold (
76
+ body: AppProvider (
77
+ httpClient: Client (),
78
+ child: BlocProvider (
79
+ builder: (context) =>
80
+ AppBloc (service: serviceMock, initWithState: AppError ()),
81
+ child: MyHomePage (title: 'Test Widget' ),
82
+ ),
83
+ ),
84
+ ),
85
+ ),
86
+ );
87
+
88
+ Finder textFinder = find.text ('Something went wrong!' );
89
+ expect (textFinder, findsOneWidget);
90
+ });
91
+
92
+ testWidgets ('state: unknow' , (WidgetTester tester) async {
93
+ await tester.pumpWidget (
94
+ MaterialApp (
95
+ home: Scaffold (
96
+ body: AppProvider (
97
+ httpClient: null ,
98
+ child: BlocProvider (
99
+ builder: (context) =>
100
+ AppBloc (service: serviceMock, initWithState: UnknowState ()),
101
+ child: MyHomePage (title: 'Test Widget' ),
102
+ ),
103
+ ),
104
+ ),
105
+ ),
106
+ );
107
+
108
+ Finder textFinder = find.text ('Wait ...' );
109
+ expect (textFinder, findsOneWidget);
110
+ });
111
+ });
112
+ }
0 commit comments