Skip to content

Commit 7e0312e

Browse files
committed
repo test
1 parent 99eac56 commit 7e0312e

File tree

5 files changed

+89
-7
lines changed

5 files changed

+89
-7
lines changed

lib/promo/data/repositories/promo_repository_impl.dart

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ import '../models/promo_model.dart';
99
class PromoRepositoryImpl implements PromoRepository {
1010
late ApiService _apiServices;
1111

12-
PromoRepositoryImpl() {
13-
_apiServices = ApiService();
14-
}
12+
PromoRepositoryImpl(this._apiServices);
1513

1614
@override
1715
Future<void> delFavPromo({required Promo promo}) async {

lib/promo/presentation/state/promo_controller.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:get/get.dart';
2+
import 'package:test_driven_development/promo/data/data_sources/api_service.dart';
23

34
import '../../data/repositories/promo_repository_impl.dart';
45
import '../../domain/entities/promo.dart';
@@ -10,7 +11,8 @@ class PromoController extends GetxController {
1011
@override
1112
onInit() {
1213
super.onInit();
13-
_promoUseCase = PromoUseCase(PromoRepositoryImpl());
14+
final apiService = ApiService();
15+
_promoUseCase = PromoUseCase(PromoRepositoryImpl(apiService));
1416
}
1517

1618
Future<Promo> getFavPromo() async {

test/helpers/mock_helper.dart

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'package:mockito/annotations.dart';
2+
import 'package:test_driven_development/promo/data/data_sources/api_service.dart';
23
import 'package:test_driven_development/promo/domain/repositories/promo_repository.dart';
34

4-
@GenerateMocks(
5-
[PromoRepository],
6-
)
5+
@GenerateMocks([PromoRepository, ApiService])
76
void main() {}

test/helpers/mock_helper.mocks.dart

+52
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
import 'dart:async' as _i4;
77

88
import 'package:mockito/mockito.dart' as _i1;
9+
import 'package:test_driven_development/promo/data/data_sources/api_service.dart'
10+
as _i5;
11+
import 'package:test_driven_development/promo/data/models/promo_model.dart'
12+
as _i6;
913
import 'package:test_driven_development/promo/domain/entities/promo.dart'
1014
as _i2;
1115
import 'package:test_driven_development/promo/domain/repositories/promo_repository.dart'
@@ -91,3 +95,51 @@ class MockPromoRepository extends _i1.Mock implements _i3.PromoRepository {
9195
returnValueForMissingStub: _i4.Future<void>.value(),
9296
) as _i4.Future<void>);
9397
}
98+
99+
/// A class which mocks [ApiService].
100+
///
101+
/// See the documentation for Mockito's code generation for more information.
102+
class MockApiService extends _i1.Mock implements _i5.ApiService {
103+
MockApiService() {
104+
_i1.throwOnMissingStub(this);
105+
}
106+
107+
@override
108+
_i4.Future<void> delFavPromo({required _i2.Promo? promo}) =>
109+
(super.noSuchMethod(
110+
Invocation.method(
111+
#delFavPromo,
112+
[],
113+
{#promo: promo},
114+
),
115+
returnValue: _i4.Future<void>.value(),
116+
returnValueForMissingStub: _i4.Future<void>.value(),
117+
) as _i4.Future<void>);
118+
@override
119+
_i4.Future<void> saveFavPromo({required _i2.Promo? promo}) =>
120+
(super.noSuchMethod(
121+
Invocation.method(
122+
#saveFavPromo,
123+
[],
124+
{#promo: promo},
125+
),
126+
returnValue: _i4.Future<void>.value(),
127+
returnValueForMissingStub: _i4.Future<void>.value(),
128+
) as _i4.Future<void>);
129+
@override
130+
_i4.Future<_i6.PromoModel?> getExpiryPromo() => (super.noSuchMethod(
131+
Invocation.method(
132+
#getExpiryPromo,
133+
[],
134+
),
135+
returnValue: _i4.Future<_i6.PromoModel?>.value(),
136+
) as _i4.Future<_i6.PromoModel?>);
137+
@override
138+
_i4.Future<_i6.PromoModel?> getFavPromo() => (super.noSuchMethod(
139+
Invocation.method(
140+
#getFavPromo,
141+
[],
142+
),
143+
returnValue: _i4.Future<_i6.PromoModel?>.value(),
144+
) as _i4.Future<_i6.PromoModel?>);
145+
}

test/promo_repo_test.dart

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:mockito/mockito.dart';
3+
import 'package:test_driven_development/promo/data/models/promo_model.dart';
4+
import 'package:test_driven_development/promo/data/repositories/promo_repository_impl.dart';
5+
6+
import 'helpers/json_reader.dart';
7+
import 'helpers/mock_helper.mocks.dart';
8+
9+
void main() {
10+
late PromoRepositoryImpl promoRepo;
11+
late MockApiService apiService;
12+
13+
setUp(() {
14+
apiService = MockApiService();
15+
promoRepo = PromoRepositoryImpl(apiService);
16+
});
17+
18+
final tPromoModel = PromoModel.fromJson(readJson("promo_dummy.json"));
19+
20+
test("Should return promo model when an api data source is success",
21+
() async {
22+
// arrange
23+
when(apiService.getFavPromo()).thenAnswer((_) async => tPromoModel);
24+
25+
// act
26+
final result = await promoRepo.getFavPromo();
27+
28+
// assert
29+
expect(result, isA<PromoModel>());
30+
});
31+
}

0 commit comments

Comments
 (0)