Movatterモバイル変換


[0]ホーム

URL:


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

Commit4a777a6

Browse files
committed
ensure RemoteSaveSurveyResult returns SurveyResult on success
1 parent82354eb commit4a777a6

File tree

3 files changed

+58
-6
lines changed

3 files changed

+58
-6
lines changed

‎lib/data/usecases/save_survey_result/remote_save_survey_result.dart‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import'package:meta/meta.dart';
22

3+
import'../../../domain/entities/entities.dart';
34
import'../../../domain/helpers/helpers.dart';
5+
import'../../../domain/usecases/usecases.dart';
46
import'../../http/http.dart';
7+
import'../../models/models.dart';
58

6-
classRemoteSaveSurveyResult {
9+
classRemoteSaveSurveyResultimplementsSaveSurveyResult{
710
finalString url;
811
finalHttpClient httpClient;
912

@@ -12,9 +15,10 @@ class RemoteSaveSurveyResult {
1215
@requiredthis.httpClient
1316
});
1417

15-
Future<void>save({String answer})async {
18+
Future<SurveyResultEntity>save({String answer})async {
1619
try {
17-
await httpClient.request(url: url, method:'put', body: {'answer': answer});
20+
final json=await httpClient.request(url: url, method:'put', body: {'answer': answer});
21+
returnRemoteSurveyResultModel.fromJson(json).toEntity();
1822
}onHttpErrorcatch(error) {
1923
throw error==HttpError.forbidden
2024
?DomainError.accessDenied

‎requirements/use_cases/remote_save_survey_result.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
>##Caso de sucesso
44
1. ✅ Sistema faz uma requisição para a URL da API de save survey result
5-
2. Sistema valida o token de acesso para saber se o usuário tem permissão para ver esses dados
6-
3. Sistema valida os dados recebidos da API
7-
4. Sistema entrega os dados do resultado da enquete
5+
2.Sistema valida o token de acesso para saber se o usuário tem permissão para ver esses dados
6+
3.Sistema valida os dados recebidos da API
7+
4.Sistema entrega os dados do resultado da enquete
88

99
>##Exceção - URL inválida
1010
1. ✅ Sistema retorna uma mensagem de erro inesperado

‎test/data/usecases/save_survey_result/remote_save_survey_result_test.dart‎

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:faker/faker.dart';
22
import'package:mockito/mockito.dart';
33
import'package:test/test.dart';
44

5+
import'package:ForDev/domain/entities/entities.dart';
56
import'package:ForDev/domain/helpers/helpers.dart';
67
import'package:ForDev/data/http/http.dart';
78
import'package:ForDev/data/usecases/usecases.dart';
@@ -13,20 +14,45 @@ void main() {
1314
HttpClientSpy httpClient;
1415
String url;
1516
String answer;
17+
Map surveyResult;
18+
19+
MapmockValidData()=> {
20+
'surveyId': faker.guid.guid(),
21+
'question': faker.randomGenerator.string(50),
22+
'answers': [{
23+
'image': faker.internet.httpUrl(),
24+
'answer': faker.randomGenerator.string(20),
25+
'percent': faker.randomGenerator.integer(100),
26+
'count': faker.randomGenerator.integer(1000),
27+
'isCurrentAccountAnswer': faker.randomGenerator.boolean()
28+
}, {
29+
'answer': faker.randomGenerator.string(20),
30+
'percent': faker.randomGenerator.integer(100),
31+
'count': faker.randomGenerator.integer(1000),
32+
'isCurrentAccountAnswer': faker.randomGenerator.boolean()
33+
}],
34+
'date': faker.date.dateTime().toIso8601String(),
35+
};
1636

1737
PostExpectationmockRequest()=>when(httpClient.request(
1838
url:anyNamed('url'),
1939
method:anyNamed('method'),
2040
body:anyNamed('body')
2141
));
2242

43+
voidmockHttpData(Map data) {
44+
surveyResult= data;
45+
mockRequest().thenAnswer((_)async=> data);
46+
}
47+
2348
voidmockHttpError(HttpError error)=>mockRequest().thenThrow(error);
2449

2550
setUp(() {
2651
answer= faker.lorem.sentence();
2752
url= faker.internet.httpUrl();
2853
httpClient=HttpClientSpy();
2954
sut=RemoteSaveSurveyResult(url: url, httpClient: httpClient);
55+
mockHttpData(mockValidData());
3056
});
3157

3258
test('Should call HttpClient with correct values', ()async {
@@ -35,6 +61,28 @@ void main() {
3561
verify(httpClient.request(url: url, method:'put', body: {'answer': answer}));
3662
});
3763

64+
test('Should return surveyResult on 200', ()async {
65+
final result=await sut.save(answer: answer);
66+
67+
expect(result,SurveyResultEntity(
68+
surveyId: surveyResult['surveyId'],
69+
question: surveyResult['question'],
70+
answers: [
71+
SurveyAnswerEntity(
72+
image: surveyResult['answers'][0]['image'],
73+
answer: surveyResult['answers'][0]['answer'],
74+
isCurrentAnswer: surveyResult['answers'][0]['isCurrentAccountAnswer'],
75+
percent: surveyResult['answers'][0]['percent'],
76+
),
77+
SurveyAnswerEntity(
78+
answer: surveyResult['answers'][1]['answer'],
79+
isCurrentAnswer: surveyResult['answers'][1]['isCurrentAccountAnswer'],
80+
percent: surveyResult['answers'][1]['percent'],
81+
)
82+
]
83+
));
84+
});
85+
3886
test('Should throw UnexpectedError if HttpClient returns 404', ()async {
3987
mockHttpError(HttpError.notFound);
4088

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp