Skip to content

Commit 0b70561

Browse files
committed
Create use case get_top_headline_news.dart
1 parent e92e030 commit 0b70561

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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/core/use_case/use_case.dart';
5+
import 'package:flutter_news_app/core/util/enum/top_headline_news_category.dart';
6+
import 'package:flutter_news_app/feature/data/model/news/news_response.dart';
7+
import 'package:flutter_news_app/feature/___domain/repository/news/news_repository.dart';
8+
9+
class GetTopHeadlineNews implements UseCase<NewsResponse, ParamsGetTopHeadlineNews> {
10+
final NewsRepository newsRepository;
11+
12+
GetTopHeadlineNews(this.newsRepository);
13+
14+
@override
15+
Future<Either<Failure, NewsResponse>> call(params) {
16+
return newsRepository.getTopHeadlineNews(params.topHeadlineNewsCategory);
17+
}
18+
}
19+
20+
class ParamsGetTopHeadlineNews extends Equatable {
21+
final TopHeadlineNewsCategory topHeadlineNewsCategory;
22+
23+
const ParamsGetTopHeadlineNews({required this.topHeadlineNewsCategory});
24+
25+
@override
26+
List<Object?> get props => [
27+
topHeadlineNewsCategory,
28+
];
29+
30+
@override
31+
String toString() {
32+
return 'ParamsGetTopHeadlineNews{topHeadlineNewsCategory: $topHeadlineNewsCategory}';
33+
}
34+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import 'dart:convert';
2+
3+
import 'package:dartz/dartz.dart';
4+
import 'package:flutter_news_app/core/util/enum/top_headline_news_category.dart';
5+
import 'package:flutter_news_app/feature/data/model/news/news_response.dart';
6+
import 'package:flutter_news_app/feature/___domain/use_case/get_top_headline_news/get_top_headline_news.dart';
7+
import 'package:flutter_test/flutter_test.dart';
8+
import 'package:mockito/mockito.dart';
9+
10+
import '../../../../fixture/fixture_reader.dart';
11+
import '../../../../helper/mock_helper.mocks.dart';
12+
13+
void main() {
14+
late GetTopHeadlineNews useCase;
15+
late MockNewsRepository mockNewsRepository;
16+
17+
setUp(() {
18+
mockNewsRepository = MockNewsRepository();
19+
useCase = GetTopHeadlineNews(mockNewsRepository);
20+
});
21+
22+
const tTopHeadlineNewsCategory = TopHeadlineNewsCategory.general;
23+
const tParams = ParamsGetTopHeadlineNews(topHeadlineNewsCategory: tTopHeadlineNewsCategory);
24+
25+
test(
26+
'Make sure repository receive success and failure response from the endpoint getTopHeadlineNews',
27+
() async {
28+
// arrange
29+
final tResponse = NewsResponse.fromJson(
30+
json.decode(
31+
fixture('news_response.json'),
32+
),
33+
);
34+
when(mockNewsRepository.getTopHeadlineNews(any)).thenAnswer((_) async => Right(tResponse));
35+
36+
// act
37+
final result = await useCase(tParams);
38+
39+
// assert
40+
expect(result, Right(tResponse));
41+
verify(mockNewsRepository.getTopHeadlineNews(tTopHeadlineNewsCategory));
42+
verifyNoMoreInteractions(mockNewsRepository);
43+
},
44+
);
45+
46+
test(
47+
'Make sure the output from props function class params',
48+
() async {
49+
// assert
50+
expect(
51+
tParams.props,
52+
[
53+
tParams.topHeadlineNewsCategory,
54+
],
55+
);
56+
},
57+
);
58+
59+
test(
60+
'Make sure the output from toString function class params',
61+
() async {
62+
// assert
63+
expect(
64+
tParams.toString(),
65+
'ParamsGetTopHeadlineNews{topHeadlineNewsCategory: ${tParams.topHeadlineNewsCategory}}',
66+
);
67+
},
68+
);
69+
}

0 commit comments

Comments
 (0)