-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearch_data_source_test.dart
More file actions
70 lines (62 loc) · 1.91 KB
/
search_data_source_test.dart
File metadata and controls
70 lines (62 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:mockito/annotations.dart';
import 'package:mibook/layers/data/datasource/search_data_source.dart';
import 'package:mibook/layers/data/api/api_client.dart';
import 'package:mibook/layers/data/models/book_list_data.dart';
@GenerateNiceMocks([MockSpec<IApiClient>()])
import 'search_data_source_test.mocks.dart';
void main() {
late MockIApiClient mockApiClient;
late SearchDataSource dataSource;
setUp(() {
mockApiClient = MockIApiClient();
dataSource = SearchDataSource(mockApiClient);
});
group('SearchDataSource', () {
test('searchByTitle returns BookListData on success', () async {
final mockJson = {
'kind': 'books#volumes',
'totalItems': 1,
'items': [],
};
final expectedBookList = BookListData.fromJson(mockJson);
when(
mockApiClient.get(
endpoint: 'volumes',
queryParameters: {
'q': 'intitle:harry potter',
'startIndex': 0,
'maxResults': 40,
},
),
).thenAnswer((_) async => mockJson);
final result = await dataSource.searchByTitle(
startIndex: 0,
initTitle: 'harry potter',
);
expect(result.kind, expectedBookList.kind);
expect(result.totalItems, expectedBookList.totalItems);
expect(result.items, expectedBookList.items);
});
test('searchByTitle throws if apiClient throws', () async {
when(
mockApiClient.get(
endpoint: 'volumes',
queryParameters: {
'q': 'intitle:harry potter',
'startIndex': 0,
'maxResults': 40,
},
),
).thenThrow(Exception('API error'));
expect(
() => dataSource.searchByTitle(
startIndex: 0,
initTitle: 'harry potter',
),
throwsException,
);
});
});
}