Skip to content

Commit fa00717

Browse files
committed
🐛 empty contact details displaying null; Otherwise displaying works ok. Added todo to not add contact details if already present for the person.
1 parent 2a30467 commit fa00717

3 files changed

Lines changed: 31 additions & 22 deletions

File tree

sormas-backend/src/main/java/de/symeda/sormas/backend/patch/mapping/impl/fieldmapper/PersonContactDetailsFieldMapper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class PersonContactDetailsFieldMapper implements FieldCustomMapper {
3535

3636
@Override
3737
public Optional<DataPatchFailure> map(FieldPatchRequest request) {
38+
// TODO: logic to not add in case of the value is already present? To avoid adding the same value X-times
3839
Object untypedTarget = request.getTarget();
3940
if (!(untypedTarget instanceof PersonDto)) {
4041
return Optional.of(new DataPatchFailure().setDataPatchFailureCause(DataPatchFailureCause.TECHNICAL));

sormas-backend/src/main/java/de/symeda/sormas/backend/patch/partial_retrieval/ContactDetailsFieldValueRetriever.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
import javax.enterprise.context.ApplicationScoped;
1111

12+
import org.apache.commons.lang3.StringUtils;
13+
1214
import de.symeda.sormas.api.EntityDto;
1315
import de.symeda.sormas.api.i18n.I18nProperties;
1416
import de.symeda.sormas.api.patch.partial_retrieval.FieldInfo;
@@ -30,12 +32,12 @@ public FieldInfo getFieldInfo(String fieldName, EntityDto entityDto) {
3032
.stream()
3133
.filter(detail -> targetType.equals(detail.getPersonContactDetailType()))
3234
.map(PersonContactDetailDto::getContactInformation)
35+
.filter(StringUtils::isNotBlank)
36+
.sorted()
3337
.collect(Collectors.joining("; "));
3438

3539
String captionKey = isPhone ? PersonContactDetailDto.PHONE_NUMBER_TYPE : PersonContactDetailDto.CONTACT_INFORMATION;
36-
String translatedFieldName = I18nProperties.getCaption(
37-
PersonContactDetailDto.I18N_PREFIX + PATH_SEPARATOR + captionKey,
38-
captionKey);
40+
String translatedFieldName = I18nProperties.getCaption(PersonContactDetailDto.I18N_PREFIX + PATH_SEPARATOR + captionKey, captionKey);
3941

4042
return new FieldInfo().setFieldType(List.class).setFieldValue(contactValues).setTranslatedFieldName(translatedFieldName);
4143
}

sormas-backend/src/test/java/de/symeda/sormas/backend/patch/partial_retrieval/PartialRetrieverImplTest.java

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
import java.util.List;
44
import java.util.Set;
55

6-
import de.symeda.sormas.api.person.PersonContactDetailDto;
7-
import de.symeda.sormas.api.person.PersonContactDetailType;
86
import org.junit.jupiter.api.Assertions;
7+
import org.junit.jupiter.api.RepeatedTest;
98
import org.junit.jupiter.api.Test;
109

1110
import de.symeda.sormas.api.Disease;
@@ -15,12 +14,9 @@
1514
import de.symeda.sormas.api.i18n.I18nProperties;
1615
import de.symeda.sormas.api.immunization.ImmunizationDto;
1716
import de.symeda.sormas.api.immunization.ImmunizationStatus;
18-
import de.symeda.sormas.api.patch.partial_retrieval.DisplayableFieldInfo;
19-
import de.symeda.sormas.api.patch.partial_retrieval.DisplayablePartialRetrievalResponse;
20-
import de.symeda.sormas.api.patch.partial_retrieval.FieldInfo;
21-
import de.symeda.sormas.api.patch.partial_retrieval.PartialRetrievalRequest;
22-
import de.symeda.sormas.api.patch.partial_retrieval.PartialRetrievalResponse;
23-
import de.symeda.sormas.api.patch.partial_retrieval.PartialRetriever;
17+
import de.symeda.sormas.api.patch.partial_retrieval.*;
18+
import de.symeda.sormas.api.person.PersonContactDetailDto;
19+
import de.symeda.sormas.api.person.PersonContactDetailType;
2420
import de.symeda.sormas.api.person.PersonDto;
2521
import de.symeda.sormas.api.person.PersonReferenceDto;
2622
import de.symeda.sormas.api.symptoms.SymptomsDto;
@@ -172,7 +168,7 @@ void retrievePartial_null_value() {
172168
() -> Assertions.assertNull(classificationDateFieldInfo.getFieldValue()));
173169
}
174170

175-
@Test
171+
@RepeatedTest(12)
176172
void retrieve_contact_details_phone() {
177173
// PREPARE
178174
Disease disease = Disease.PERTUSSIS;
@@ -194,20 +190,30 @@ void retrieve_contact_details_phone() {
194190
secondaryPhoneNumber.setPersonContactDetailType(PersonContactDetailType.PHONE);
195191
contactDetails.add(secondaryPhoneNumber);
196192

193+
PersonContactDetailDto emptyPhone = new PersonContactDetailDto();
194+
emptyPhone.setContactInformation(" ");
195+
emptyPhone.setPersonContactDetailType(PersonContactDetailType.PHONE);
196+
contactDetails.add(emptyPhone);
197+
198+
PersonContactDetailDto nullPhone = new PersonContactDetailDto();
199+
nullPhone.setContactInformation(null);
200+
nullPhone.setPersonContactDetailType(PersonContactDetailType.PHONE);
201+
contactDetails.add(nullPhone);
202+
197203
getPersonFacade().save(person);
198204

199205
// EXECUTE
200206
String personContactDetails = toFieldName(PersonContactDetailDto.I18N_PREFIX, PersonContactDetailDto.PHONE_NUMBER_TYPE);
201207
PartialRetrievalResponse actual = victim()
202-
.retrievePartial(new PartialRetrievalRequest().setCaseUuid(originalCase.getUuid()).setFieldsToRetrieve(Set.of(personContactDetails)));
208+
.retrievePartial(new PartialRetrievalRequest().setCaseUuid(originalCase.getUuid()).setFieldsToRetrieve(Set.of(personContactDetails)));
203209

204210
// CHECK
205211
FieldInfo personFirstNameFieldInfo = actual.getFieldInfoDictionary().get(personContactDetails);
206212
Assertions.assertAll(
207-
() -> Assertions.assertTrue(actual.getFailuresDictionary().isEmpty()),
208-
() -> Assertions.assertTrue(actual.getFieldInfoDictionary().containsKey(personContactDetails)),
209-
() -> Assertions.assertEquals("Phone number type", personFirstNameFieldInfo.getTranslatedFieldName()),
210-
() -> Assertions.assertEquals("09876543; 12345678", personFirstNameFieldInfo.getFieldValue()));
213+
() -> Assertions.assertTrue(actual.getFailuresDictionary().isEmpty()),
214+
() -> Assertions.assertTrue(actual.getFieldInfoDictionary().containsKey(personContactDetails)),
215+
() -> Assertions.assertEquals("Phone number type", personFirstNameFieldInfo.getTranslatedFieldName()),
216+
() -> Assertions.assertEquals("09876543; 12345678", personFirstNameFieldInfo.getFieldValue()));
211217
}
212218

213219
@Test
@@ -236,15 +242,15 @@ void retrieve_contact_details_email() {
236242
// EXECUTE
237243
String personContactDetails = toFieldName(PersonContactDetailDto.I18N_PREFIX, PersonContactDetailDto.CONTACT_INFORMATION);
238244
PartialRetrievalResponse actual = victim()
239-
.retrievePartial(new PartialRetrievalRequest().setCaseUuid(originalCase.getUuid()).setFieldsToRetrieve(Set.of(personContactDetails)));
245+
.retrievePartial(new PartialRetrievalRequest().setCaseUuid(originalCase.getUuid()).setFieldsToRetrieve(Set.of(personContactDetails)));
240246

241247
// CHECK
242248
FieldInfo personFirstNameFieldInfo = actual.getFieldInfoDictionary().get(personContactDetails);
243249
Assertions.assertAll(
244-
() -> Assertions.assertTrue(actual.getFailuresDictionary().isEmpty()),
245-
() -> Assertions.assertTrue(actual.getFieldInfoDictionary().containsKey(personContactDetails)),
246-
() -> Assertions.assertEquals("Contact information", personFirstNameFieldInfo.getTranslatedFieldName()),
247-
() -> Assertions.assertEquals("mail@mail.ch", personFirstNameFieldInfo.getFieldValue()));
250+
() -> Assertions.assertTrue(actual.getFailuresDictionary().isEmpty()),
251+
() -> Assertions.assertTrue(actual.getFieldInfoDictionary().containsKey(personContactDetails)),
252+
() -> Assertions.assertEquals("Contact information", personFirstNameFieldInfo.getTranslatedFieldName()),
253+
() -> Assertions.assertEquals("mail@mail.ch", personFirstNameFieldInfo.getFieldValue()));
248254
}
249255

250256
private static String toFieldName(String prefix, String fieldName) {

0 commit comments

Comments
 (0)