Skip to content

Commit

Permalink
Added MovieRepositoryImpl Tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ashishrawat2911 committed Aug 5, 2022
1 parent be47c4d commit 75288d0
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 22 deletions.
21 changes: 21 additions & 0 deletions lib/core/movie_data_factory.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'package:faker/faker.dart';
import 'package:popular_movies/domain/model/movie_details.dart';

import 'network_error.dart';

class MovieDataFactory {
static final RandomGenerator _randomGenerator = RandomGenerator();

static MovieDetails getMovieDetails() {
return MovieDetails(
_randomGenerator.string(10),
_randomGenerator.string(10),
_randomGenerator.decimal(),
_randomGenerator.string(10),
);
}

static NetworkError getNetworkError() {
return NetworkError(_randomGenerator.string(10), _randomGenerator.integer(10));
}
}
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ dependencies:
cached_network_image: 3.2.1
connectivity_plus: 2.3.6
freezed_annotation: 1.1.0
faker: ^2.0.0
dev_dependencies:
flutter_test:
sdk: flutter
Expand Down
29 changes: 25 additions & 4 deletions test/data/repository/movie_repository_impl_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,17 @@ import 'package:dartz/dartz.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:popular_movies/core/movie_data_factory.dart';
import 'package:popular_movies/core/network_error.dart';
import 'package:popular_movies/data/repository/movie_repository_impl.dart';
import 'package:popular_movies/domain/model/movie.dart';
import 'package:popular_movies/domain/repository/movie_repository.dart';
import 'package:popular_movies/domain/model/movie_details.dart';

import 'movie_repository_impl_test.mocks.dart';

@GenerateMocks([MovieRepository])
@GenerateMocks([MovieRepositoryImpl])
void main() {
MockMovieRepository mockMovieRepository = MockMovieRepository();
MockMovieRepositoryImpl mockMovieRepository = MockMovieRepositoryImpl();

group('getPopularMovies function testing', () {
test('success test', () async {
Expand All @@ -22,12 +24,31 @@ void main() {
expectSync((movies as Right<NetworkError, List<Movie>>).value.length, mockValue.value.length);
});
test('error test', () async {
final mockError = Left<NetworkError, List<Movie>>(NetworkError("errorMessage", 0));
final mockError = Left<NetworkError, List<Movie>>(MovieDataFactory.getNetworkError());
when(mockMovieRepository.getPopularMovies()).thenAnswer(
(realInvocation) async => mockError,
);
final movies = await mockMovieRepository.getPopularMovies();
expectSync((movies as Left<NetworkError, List<Movie>>).value.errorMessage, mockError.value.errorMessage);
});
});

group('getMovieDetail function testing', () {
test('success test', () async {
final mockValue = Right<NetworkError, MovieDetails>(MovieDataFactory.getMovieDetails());
when(mockMovieRepository.getMovieDetail(0)).thenAnswer(
(realInvocation) async => mockValue,
);
final movies = await mockMovieRepository.getMovieDetail(0);
expectSync((movies as Right<NetworkError, MovieDetails>).value.title, mockValue.value.title);
});
test('error test', () async {
final mockError = Left<NetworkError, MovieDetails>(MovieDataFactory.getNetworkError());
when(mockMovieRepository.getMovieDetail(0)).thenAnswer(
(realInvocation) async => mockError,
);
final movies = await mockMovieRepository.getMovieDetail(0);
expectSync((movies as Left<NetworkError, MovieDetails>).value.errorMessage, mockError.value.errorMessage);
});
});
}
38 changes: 20 additions & 18 deletions test/data/repository/movie_repository_impl_test.mocks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ import 'dart:async' as _i4;
import 'package:dartz/dartz.dart' as _i2;
import 'package:mockito/mockito.dart' as _i1;
import 'package:popular_movies/core/network_error.dart' as _i5;
import 'package:popular_movies/domain/model/movie.dart' as _i6;
import 'package:popular_movies/domain/model/movie_details.dart' as _i7;
import 'package:popular_movies/data/repository/movie_repository_impl.dart'
as _i3;
import 'package:popular_movies/domain/model/movie.dart' as _i7;
import 'package:popular_movies/domain/model/movie_details.dart' as _i6;
import 'package:popular_movies/domain/model/video.dart' as _i8;
import 'package:popular_movies/domain/repository/movie_repository.dart' as _i3;

// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
Expand All @@ -24,30 +25,31 @@ import 'package:popular_movies/domain/repository/movie_repository.dart' as _i3;

class _FakeEither_0<L, R> extends _i1.Fake implements _i2.Either<L, R> {}

/// A class which mocks [MovieRepository].
/// A class which mocks [MovieRepositoryImpl].
///
/// See the documentation for Mockito's code generation for more information.
class MockMovieRepository extends _i1.Mock implements _i3.MovieRepository {
MockMovieRepository() {
class MockMovieRepositoryImpl extends _i1.Mock
implements _i3.MovieRepositoryImpl {
MockMovieRepositoryImpl() {
_i1.throwOnMissingStub(this);
}

@override
_i4.Future<_i2.Either<_i5.NetworkError, List<_i6.Movie>>>
getPopularMovies() => (super.noSuchMethod(
Invocation.method(#getPopularMovies, []),
returnValue:
Future<_i2.Either<_i5.NetworkError, List<_i6.Movie>>>.value(
_FakeEither_0<_i5.NetworkError, List<_i6.Movie>>()))
as _i4.Future<_i2.Either<_i5.NetworkError, List<_i6.Movie>>>);
@override
_i4.Future<_i2.Either<_i5.NetworkError, _i7.MovieDetails>> getMovieDetail(
_i4.Future<_i2.Either<_i5.NetworkError, _i6.MovieDetails>> getMovieDetail(
int? id) =>
(super.noSuchMethod(Invocation.method(#getMovieDetail, [id]),
returnValue:
Future<_i2.Either<_i5.NetworkError, _i7.MovieDetails>>.value(
_FakeEither_0<_i5.NetworkError, _i7.MovieDetails>()))
as _i4.Future<_i2.Either<_i5.NetworkError, _i7.MovieDetails>>);
Future<_i2.Either<_i5.NetworkError, _i6.MovieDetails>>.value(
_FakeEither_0<_i5.NetworkError, _i6.MovieDetails>()))
as _i4.Future<_i2.Either<_i5.NetworkError, _i6.MovieDetails>>);
@override
_i4.Future<_i2.Either<_i5.NetworkError, List<_i7.Movie>>>
getPopularMovies() => (super.noSuchMethod(
Invocation.method(#getPopularMovies, []),
returnValue:
Future<_i2.Either<_i5.NetworkError, List<_i7.Movie>>>.value(
_FakeEither_0<_i5.NetworkError, List<_i7.Movie>>()))
as _i4.Future<_i2.Either<_i5.NetworkError, List<_i7.Movie>>>);
@override
_i4.Future<_i2.Either<_i5.NetworkError, List<_i8.Video>>> getMovieVideos(
int? id) =>
Expand Down

0 comments on commit 75288d0

Please sign in to comment.