Skip to content

Commit 5123a0b

Browse files
committed
SDK-2528: Helper method for finding the Resources that belong to a Check
1 parent fad292c commit 5123a0b

File tree

4 files changed

+174
-19
lines changed

4 files changed

+174
-19
lines changed

yoti-sdk-api/src/main/java/com/yoti/api/client/docs/session/retrieve/GetSessionResult.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ public ImportTokenResponse getImportToken() {
100100
return importToken;
101101
}
102102

103+
public ResourceContainer getResourcesForCheck(String checkId) {
104+
CheckResponse checkResponse = this.checks.stream()
105+
.filter(check -> check.getId().equals(checkId))
106+
.findFirst()
107+
.orElseThrow(() -> new IllegalArgumentException("Check not found"));
108+
return resources.filterForCheck(checkResponse);
109+
}
110+
103111
public List<AuthenticityCheckResponse> getAuthenticityChecks() {
104112
return filterChecksByType(AuthenticityCheckResponse.class);
105113
}

yoti-sdk-api/src/main/java/com/yoti/api/client/docs/session/retrieve/ResourceContainer.java

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.yoti.api.client.docs.session.retrieve;
22

3-
import java.util.ArrayList;
3+
import java.util.Collections;
44
import java.util.List;
5+
import java.util.stream.Collectors;
56

67
import com.fasterxml.jackson.annotation.JsonProperty;
78

@@ -72,7 +73,20 @@ public List<ZoomLivenessResourceResponse> getZoomLivenessResources() {
7273
*
7374
* @return the list of static liveness resources
7475
*/
75-
public List<StaticLivenessResourceResponse> getStaticLivenessResources() { return filterLivenessResourcesByType(StaticLivenessResourceResponse.class); }
76+
public List<StaticLivenessResourceResponse> getStaticLivenessResources() {
77+
return filterLivenessResourcesByType(StaticLivenessResourceResponse.class);
78+
}
79+
80+
private <T extends LivenessResourceResponse> List<T> filterLivenessResourcesByType(Class<T> clazz) {
81+
if (livenessCapture == null) {
82+
return Collections.emptyList();
83+
} else {
84+
return livenessCapture.stream()
85+
.filter(clazz::isInstance)
86+
.map(clazz::cast)
87+
.collect(Collectors.toList());
88+
}
89+
}
7690

7791
/**
7892
* Returns ApplicantProfile resources uploaded by the user/relying business
@@ -83,14 +97,23 @@ public List<ApplicantProfileResourceResponse> getApplicantProfiles() {
8397
return applicantProfiles;
8498
}
8599

86-
private <T extends LivenessResourceResponse> List<T> filterLivenessResourcesByType(Class<T> clazz) {
87-
List<T> filteredList = new ArrayList<>();
88-
for (LivenessResourceResponse livenessResourceResponse : livenessCapture) {
89-
if (clazz.isInstance(livenessResourceResponse)) {
90-
filteredList.add(clazz.cast(livenessResourceResponse));
91-
}
100+
ResourceContainer filterForCheck(CheckResponse checkResponse) {
101+
ResourceContainer newResourceContainer = new ResourceContainer();
102+
newResourceContainer.idDocuments = filterResources(this.idDocuments, checkResponse.getResourcesUsed());
103+
newResourceContainer.supplementaryDocuments = filterResources(this.supplementaryDocuments, checkResponse.getResourcesUsed());
104+
newResourceContainer.livenessCapture = filterResources(this.livenessCapture, checkResponse.getResourcesUsed());
105+
newResourceContainer.faceCapture = filterResources(this.faceCapture, checkResponse.getResourcesUsed());
106+
newResourceContainer.applicantProfiles = filterResources(this.applicantProfiles, checkResponse.getResourcesUsed());
107+
return newResourceContainer;
108+
}
109+
110+
private <T extends ResourceResponse> List<T> filterResources(List<T> resources, List<String> resourceIds) {
111+
if (resources == null) {
112+
return Collections.emptyList();
92113
}
93-
return filteredList;
114+
return resources.stream()
115+
.filter(resource -> resourceIds.contains(resource.getId()))
116+
.collect(Collectors.toList());
94117
}
95118

96119
}

yoti-sdk-api/src/test/java/com/yoti/api/client/docs/session/retrieve/GetSessionResultTest.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,29 @@
22

33
import static org.hamcrest.MatcherAssert.assertThat;
44
import static org.hamcrest.Matchers.contains;
5+
import static org.hamcrest.core.Is.is;
6+
import static org.junit.Assert.assertThrows;
7+
import static org.mockito.Mockito.when;
58

69
import java.util.Arrays;
10+
import java.util.Collections;
711
import java.util.List;
812

913
import com.yoti.api.client.spi.remote.util.FieldSetter;
1014

15+
import org.junit.Before;
1116
import org.junit.Test;
1217
import org.junit.runner.RunWith;
18+
import org.mockito.InjectMocks;
1319
import org.mockito.Mock;
1420
import org.mockito.junit.MockitoJUnitRunner;
1521

1622
@RunWith(MockitoJUnitRunner.class)
1723
public class GetSessionResultTest {
1824

19-
GetSessionResult testObj = new GetSessionResult();
25+
private static final String AUTH_CHECK_ID = "authCheckId";
26+
27+
@InjectMocks GetSessionResult testObj = new GetSessionResult();
2028

2129
@Mock AuthenticityCheckResponse authenticityCheckResponseMock;
2230
@Mock FaceMatchCheckResponse faceMatchCheckResponseMock;
@@ -33,6 +41,14 @@ public class GetSessionResultTest {
3341
@Mock ProfileDocumentMatchCheckResponse profileDocumentMatchCheckResponseMock;
3442
@Mock SynecticsIdentityFraudCheckResponse synecticsIdentityFraudCheckResponseMock;
3543

44+
@Mock(name = "resources") ResourceContainer resourceContainerMock;
45+
@Mock ResourceContainer checkResourceContainerMock;
46+
47+
@Before
48+
public void setUp() throws Exception {
49+
when(authenticityCheckResponseMock.getId()).thenReturn(AUTH_CHECK_ID);
50+
}
51+
3652
@Test
3753
public void shouldFilterChecks() {
3854
List<CheckResponse> allChecks = Arrays.asList(
@@ -69,4 +85,21 @@ public void shouldFilterChecks() {
6985
assertThat(testObj.getSynecticsIdentityFraudChecks(), contains(synecticsIdentityFraudCheckResponseMock));
7086
}
7187

88+
@Test
89+
public void getResourcesForCheck_shouldThrowExceptionForBadCheckId() {
90+
FieldSetter.setField(testObj, "checks", Collections.singletonList(authenticityCheckResponseMock));
91+
92+
assertThrows(IllegalArgumentException.class, () -> testObj.getResourcesForCheck("someBadCheckId"));
93+
}
94+
95+
@Test
96+
public void getResourcesForCheck_shouldReturnResultFromResources() {
97+
FieldSetter.setField(testObj, "checks", Collections.singletonList(authenticityCheckResponseMock));
98+
when(resourceContainerMock.filterForCheck(authenticityCheckResponseMock)).thenReturn(checkResourceContainerMock);
99+
100+
ResourceContainer result = testObj.getResourcesForCheck(AUTH_CHECK_ID);
101+
102+
assertThat(result, is(checkResourceContainerMock));
103+
}
104+
72105
}
Lines changed: 100 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package com.yoti.api.client.docs.session.retrieve;
22

3+
import static java.util.Arrays.asList;
4+
35
import static org.hamcrest.MatcherAssert.assertThat;
46
import static org.hamcrest.Matchers.contains;
7+
import static org.hamcrest.Matchers.emptyIterable;
58
import static org.hamcrest.Matchers.hasSize;
9+
import static org.hamcrest.Matchers.is;
10+
import static org.mockito.Mockito.when;
611

712
import java.util.ArrayList;
8-
import java.util.Arrays;
913
import java.util.List;
1014

1115
import com.yoti.api.client.spi.remote.util.FieldSetter;
1216

17+
import org.junit.Before;
1318
import org.junit.Test;
1419
import org.junit.runner.RunWith;
1520
import org.mockito.Mock;
@@ -18,37 +23,123 @@
1823
@RunWith(MockitoJUnitRunner.class)
1924
public class ResourceContainerTest {
2025

26+
private static final String ID_DOC_1_ID = "idDocumentResource1Id";
27+
private static final String SUPPLEMENTARY_DOC_1_ID = "supplementaryDocResource1Id";
28+
private static final String ZOOM_RESOURCE_1_ID = "zoomLivenessResource1MockId";
29+
private static final String FACE_CAPTURE_1_ID = "faceCaptureResource1Id";
30+
private static final String PROFILE_1_ID = "applicantProfileResource1Id";
31+
2132
ResourceContainer testObj = new ResourceContainer();
2233

23-
@Mock ZoomLivenessResourceResponse zoomLivenessResourceMock;
34+
@Mock IdDocumentResourceResponse idDocResourceResponse1Mock;
35+
@Mock IdDocumentResourceResponse idDocResourceResponse2Mock;
36+
@Mock SupplementaryDocumentResourceResponse supplementaryDocResourceResponse1Mock;
37+
@Mock SupplementaryDocumentResourceResponse supplementaryDocResourceResponse2Mock;
38+
@Mock ZoomLivenessResourceResponse zoomLivenessResource1Mock;
39+
@Mock ZoomLivenessResourceResponse zoomLivenessResource2Mock;
2440
@Mock StaticLivenessResourceResponse staticLivenessResourceMock;
2541
@Mock LivenessResourceResponse livenessResource;
42+
@Mock FaceCaptureResourceResponse faceCaptureResourceResponse1Mock;
43+
@Mock FaceCaptureResourceResponse faceCaptureResourceResponse2Mock;
44+
@Mock ApplicantProfileResourceResponse applicantProfileResourceResponse1Mock;
45+
@Mock ApplicantProfileResourceResponse applicantProfileResourceResponse2Mock;
46+
47+
@Mock CheckResponse checkResponseMock;
48+
49+
@Before
50+
public void setUp() throws Exception {
51+
when(idDocResourceResponse1Mock.getId()).thenReturn(ID_DOC_1_ID);
52+
when(idDocResourceResponse2Mock.getId()).thenReturn("idDocumentResource2Id");
53+
when(supplementaryDocResourceResponse1Mock.getId()).thenReturn(SUPPLEMENTARY_DOC_1_ID);
54+
when(supplementaryDocResourceResponse2Mock.getId()).thenReturn("supplementaryDocResource2Id");
55+
when(zoomLivenessResource1Mock.getId()).thenReturn(ZOOM_RESOURCE_1_ID);
56+
when(zoomLivenessResource2Mock.getId()).thenReturn("zoomLivenessResource2MockId");
57+
when(faceCaptureResourceResponse1Mock.getId()).thenReturn(FACE_CAPTURE_1_ID);
58+
when(faceCaptureResourceResponse2Mock.getId()).thenReturn("faceCaptureResource2Id");
59+
when(applicantProfileResourceResponse1Mock.getId()).thenReturn(PROFILE_1_ID);
60+
when(applicantProfileResourceResponse2Mock.getId()).thenReturn("applicantProfileResource2Id");
61+
}
2662

2763
@Test
28-
public void shouldFilterZoomLivenessResources() {
29-
FieldSetter.setField(testObj, "livenessCapture", Arrays.asList(zoomLivenessResourceMock, staticLivenessResourceMock, livenessResource));
64+
public void getZoomLivenessResources_shouldFilterZoomLivenessResources() {
65+
FieldSetter.setField(testObj, "livenessCapture", asList(zoomLivenessResource1Mock, staticLivenessResourceMock, livenessResource));
3066

3167
List<ZoomLivenessResourceResponse> result = testObj.getZoomLivenessResources();
3268

33-
assertThat(result, contains(zoomLivenessResourceMock));
69+
assertThat(result, contains(zoomLivenessResource1Mock));
3470
}
3571

3672
@Test
37-
public void shouldFilterStaticLivenessResources() {
38-
FieldSetter.setField(testObj, "livenessCapture", Arrays.asList(zoomLivenessResourceMock, staticLivenessResourceMock, livenessResource));
73+
public void getZoomLivenessResources_shouldReturnEmptyList() {
74+
FieldSetter.setField(testObj, "livenessCapture", new ArrayList<>());
75+
76+
List<ZoomLivenessResourceResponse> result = testObj.getZoomLivenessResources();
77+
78+
assertThat(result, hasSize(0));
79+
}
80+
81+
@Test
82+
public void getStaticLivenessResources_shouldFilterStaticLivenessResources() {
83+
FieldSetter.setField(testObj, "livenessCapture", asList(zoomLivenessResource1Mock, staticLivenessResourceMock, livenessResource));
3984

4085
List<StaticLivenessResourceResponse> result = testObj.getStaticLivenessResources();
4186

4287
assertThat(result, contains(staticLivenessResourceMock));
4388
}
4489

4590
@Test
46-
public void shouldReturnEmptyList() {
91+
public void getStaticLivenessResources_shouldReturnEmptyList() {
4792
FieldSetter.setField(testObj, "livenessCapture", new ArrayList<>());
4893

49-
List<ZoomLivenessResourceResponse> result = testObj.getZoomLivenessResources();
94+
List<StaticLivenessResourceResponse> result = testObj.getStaticLivenessResources();
5095

5196
assertThat(result, hasSize(0));
5297
}
5398

99+
@Test
100+
public void filterForCheck_shouldHandleNullResources() {
101+
ResourceContainer result = testObj.filterForCheck(checkResponseMock);
102+
103+
assertThat(result.getIdDocuments(), is(emptyIterable()));
104+
assertThat(result.getSupplementaryDocuments(), is(emptyIterable()));
105+
assertThat(result.getLivenessCapture(), is(emptyIterable()));
106+
assertThat(result.getFaceCapture(), is(emptyIterable()));
107+
assertThat(result.getApplicantProfiles(), is(emptyIterable()));
108+
}
109+
110+
@Test
111+
public void filterForCheck_shouldReturnEmptyWhenNoMatches() {
112+
FieldSetter.setField(testObj, "idDocuments", new ArrayList<>());
113+
FieldSetter.setField(testObj, "supplementaryDocuments", new ArrayList<>());
114+
FieldSetter.setField(testObj, "livenessCapture", new ArrayList<>());
115+
FieldSetter.setField(testObj, "faceCapture", new ArrayList<>());
116+
FieldSetter.setField(testObj, "applicantProfiles", new ArrayList<>());
117+
118+
ResourceContainer result = testObj.filterForCheck(checkResponseMock);
119+
120+
assertThat(result.getIdDocuments(), is(emptyIterable()));
121+
assertThat(result.getSupplementaryDocuments(), is(emptyIterable()));
122+
assertThat(result.getLivenessCapture(), is(emptyIterable()));
123+
assertThat(result.getFaceCapture(), is(emptyIterable()));
124+
assertThat(result.getApplicantProfiles(), is(emptyIterable()));
125+
}
126+
127+
@Test
128+
public void filterForCheck_shouldReturnFilteredCollections() {
129+
FieldSetter.setField(testObj, "idDocuments", asList(idDocResourceResponse1Mock, idDocResourceResponse2Mock));
130+
FieldSetter.setField(testObj, "supplementaryDocuments", asList(supplementaryDocResourceResponse1Mock, supplementaryDocResourceResponse2Mock));
131+
FieldSetter.setField(testObj, "livenessCapture", asList(zoomLivenessResource1Mock, zoomLivenessResource2Mock, staticLivenessResourceMock));
132+
FieldSetter.setField(testObj, "faceCapture", asList(faceCaptureResourceResponse1Mock, faceCaptureResourceResponse2Mock));
133+
FieldSetter.setField(testObj, "applicantProfiles", asList(applicantProfileResourceResponse1Mock, applicantProfileResourceResponse2Mock));
134+
when(checkResponseMock.getResourcesUsed()).thenReturn(asList(ID_DOC_1_ID, SUPPLEMENTARY_DOC_1_ID, ZOOM_RESOURCE_1_ID, FACE_CAPTURE_1_ID, PROFILE_1_ID));
135+
136+
ResourceContainer result = testObj.filterForCheck(checkResponseMock);
137+
138+
assertThat(result.getIdDocuments(), contains(idDocResourceResponse1Mock));
139+
assertThat(result.getSupplementaryDocuments(), contains(supplementaryDocResourceResponse1Mock));
140+
assertThat(result.getLivenessCapture(), contains(zoomLivenessResource1Mock));
141+
assertThat(result.getFaceCapture(), contains(faceCaptureResourceResponse1Mock));
142+
assertThat(result.getApplicantProfiles(), contains(applicantProfileResourceResponse1Mock));
143+
}
144+
54145
}

0 commit comments

Comments
 (0)