Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 01342ea

Browse files
Create use case SearchTopHeadlinesNews
1 parent 3ec8384 commit 01342ea

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import 'package:dartz/dartz.dart';
2+
import 'package:equatable/equatable.dart';
3+
import 'package:flutter_news_app/core/error/failure.dart';
4+
import 'package:flutter_news_app/feature/domain/repository/news/news_repository.dart';
5+
import 'package:meta/meta.dart';
6+
import 'package:flutter_news_app/core/usecase/usecase.dart';
7+
import 'package:flutter_news_app/feature/data/model/topheadlinesnews/top_headlines_news_response_model.dart';
8+
9+
class SearchTopHeadlinesNews implements UseCase<TopHeadlinesNewsResponseModel, ParamsSearchTopHeadlinesNews> {
10+
final NewsRepository newsRepository;
11+
12+
SearchTopHeadlinesNews({@required this.newsRepository});
13+
14+
@override
15+
Future<Either<Failure, TopHeadlinesNewsResponseModel>> call(ParamsSearchTopHeadlinesNews params) async {
16+
return await newsRepository.searchTopHeadlinesNews(params.keyword);
17+
}
18+
}
19+
20+
class ParamsSearchTopHeadlinesNews extends Equatable {
21+
final String keyword;
22+
23+
ParamsSearchTopHeadlinesNews({@required this.keyword});
24+
25+
@override
26+
List<Object> get props => [keyword];
27+
28+
@override
29+
String toString() {
30+
return 'ParamsSearchTopHeadlinesNews{keyword: $keyword}';
31+
}
32+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import 'dart:convert';
2+
3+
import 'package:dartz/dartz.dart';
4+
import 'package:flutter_news_app/feature/data/model/topheadlinesnews/top_headlines_news_response_model.dart';
5+
import 'package:flutter_news_app/feature/domain/repository/news/news_repository.dart';
6+
import 'package:flutter_news_app/feature/domain/usecase/searchtopheadlinesnews/search_top_headlines_news.dart';
7+
import 'package:flutter_test/flutter_test.dart';
8+
import 'package:mockito/mockito.dart';
9+
10+
import '../../../../fixture/fixture_reader.dart';
11+
12+
class MockNewsRepository extends Mock implements NewsRepository {}
13+
14+
void main() {
15+
SearchTopHeadlinesNews searchTopHeadlinesNews;
16+
MockNewsRepository mockNewsRepository;
17+
final tKeyword = 'testKeyword';
18+
19+
setUp(() {
20+
mockNewsRepository = MockNewsRepository();
21+
searchTopHeadlinesNews = SearchTopHeadlinesNews(newsRepository: mockNewsRepository);
22+
});
23+
24+
test(
25+
'make sure that NewsRepository successfully gets a successful or failed response from the searchTopHeadlinesNews '
26+
'endpoint',
27+
() async {
28+
// arrange
29+
final tTopHeadlinesNewsResponseModel = TopHeadlinesNewsResponseModel.fromJson(
30+
json.decode(
31+
fixture('top_headlines_news_response_model.json'),
32+
),
33+
);
34+
when(mockNewsRepository.searchTopHeadlinesNews(tKeyword))
35+
.thenAnswer((_) async => Right(tTopHeadlinesNewsResponseModel));
36+
37+
// act
38+
final result = await searchTopHeadlinesNews(ParamsSearchTopHeadlinesNews(keyword: tKeyword));
39+
40+
// assert
41+
expect(result, Right(tTopHeadlinesNewsResponseModel));
42+
verify(mockNewsRepository.searchTopHeadlinesNews(tKeyword));
43+
verifyNoMoreInteractions(mockNewsRepository);
44+
},
45+
);
46+
47+
test(
48+
'make sure the output of the toString function',
49+
() async {
50+
// assert
51+
final tParamsSearchTopHeadlinesNews = ParamsSearchTopHeadlinesNews(keyword: tKeyword);
52+
expect(
53+
tParamsSearchTopHeadlinesNews.toString(),
54+
'ParamsSearchTopHeadlinesNews{keyword: ${tParamsSearchTopHeadlinesNews.keyword}}',
55+
);
56+
},
57+
);
58+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /