mucke/test/system/datasources/local_music_fetcher_test.dart

116 lines
3.6 KiB
Dart
Raw Normal View History

2020-03-26 11:58:30 +01:00
import 'package:flutter_audio_query/flutter_audio_query.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
2020-04-16 08:13:30 +02:00
import 'package:mucke/system/datasources/local_music_fetcher.dart';
import 'package:mucke/system/models/album_model.dart';
import 'package:mucke/system/models/song_model.dart';
2020-03-26 11:58:30 +01:00
import '../../test_constants.dart';
class MockFlutterAudioQuery extends Mock implements FlutterAudioQuery {}
class MockAlbumInfo extends Mock implements AlbumInfo {}
class MockSongInfo extends Mock implements SongInfo {}
2020-03-26 11:58:30 +01:00
void main() {
LocalMusicFetcherImpl localMusicFetcher;
MockFlutterAudioQuery mockFlutterAudioQuery;
setUp(() {
mockFlutterAudioQuery = MockFlutterAudioQuery();
localMusicFetcher = LocalMusicFetcherImpl(mockFlutterAudioQuery);
});
group('getAlbums', () {
MockAlbumInfo mockAlbumInfo;
setUp(() {
mockAlbumInfo = MockAlbumInfo();
2020-03-28 14:35:41 +01:00
when(mockAlbumInfo.title).thenReturn(ALBUM_TITLE_1);
2020-06-28 21:52:10 +02:00
when(mockAlbumInfo.id).thenReturn(ID_1.toString());
2020-03-26 11:58:30 +01:00
when(mockAlbumInfo.albumArt).thenReturn(ALBUM_ART_PATH_1);
when(mockAlbumInfo.artist).thenReturn(ARTIST_1);
when(mockAlbumInfo.firstYear).thenReturn(FIRST_YEAR_1.toString());
when(mockAlbumInfo.lastYear).thenReturn(LAST_YEAR_1.toString());
when(mockAlbumInfo.numberOfSongs).thenReturn(NUM_SONGS_1.toString());
});
test(
'should fetch list of albums from FlutterAudioQuery',
() async {
// arrange
when(mockFlutterAudioQuery.getAlbums())
.thenAnswer((_) async => <AlbumInfo>[mockAlbumInfo]);
// act
await localMusicFetcher.getAlbums();
// assert
verify(mockFlutterAudioQuery.getAlbums());
},
);
test(
'should return albums as List<AlbumModel>',
() async {
// arrange
when(mockFlutterAudioQuery.getAlbums())
.thenAnswer((_) async => <AlbumInfo>[mockAlbumInfo]);
final List<AlbumModel> expected = <AlbumModel>[
AlbumModel.fromAlbumInfo(mockAlbumInfo),
];
// act
final List<AlbumModel> result = await localMusicFetcher.getAlbums();
// assert
expect(result, expected);
},
);
});
group('getSongs', () {
MockSongInfo mockSongInfo;
setUp(() {
mockSongInfo = MockSongInfo();
2020-06-28 21:52:10 +02:00
when(mockSongInfo.isMusic).thenReturn(true);
when(mockSongInfo.title).thenReturn(SONG_TITLE_3);
when(mockSongInfo.album).thenReturn(ALBUM_TITLE_3);
2020-06-28 21:52:10 +02:00
when(mockSongInfo.albumId).thenReturn(ALBUM_ID_3.toString());
when(mockSongInfo.artist).thenReturn(ARTIST_3);
when(mockSongInfo.filePath).thenReturn(PATH_3);
when(mockSongInfo.track).thenReturn(TRACKNUMBER_3.toString());
when(mockSongInfo.albumArtwork).thenReturn(ALBUM_ART_PATH_3);
});
test(
'should fetch list of songs from FlutterAudioQuery',
() async {
// arrange
when(mockFlutterAudioQuery.getSongs())
.thenAnswer((_) async => <SongInfo>[mockSongInfo]);
// act
await localMusicFetcher.getSongs();
// assert
verify(mockFlutterAudioQuery.getSongs());
},
);
test(
'should return songs as List<SongModel>',
() async {
// arrange
when(mockFlutterAudioQuery.getSongs())
.thenAnswer((_) async => <SongInfo>[mockSongInfo]);
final List<SongModel> expected = <SongModel>[
SongModel.fromSongInfo(mockSongInfo),
];
// act
final List<SongModel> result = await localMusicFetcher.getSongs();
// assert
expect(result, expected);
},
);
});
2020-03-26 11:58:30 +01:00
}