Skip to content

Commit a301204

Browse files
committed
[#15] Add unit tests
1 parent 17d4fba commit a301204

File tree

8 files changed

+100
-7
lines changed

8 files changed

+100
-7
lines changed

lib/model/meta_model.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class MetaModel extends Equatable {
1313
required this.records,
1414
});
1515

16-
const MetaModel.empty()
16+
const MetaModel.dummy()
1717
: this(
1818
page: 0,
1919
pages: 0,

lib/model/response/meta_response.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ class MetaResponse {
2121
factory MetaResponse.fromJson(Map<String, dynamic> json) =>
2222
_$MetaResponseFromJson(ResponseDecoder.decode(json));
2323

24+
static MetaResponse dummy() {
25+
return MetaResponse(
26+
page: 0,
27+
pages: 0,
28+
pageSize: 0,
29+
records: 0,
30+
);
31+
}
32+
2433
MetaModel toMetaModel() => MetaModel(
2534
page: page ?? 0,
2635
pages: pages ?? 0,

lib/model/response/surveys_container_response.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'package:freezed_annotation/freezed_annotation.dart';
22
import 'package:survey_flutter/api/response_decoder.dart';
33
import 'package:survey_flutter/model/meta_model.dart';
44
import 'package:survey_flutter/model/response/meta_response.dart';
5-
import 'package:survey_flutter/model/response/survey_reponse.dart';
5+
import 'package:survey_flutter/model/response/survey_response.dart';
66
import 'package:survey_flutter/model/surveys_container_model.dart';
77

88
part 'surveys_container_response.g.dart';
@@ -25,6 +25,6 @@ class SurveysContainerResponse {
2525
SurveysContainerModel toSurveysContainerModel() => SurveysContainerModel(
2626
surveys:
2727
data?.map((item) => item.toSurveyModel()).toList() ?? List.empty(),
28-
meta: meta?.toMetaModel() ?? const MetaModel.empty(),
28+
meta: meta?.toMetaModel() ?? const MetaModel.dummy(),
2929
);
3030
}

lib/model/surveys_container_model.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ class SurveysContainerModel extends Equatable {
1111
required this.meta,
1212
});
1313

14-
SurveysContainerModel.empty()
14+
SurveysContainerModel.dummy()
1515
: this(
1616
surveys: List.empty(),
17-
meta: const MetaModel.empty(),
17+
meta: const MetaModel.dummy(),
1818
);
1919

2020
@override

lib/usecases/get_surveys_use_case.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:injectable/injectable.dart';
21
import 'package:survey_flutter/model/surveys_container_model.dart';
32
import 'package:survey_flutter/repositories/survey_repository.dart';
43

@@ -14,7 +13,6 @@ class SurveysParams {
1413
});
1514
}
1615

17-
@Injectable()
1816
class GetSurveysUseCase extends UseCase<SurveysContainerModel, SurveysParams> {
1917
final SurveyRepository _repository;
2018

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:mockito/mockito.dart';
3+
import 'package:survey_flutter/api/exception/network_exceptions.dart';
4+
import 'package:survey_flutter/model/response/meta_response.dart';
5+
import 'package:survey_flutter/model/response/surveys_container_response.dart';
6+
import 'package:survey_flutter/repositories/survey_repository.dart';
7+
8+
import '../../mocks/generate_mocks.mocks.dart';
9+
10+
void main() {
11+
group('SurveyRepository', () {
12+
late MockSurveyApiService mockSurveyApiService;
13+
late SurveyRepositoryImpl surveyRepository;
14+
15+
setUp(() {
16+
mockSurveyApiService = MockSurveyApiService();
17+
surveyRepository = SurveyRepositoryImpl(mockSurveyApiService);
18+
});
19+
20+
test('when getting surveys is successful returns SurveysContainerModel',
21+
() async {
22+
final surveysResponse = SurveysContainerResponse(
23+
data: List.empty(),
24+
meta: MetaResponse.dummy(),
25+
);
26+
when(mockSurveyApiService.getSurveys(any, any))
27+
.thenAnswer((_) async => surveysResponse);
28+
29+
final result =
30+
await surveyRepository.getSurveys(pageSize: 0, pageNumber: 0);
31+
expect(result, surveysResponse.toSurveysContainerModel());
32+
});
33+
34+
test('when getting surveys fails throws NetworkExceptions', () async {
35+
when(mockSurveyApiService.getSurveys(any, any)).thenThrow(Exception());
36+
37+
expect(
38+
() async =>
39+
await surveyRepository.getSurveys(pageSize: 0, pageNumber: 0),
40+
throwsA(isInstanceOf<NetworkExceptions>()),
41+
);
42+
});
43+
});
44+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:mockito/mockito.dart';
3+
import 'package:survey_flutter/model/surveys_container_model.dart';
4+
import 'package:survey_flutter/usecases/base/base_use_case.dart';
5+
import 'package:survey_flutter/usecases/get_surveys_use_case.dart';
6+
7+
import '../../mocks/generate_mocks.mocks.dart';
8+
9+
void main() {
10+
group('GetSurveysUseCase', () {
11+
late MockSurveyRepository mockRepository;
12+
late GetSurveysUseCase getSurveysUseCase;
13+
14+
setUp(() {
15+
mockRepository = MockSurveyRepository();
16+
getSurveysUseCase = GetSurveysUseCase(mockRepository);
17+
});
18+
19+
test('When getting surveys is successful returns Success ', () async {
20+
final surveysContainerModel = SurveysContainerModel.dummy();
21+
final surveysParams = SurveysParams(pageNumber: 0, pageSize: 10);
22+
when(mockRepository.getSurveys(pageNumber: 0, pageSize: 10))
23+
.thenAnswer((_) async => surveysContainerModel);
24+
25+
final result = await getSurveysUseCase(surveysParams);
26+
27+
expect(result, isA<Success<SurveysContainerModel>>());
28+
});
29+
30+
test('returns Failed when getting surveys fails', () async {
31+
final surveysParams = SurveysParams(pageNumber: 0, pageSize: 10);
32+
33+
when(mockRepository.getSurveys(pageNumber: 0, pageSize: 10))
34+
.thenThrow(Exception());
35+
final result = await getSurveysUseCase(surveysParams);
36+
37+
expect(result, isA<Failed<SurveysContainerModel>>());
38+
});
39+
});
40+
}

test/mocks/generate_mocks.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:dio/dio.dart';
22
import 'package:mockito/annotations.dart';
33
import 'package:survey_flutter/api/authentication_api_service.dart';
4+
import 'package:survey_flutter/api/survey_api_service.dart';
45
import 'package:survey_flutter/repositories/authentication_repository.dart';
56
import 'package:survey_flutter/usecases/login_use_case.dart';
67
import 'package:survey_flutter/utils/internet_connection_manager.dart';
@@ -16,6 +17,7 @@ import '../utils/async_listener.dart';
1617
InternetConnectionManager,
1718
LoginUseCase,
1819
SurveyRepository,
20+
SurveyApiService,
1921
])
2022
main() {
2123
// empty class to generate mock repository classes

0 commit comments

Comments
 (0)