Skip to content

Commit b055fdf

Browse files
committed
Add unit test album list screen
1 parent 89043d3 commit b055fdf

File tree

4 files changed

+94
-20
lines changed

4 files changed

+94
-20
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
3+
import 'albums_list_filter_screen_robot.dart';
4+
5+
void main() {
6+
group('albums filter screen', () {
7+
testWidgets('change album type', (tester) async {
8+
String? selectedValue;
9+
final r = AlbumsListFilterScreenRobot(tester);
10+
11+
await r.pumpAlbumsListFilterScreen(
12+
onAlbumsTypesChanged: (value) => selectedValue = value,
13+
);
14+
15+
await r.selectAlbumTypes('E.P.');
16+
expect(selectedValue, 'EP');
17+
});
18+
19+
testWidgets('change album sort', (tester) async {
20+
String? selectedValue;
21+
final r = AlbumsListFilterScreenRobot(tester);
22+
23+
await r.pumpAlbumsListFilterScreen(
24+
onAlbumsTypesChanged: (value) => selectedValue = value,
25+
);
26+
27+
await r.selectSort('Addition date');
28+
expect(selectedValue, 'AdditionDate');
29+
});
30+
});
31+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_riverpod/flutter_riverpod.dart';
3+
import 'package:flutter_test/flutter_test.dart';
4+
import 'package:vocadb_app/src/features/albums/data/album_repository.dart';
5+
import 'package:vocadb_app/src/features/albums/presentation/album_tile/album_tile.dart';
6+
import 'package:vocadb_app/src/features/albums/presentation/albums_list/albums_list_screen.dart';
7+
import 'package:vocadb_app/src/features/settings/data/user_settings_repository.dart';
8+
9+
class AlbumsListScreenRobot {
10+
final WidgetTester tester;
11+
12+
AlbumsListScreenRobot(this.tester);
13+
14+
Future<void> pumpAlbumsListScreen(
15+
{AlbumRepository? albumRepository}) async {
16+
await tester.pumpWidget(
17+
ProviderScope(
18+
overrides: [
19+
if (albumRepository != null)
20+
albumRepositoryProvider.overrideWithValue(albumRepository),
21+
userSettingsRepositoryProvider
22+
.overrideWithValue(UserSettingsRepository())
23+
],
24+
child: const MaterialApp(
25+
home: AlbumsListScreen(),
26+
),
27+
),
28+
);
29+
30+
await tester.pump();
31+
await tester.pump();
32+
await tester.pump();
33+
}
34+
35+
Future<void> expectAlbumsDisplayCountAtLeast(int count) async {
36+
final finder = find.byType(AlbumTile);
37+
expect(finder, findsAtLeastNWidgets(count));
38+
}
39+
}
Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
11
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:mocktail/mocktail.dart';
3+
import 'package:vocadb_app/src/features/albums/data/constants/fake_albums_list.dart';
4+
import 'package:vocadb_app/src/features/albums/domain/albums_list_params.dart';
25

3-
import 'albums_list_filter_screen_robot.dart';
6+
import '../../../../mocks.dart';
7+
import 'albums_list_screen_robot.dart';
48

59
void main() {
6-
group('albums filter screen', () {
7-
testWidgets('change album type', (tester) async {
8-
String? selectedValue;
9-
final r = AlbumsListFilterScreenRobot(tester);
10+
testWidgets('albums list screen ...', (tester) async {
11+
registerFallbackValue(FakeAlbumsListParams());
1012

11-
await r.pumpAlbumsListFilterScreen(
12-
onAlbumsTypesChanged: (value) => selectedValue = value,
13-
);
13+
final r = AlbumsListScreenRobot(tester);
14+
final albumRepository = MockAlbumRepository();
1415

15-
await r.selectAlbumTypes('E.P.');
16-
expect(selectedValue, 'EP');
17-
});
16+
when(() => albumRepository.fetchAlbums(
17+
params: any(named: 'params', that: isNotNull),
18+
)).thenAnswer((_) => Future.value(kFakeAlbumsList));
1819

19-
testWidgets('change album sort', (tester) async {
20-
String? selectedValue;
21-
final r = AlbumsListFilterScreenRobot(tester);
20+
await r.pumpAlbumsListScreen(albumRepository: albumRepository);
2221

23-
await r.pumpAlbumsListFilterScreen(
24-
onAlbumsTypesChanged: (value) => selectedValue = value,
25-
);
22+
await r.expectAlbumsDisplayCountAtLeast(3);
2623

27-
await r.selectSort('Addition date');
28-
expect(selectedValue, 'AdditionDate');
29-
});
24+
expect(
25+
verify(() =>
26+
albumRepository.fetchAlbums(params: captureAny(named: 'params')))
27+
.captured,
28+
[
29+
const AlbumsListParams(),
30+
]);
3031
});
3132
}

test/src/mocks.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:hive/hive.dart';
22
import 'package:http/http.dart';
33
import 'package:mocktail/mocktail.dart';
44
import 'package:vocadb_app/src/features/albums/data/album_repository.dart';
5+
import 'package:vocadb_app/src/features/albums/domain/albums_list_params.dart';
56
import 'package:vocadb_app/src/features/api/api_cache.dart';
67
import 'package:vocadb_app/src/features/api/api_client.dart';
78
import 'package:vocadb_app/src/features/api/data/cookie_storage.dart';
@@ -37,6 +38,8 @@ class RatedSongsListParamsFake extends Fake implements RatedSongsListParams {}
3738

3839
class FakeArtistsListParams extends Fake implements ArtistsListParams {}
3940

41+
class FakeAlbumsListParams extends Fake implements AlbumsListParams {}
42+
4043
class FakeSongsListParams extends Fake implements SongsListParams {}
4144

4245
class MockUserSettingsRepository extends Mock

0 commit comments

Comments
 (0)