Skip to content

Commit 2e16c25

Browse files
committed
SDK-2532: Update SessionSpec to use strongly typed object for Identity Profile subject
1 parent dd80329 commit 2e16c25

File tree

3 files changed

+55
-48
lines changed

3 files changed

+55
-48
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.yoti.api.client.docs.session.create;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
public class IdentityProfileSubjectPayload {
6+
7+
@JsonProperty("subject_id")
8+
private final String subjectId;
9+
10+
IdentityProfileSubjectPayload(String subjectId) {
11+
this.subjectId = subjectId;
12+
}
13+
14+
public static Builder builder() {
15+
return new Builder();
16+
}
17+
18+
public String getSubjectId() {
19+
return subjectId;
20+
}
21+
22+
public static class Builder {
23+
24+
private String subjectId;
25+
26+
Builder() {}
27+
28+
/**
29+
* Sets the subject ID for the Identity Profile requirement
30+
*
31+
* @param subjectId the subject ID
32+
* @return the builder
33+
*/
34+
public Builder withSubjectId(String subjectId) {
35+
this.subjectId = subjectId;
36+
return this;
37+
}
38+
39+
public IdentityProfileSubjectPayload build() {
40+
return new IdentityProfileSubjectPayload(subjectId);
41+
}
42+
43+
}
44+
45+
}

yoti-sdk-api/src/main/java/com/yoti/api/client/docs/session/create/SessionSpec.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public class SessionSpec {
6262
private final AdvancedIdentityProfileRequirementsPayload advancedIdentityProfileRequirements;
6363

6464
@JsonProperty(Property.SUBJECT)
65-
private final Map<String, Object> subject;
65+
private final IdentityProfileSubjectPayload subject;
6666

6767
@JsonProperty(Property.RESOURCES)
6868
private final ResourceCreationContainer resources;
@@ -83,7 +83,7 @@ public class SessionSpec {
8383
IbvOptions ibvOptions,
8484
ZonedDateTime sessionDeadline,
8585
IdentityProfileRequirementsPayload identityProfile,
86-
Map<String, Object> subject,
86+
IdentityProfileSubjectPayload subject,
8787
ResourceCreationContainer resources,
8888
Boolean createIdentityProfilePreview,
8989
AdvancedIdentityProfileRequirementsPayload advancedIdentityProfileRequirements) {
@@ -233,7 +233,7 @@ public IdentityProfileRequirementsPayload getIdentityProfile() {
233233
*
234234
* @return subject
235235
*/
236-
public Map<String, Object> getSubject() {
236+
public IdentityProfileSubjectPayload getSubject() {
237237
return subject;
238238
}
239239

@@ -280,7 +280,7 @@ public static class Builder {
280280
private ZonedDateTime sessionDeadline;
281281
private IdentityProfileRequirementsPayload identityProfile;
282282
private AdvancedIdentityProfileRequirementsPayload advancedIdentityProfileRequirementsPayload;
283-
private Map<String, Object> subject;
283+
private IdentityProfileSubjectPayload subject;
284284
private ResourceCreationContainer resources;
285285
private Boolean createIdentityProfilePreview;
286286

@@ -440,7 +440,7 @@ public Builder withIdentityProfile(IdentityProfileRequirementsPayload identityPr
440440
* @param subject the subject
441441
* @return the Builder
442442
*/
443-
public Builder withSubject(Map<String, Object> subject) {
443+
public Builder withSubject(IdentityProfileSubjectPayload subject) {
444444
this.subject = subject;
445445
return this;
446446
}

yoti-sdk-api/src/test/java/com/yoti/api/client/docs/session/create/SessionSpecTest.java

Lines changed: 5 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
11
package com.yoti.api.client.docs.session.create;
22

3-
import static com.yoti.api.client.spi.remote.call.YotiConstants.DEFAULT_CHARSET;
4-
53
import static org.hamcrest.MatcherAssert.assertThat;
64
import static org.hamcrest.Matchers.contains;
7-
import static org.hamcrest.Matchers.equalTo;
85
import static org.hamcrest.Matchers.hasItems;
96
import static org.hamcrest.Matchers.hasSize;
107
import static org.hamcrest.Matchers.instanceOf;
118
import static org.hamcrest.Matchers.is;
129
import static org.hamcrest.Matchers.notNullValue;
1310
import static org.hamcrest.Matchers.nullValue;
1411

15-
import java.io.IOException;
1612
import java.time.ZonedDateTime;
17-
import java.util.HashMap;
18-
import java.util.Map;
1913

2014
import com.yoti.api.client.docs.session.create.check.RequestedDocumentAuthenticityCheck;
2115
import com.yoti.api.client.docs.session.create.check.RequestedLivenessCheck;
@@ -24,9 +18,6 @@
2418
import com.yoti.api.client.docs.session.create.resources.ResourceCreationContainer;
2519
import com.yoti.api.client.docs.session.create.task.RequestedIdDocTextExtractionTask;
2620

27-
import com.fasterxml.jackson.databind.JsonNode;
28-
import com.fasterxml.jackson.databind.ObjectMapper;
29-
import org.hamcrest.Matchers;
3021
import org.junit.Test;
3122
import org.junit.runner.RunWith;
3223
import org.mockito.Mock;
@@ -51,14 +42,13 @@ public class SessionSpecTest {
5142
private static final String SOME_SDK_CONFIG_SUCCESS_URL = "https://yourdomain.com/some/success/endpoint";
5243
private static final String SOME_SDK_CONFIG_ERROR_URL = "https://yourdomain.com/some/error/endpoint";
5344

54-
private static final ObjectMapper MAPPER = new ObjectMapper();
55-
5645
@Mock RequiredDocument requiredDocumentMock;
5746
@Mock IbvOptions ibvOptionsMock;
5847
@Mock ZonedDateTime sessionDeadlineMock;
5948
@Mock ResourceCreationContainer resourceCreationContainerMock;
6049
@Mock ImportTokenPayload importTokenMock;
6150
@Mock IdentityProfileRequirementsPayload identityProfileRequirementsPayloadMock;
51+
@Mock IdentityProfileSubjectPayload identityProfileSubjectPayloadMock;
6252

6353
@Test
6454
public void shouldBuildWithMinimalConfiguration() {
@@ -226,21 +216,12 @@ public void withIdentityProfile_shouldSetTheIdentityProfile() {
226216
}
227217

228218
@Test
229-
public void shouldBuildWithSubject() throws IOException {
230-
Map<String, Object> subject = new HashMap<>();
231-
subject.put(SubjectProperty.SUBJECT_ID, "A_SUBJECT_ID");
232-
233-
SessionSpec session = SessionSpec.builder()
234-
.withSubject(subject)
219+
public void withSubject_shouldSetTheSubject() {
220+
SessionSpec result = SessionSpec.builder()
221+
.withSubject(identityProfileSubjectPayloadMock)
235222
.build();
236223

237-
ObjectMapper mapper = new ObjectMapper();
238-
239-
JsonNode json = mapper.readTree(
240-
mapper.writeValueAsString(session.getSubject()).getBytes(DEFAULT_CHARSET)
241-
);
242-
243-
assertThat(json.get("subject_id").asText(), is(Matchers.equalTo(subject.get(SubjectProperty.SUBJECT_ID))));
224+
assertThat(result.getSubject(), is(identityProfileSubjectPayloadMock));
244225
}
245226

246227
@Test
@@ -270,23 +251,4 @@ public void shouldBuildWithImportToken() {
270251
assertThat(sessionSpec.getImportToken(), is(importTokenMock));
271252
}
272253

273-
private static final class IdentityProperty {
274-
275-
private static final String TYPE = "type";
276-
private static final String SCHEME = "scheme";
277-
private static final String OBJECTIVE = "objective";
278-
private static final String TRUST_FRAMEWORK = "trust_framework";
279-
280-
private IdentityProperty() { }
281-
282-
}
283-
284-
private static final class SubjectProperty {
285-
286-
private static final String SUBJECT_ID = "subject_id";
287-
288-
private SubjectProperty() {}
289-
290-
}
291-
292254
}

0 commit comments

Comments
 (0)