started unit test for MusicDataStore
This commit is contained in:
parent
ad6fdcc0c2
commit
c6149363d8
2 changed files with 135 additions and 4 deletions
|
@ -5,7 +5,6 @@ abstract class Failure extends Equatable {
|
|||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class IndexFailure extends Failure {
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
class IndexFailure extends Failure {}
|
||||
|
||||
class GenericFailure extends Failure { }
|
132
test/presentation/state/music_data_store_test.dart
Normal file
132
test/presentation/state/music_data_store_test.dart
Normal file
|
@ -0,0 +1,132 @@
|
|||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:mucke/core/error/failures.dart';
|
||||
import 'package:mucke/domain/entities/artist.dart';
|
||||
import 'package:mucke/domain/repositories/music_data_repository.dart';
|
||||
import 'package:mucke/presentation/state/music_data_store.dart';
|
||||
|
||||
class MockMusicDataRepository extends Mock implements MusicDataRepository {}
|
||||
|
||||
class MockInitMusicDataStore extends MusicDataStore {
|
||||
MockInitMusicDataStore({@required MusicDataRepository musicDataRepository})
|
||||
: super(musicDataRepository: musicDataRepository);
|
||||
|
||||
int fetchArtistsCalled = 0;
|
||||
int fetchAlbumsCalled = 0;
|
||||
int fetchSongsCalled = 0;
|
||||
|
||||
@override
|
||||
Future<void> fetchArtists() async {
|
||||
fetchArtistsCalled++;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> fetchAlbums() async {
|
||||
fetchAlbumsCalled++;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> fetchSongs() async {
|
||||
fetchSongsCalled++;
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
group('init', () {
|
||||
MockMusicDataRepository mockMusicDataRepository;
|
||||
|
||||
setUp(() {
|
||||
mockMusicDataRepository = MockMusicDataRepository();
|
||||
});
|
||||
|
||||
test(
|
||||
'should fetch artists, albums and songs from the database',
|
||||
() async {
|
||||
// arrange
|
||||
final MockInitMusicDataStore mockInitMusicDataStore =
|
||||
MockInitMusicDataStore(
|
||||
musicDataRepository: mockMusicDataRepository);
|
||||
|
||||
// act
|
||||
mockInitMusicDataStore.init();
|
||||
|
||||
// assert
|
||||
expect(mockInitMusicDataStore.fetchArtistsCalled, 1);
|
||||
expect(mockInitMusicDataStore.fetchAlbumsCalled, 1);
|
||||
expect(mockInitMusicDataStore.fetchSongsCalled, 1);
|
||||
},
|
||||
);
|
||||
|
||||
test(
|
||||
'should only fetch data once',
|
||||
() async {
|
||||
// arrange
|
||||
final MockInitMusicDataStore mockInitMusicDataStore =
|
||||
MockInitMusicDataStore(
|
||||
musicDataRepository: mockMusicDataRepository);
|
||||
|
||||
// act
|
||||
mockInitMusicDataStore.init();
|
||||
mockInitMusicDataStore.init();
|
||||
|
||||
// assert
|
||||
expect(mockInitMusicDataStore.fetchArtistsCalled, 1);
|
||||
expect(mockInitMusicDataStore.fetchAlbumsCalled, 1);
|
||||
expect(mockInitMusicDataStore.fetchSongsCalled, 1);
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
group('fetchArtists', () {
|
||||
MockMusicDataRepository mockMusicDataRepository;
|
||||
const List<Artist> artists = [
|
||||
Artist(name: 'AC/DC'),
|
||||
Artist(name: 'Amon Amarth'),
|
||||
];
|
||||
|
||||
const Either<Failure, List<Artist>> success =
|
||||
Right<Failure, List<Artist>>(artists);
|
||||
|
||||
final Either<Failure, List<Artist>> failure = Left(GenericFailure());
|
||||
|
||||
setUp(() {
|
||||
mockMusicDataRepository = MockMusicDataRepository();
|
||||
});
|
||||
|
||||
test(
|
||||
'should store a list of artists on success',
|
||||
() async {
|
||||
// arrange
|
||||
when(mockMusicDataRepository.getArtists())
|
||||
.thenAnswer((_) => Future.value(success));
|
||||
|
||||
final musicDataStore = MusicDataStore(musicDataRepository: mockMusicDataRepository);
|
||||
|
||||
// act
|
||||
await musicDataStore.fetchArtists();
|
||||
|
||||
// assert
|
||||
expect(musicDataStore.artists.toList(), artists);
|
||||
},
|
||||
);
|
||||
|
||||
test(
|
||||
'should store an empty list of artists on failure',
|
||||
() async {
|
||||
// arrange
|
||||
when(mockMusicDataRepository.getArtists())
|
||||
.thenAnswer((_) => Future.value(failure));
|
||||
|
||||
final musicDataStore = MusicDataStore(musicDataRepository: mockMusicDataRepository);
|
||||
|
||||
// act
|
||||
await musicDataStore.fetchArtists();
|
||||
|
||||
// assert
|
||||
expect(musicDataStore.artists.toList(), []);
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
Loading…
Add table
Reference in a new issue