Skip to content

Commit 8ba7d13

Browse files
committed
upgrade all tests
1 parent 672cebb commit 8ba7d13

18 files changed

+326
-224
lines changed

integration_test/app_test.dart

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_test/flutter_test.dart';
3+
import 'package:integration_test/integration_test.dart';
4+
import 'main.dart' as app;
5+
6+
void main() {
7+
group('Testing App Performance Tests', () {
8+
final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;
9+
10+
binding.framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.fullyLive;
11+
12+
testWidgets('starts with topRated', (tester) async {
13+
app.main();
14+
await tester.pumpAndSettle();
15+
16+
// Movie 1
17+
final titleTextFinder1 = find.byKey(Key('1-title'));
18+
final overviewTextFinder1 = find.byKey(Key('1-overview'));
19+
final releaseTextFinder1 = find.byKey(Key('1-releaseDate'));
20+
// checking widget present or not
21+
expect(titleTextFinder1, findsOneWidget);
22+
expect(overviewTextFinder1, findsOneWidget);
23+
expect(releaseTextFinder1, findsOneWidget);
24+
25+
// checking values
26+
expect((titleTextFinder1.evaluate().single.widget as Text).data, 'Fight Club');
27+
expect((overviewTextFinder1.evaluate().single.widget as Text).data, 'Overview 1');
28+
expect((releaseTextFinder1.evaluate().single.widget as Text).data, '1999-10-12');
29+
30+
// Movie 2
31+
final titleTextFinder2 = find.byKey(Key('2-title'));
32+
final overviewTextFinder2 = find.byKey(Key('2-overview'));
33+
final releaseTextFinder2 = find.byKey(Key('2-releaseDate'));
34+
// checking widget present or not
35+
expect(titleTextFinder2, findsOneWidget);
36+
expect(overviewTextFinder2, findsOneWidget);
37+
expect(releaseTextFinder2, findsOneWidget);
38+
39+
// checking values
40+
expect((titleTextFinder2.evaluate().single.widget as Text).data, 'Fight Club 2');
41+
expect((overviewTextFinder2.evaluate().single.widget as Text).data, 'Overview 2');
42+
expect((releaseTextFinder2.evaluate().single.widget as Text).data, '1999-10-20');
43+
});
44+
});
45+
}

integration_test/driver.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import 'package:integration_test/integration_test_driver.dart';
2+
3+
Future<void> main() => integrationDriver();
Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'dart:convert';
22

33
import 'package:flutter/material.dart';
4-
import 'package:flutter_driver/driver_extension.dart';
54
import 'package:flutter_movie_deep_dive_test/src/app.dart';
65
import 'package:flutter_movie_deep_dive_test/src/providers/providers.dart';
76
import 'package:http/http.dart';
@@ -10,17 +9,12 @@ import 'package:http/testing.dart';
109
import '../test/src/common.dart';
1110

1211
void main() {
13-
// This line enables the extension.
14-
enableFlutterDriverExtension();
15-
1612
final mockClient = MockClient((request) async {
1713
return Response(json.encode(exampleJsonResponse2), 200);
1814
});
1915

20-
// Call the `main()` function of the app, or call `runApp` with
21-
// any widget you are interested in testing.
22-
runApp(AppProvider(
16+
return runApp(AppProvider(
2317
httpClient: mockClient,
2418
child: MyApp(),
2519
));
26-
}
20+
}

lib/src/blocs/app_bloc.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class AppBloc extends Bloc<AppEvent, AppState> {
1313

1414
@override
1515
Stream<AppState> mapEventToState(AppEvent event) async* {
16+
yield initWithState;
1617
//
1718
// FETCH
1819
//

lib/src/models/movies.dart

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@ class MoviesResponse extends Equatable {
2323
required this.movies,
2424
});
2525

26-
factory MoviesResponse.fromJson(Map<String, dynamic> json) =>
27-
_$MoviesResponseFromJson(json);
26+
factory MoviesResponse.fromJson(Map<String, dynamic> json) => _$MoviesResponseFromJson(json);
2827

2928
@override
30-
List<Object> get props => [
29+
List<dynamic> get props => [
3130
this.page,
3231
this.totalPages,
3332
this.totalResults,
@@ -37,66 +36,66 @@ class MoviesResponse extends Equatable {
3736

3837
@JsonSerializable()
3938
class Movie extends Equatable {
40-
final int id;
39+
final int? id;
4140

42-
final bool video;
41+
final bool? video;
4342

4443
@JsonKey(name: 'vote_count')
45-
final int voteCount;
44+
final int? voteCount;
4645

4746
@JsonKey(name: 'vote_average')
48-
final double voteAverage;
47+
final double? voteAverage;
4948

50-
final String title;
49+
final String? title;
5150

5251
@JsonKey(name: 'poster_path')
53-
final String posterPath;
52+
final String? posterPath;
5453

5554
@JsonKey(name: 'original_language')
56-
final String originalLanguage;
55+
final String? originalLanguage;
5756

5857
@JsonKey(name: 'original_title')
59-
final String originalTitle;
58+
final String? originalTitle;
6059

61-
final bool adult;
60+
final bool? adult;
6261

63-
final String overview;
62+
final String? overview;
6463

6564
@JsonKey(name: 'gender_ids')
66-
final List genreIds = [];
65+
final List? genreIds = [];
6766

6867
@JsonKey(name: 'backdrop_path')
69-
final String backdropPath;
68+
final String? backdropPath;
7069

71-
final double popularity;
70+
final double? popularity;
7271

7372
@JsonKey(name: 'release_date')
74-
final String releaseDate;
73+
final String? releaseDate;
7574

7675
@JsonKey(defaultValue: false)
77-
final bool favorite;
76+
final bool? favorite;
7877

7978
Movie({
80-
required this.id,
81-
required this.video,
82-
required this.voteCount,
83-
required this.voteAverage,
84-
required this.title,
85-
required this.posterPath,
86-
required this.originalLanguage,
87-
required this.originalTitle,
88-
required this.adult,
89-
required this.overview,
90-
required this.backdropPath,
91-
required this.popularity,
92-
required this.releaseDate,
93-
required this.favorite,
79+
this.id,
80+
this.video,
81+
this.voteCount,
82+
this.voteAverage,
83+
this.title,
84+
this.posterPath,
85+
this.originalLanguage,
86+
this.originalTitle,
87+
this.adult,
88+
this.overview,
89+
this.backdropPath,
90+
this.popularity,
91+
this.releaseDate,
92+
this.favorite,
9493
});
9594

9695
factory Movie.fromJson(Map<String, dynamic> json) => _$MovieFromJson(json);
9796

9897
@override
99-
List<Object> get props => [
98+
List<dynamic> get props => [
10099
this.id,
101100
this.video,
102101
this.voteCount,
@@ -113,7 +112,6 @@ class Movie extends Equatable {
113112
this.favorite,
114113
];
115114

116-
String get posterPathResolved => posterPath == null
117-
? 'https://via.placeholder.com/300'
118-
: 'http://image.tmdb.org/t/p/w185/$posterPath';
115+
String get posterPathResolved =>
116+
posterPath == null ? 'https://via.placeholder.com/300' : 'http://image.tmdb.org/t/p/w185/$posterPath';
119117
}

lib/src/models/movies.g.dart

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/widgets/movie_card.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ class MovieCard extends StatelessWidget {
2727
Padding(
2828
padding: const EdgeInsets.all(8.0),
2929
child: Text(
30-
data.title,
31-
key: Key("${data.id}-title"),
30+
data.title ?? "",
31+
key: Key('${data.id}-title'),
3232
textAlign: TextAlign.left,
3333
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
3434
),
3535
),
3636
Text(
37-
data.overview,
37+
data.overview ?? "",
3838
key: Key("${data.id}-overview"),
3939
style: TextStyle(color: Colors.black54),
4040
),
@@ -48,7 +48,7 @@ class MovieCard extends StatelessWidget {
4848
child: Padding(
4949
padding: const EdgeInsets.only(left: 8),
5050
child: Text(
51-
data.releaseDate,
51+
data.releaseDate ?? "",
5252
key: Key("${data.id}-releaseDate"),
5353
),
5454
),

0 commit comments

Comments
 (0)