Skip to content

Commit dae3845

Browse files
authored
Improve capabilities handling for notification-based certificate choice builder (#142)
* SLIB-113 - improve capabilities handling for notification certificate choice builder * SLIB-113 - improve capabilities handling for device link certificate choice builder
1 parent 29079d4 commit dae3845

6 files changed

Lines changed: 20 additions & 45 deletions

src/main/java/ee/sk/smartid/DeviceLinkCertificateChoiceSessionRequestBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import ee.sk.smartid.rest.dao.DeviceLinkCertificateChoiceSessionRequest;
3737
import ee.sk.smartid.rest.dao.DeviceLinkSessionResponse;
3838
import ee.sk.smartid.rest.dao.RequestProperties;
39+
import ee.sk.smartid.util.SetUtil;
3940
import ee.sk.smartid.util.StringUtil;
4041

4142
public class DeviceLinkCertificateChoiceSessionRequestBuilder {
@@ -112,7 +113,7 @@ public DeviceLinkCertificateChoiceSessionRequestBuilder withNonce(String nonce)
112113
* @return this builder
113114
*/
114115
public DeviceLinkCertificateChoiceSessionRequestBuilder withCapabilities(String... capabilities) {
115-
this.capabilities = Set.of(capabilities);
116+
this.capabilities = SetUtil.toSet(capabilities);
116117
return this;
117118
}
118119

src/main/java/ee/sk/smartid/NotificationCertificateChoiceSessionRequestBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import ee.sk.smartid.rest.dao.NotificationCertificateChoiceSessionResponse;
3737
import ee.sk.smartid.rest.dao.RequestProperties;
3838
import ee.sk.smartid.rest.dao.SemanticsIdentifier;
39+
import ee.sk.smartid.util.SetUtil;
3940
import ee.sk.smartid.util.StringUtil;
4041

4142
/**
@@ -113,7 +114,7 @@ public NotificationCertificateChoiceSessionRequestBuilder withNonce(String nonce
113114
* @return this builder
114115
*/
115116
public NotificationCertificateChoiceSessionRequestBuilder withCapabilities(String... capabilities) {
116-
this.capabilities = Set.of(capabilities);
117+
this.capabilities = SetUtil.toSet(capabilities);
117118
return this;
118119
}
119120

src/test/java/ee/sk/smartid/CapabilitiesArgumentProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
4242
Arguments.of(new String[]{"capability1"}, Set.of("capability1")),
4343
Arguments.of(new String[]{"capability1", "capability1"}, Set.of("capability1")),
4444
Arguments.of(new String[]{"capability1", null}, Set.of("capability1")),
45-
Arguments.of(new String[]{null, "capability1"}, Set.of("capability1"))
45+
Arguments.of(new String[]{null, "capability1"}, Set.of("capability1")),
46+
Arguments.of(new String[]{"", "capability1"}, Set.of("capability1")),
47+
Arguments.of(new String[]{" ", "capability1"}, Set.of("capability1"))
4648
);
4749
}
4850
}

src/test/java/ee/sk/smartid/DeviceLinkCertificateChoiceSessionRequestBuilderTest.java

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import static org.mockito.Mockito.when;
3636

3737
import java.net.URI;
38+
import java.util.Set;
3839
import java.util.stream.Stream;
3940

4041
import org.junit.jupiter.api.BeforeEach;
@@ -47,6 +48,7 @@
4748
import org.junit.jupiter.params.provider.ArgumentsSource;
4849
import org.junit.jupiter.params.provider.NullAndEmptySource;
4950
import org.junit.jupiter.params.provider.ValueSource;
51+
import org.mockito.ArgumentCaptor;
5052

5153
import ee.sk.smartid.exception.UnprocessableSmartIdResponseException;
5254
import ee.sk.smartid.exception.permanent.SmartIdClientException;
@@ -114,36 +116,18 @@ void initiateCertificateChoice_missingCertificateLevel() {
114116
verify(connector).initDeviceLinkCertificateChoice(any(DeviceLinkCertificateChoiceSessionRequest.class));
115117
}
116118

117-
@Test
118-
void initiateCertificateChoice_withValidCapabilities() {
119-
builderService.withCapabilities("ADVANCED", "QUALIFIED");
120-
when(connector.initDeviceLinkCertificateChoice(any(DeviceLinkCertificateChoiceSessionRequest.class))).thenReturn(mockCertificateChoiceResponse());
121-
122-
DeviceLinkSessionResponse result = builderService.initCertificateChoice();
123-
124-
assertNotNull(result);
125-
assertEquals("test-session-id", result.sessionID());
126-
assertEquals("test-session-token", result.sessionToken());
127-
assertEquals("test-session-secret", result.sessionSecret());
128-
assertEquals(URI.create("https://example.com/device-link"), result.deviceLinkBase());
129-
130-
verify(connector).initDeviceLinkCertificateChoice(any(DeviceLinkCertificateChoiceSessionRequest.class));
131-
}
132-
133-
@Test
134-
void initiateCertificateChoice_nullCapabilities() {
135-
builderService.withCapabilities();
119+
@ParameterizedTest
120+
@ArgumentsSource(CapabilitiesArgumentProvider.class)
121+
void initiateCertificateChoice_withValidCapabilities(String[] capabilities, Set<String> expectedCapabilities) {
136122
when(connector.initDeviceLinkCertificateChoice(any(DeviceLinkCertificateChoiceSessionRequest.class))).thenReturn(mockCertificateChoiceResponse());
137123

138-
DeviceLinkSessionResponse result = builderService.initCertificateChoice();
124+
builderService.withCapabilities(capabilities).initCertificateChoice();
139125

140-
assertNotNull(result);
141-
assertEquals("test-session-id", result.sessionID());
142-
assertEquals("test-session-token", result.sessionToken());
143-
assertEquals("test-session-secret", result.sessionSecret());
144-
assertEquals(URI.create("https://example.com/device-link"), result.deviceLinkBase());
126+
ArgumentCaptor<DeviceLinkCertificateChoiceSessionRequest> requestCaptor = ArgumentCaptor.forClass(DeviceLinkCertificateChoiceSessionRequest.class);
127+
verify(connector).initDeviceLinkCertificateChoice(requestCaptor.capture());
128+
DeviceLinkCertificateChoiceSessionRequest request = requestCaptor.getValue();
145129

146-
verify(connector).initDeviceLinkCertificateChoice(any(DeviceLinkCertificateChoiceSessionRequest.class));
130+
assertEquals(expectedCapabilities, request.capabilities());
147131
}
148132

149133
@Nested

src/test/java/ee/sk/smartid/NotificationCertificateChoiceSessionRequestBuilderTest.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import static org.mockito.Mockito.verify;
3636
import static org.mockito.Mockito.when;
3737

38-
import java.util.Collections;
3938
import java.util.Set;
4039
import java.util.function.UnaryOperator;
4140
import java.util.stream.Stream;
@@ -259,17 +258,6 @@ public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
259258
}
260259
}
261260

262-
private static class CapabilitiesArgumentProvider implements ArgumentsProvider {
263-
@Override
264-
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
265-
return Stream.of(
266-
Arguments.of(new String[0], Collections.emptySet()),
267-
Arguments.of(new String[]{"capability1"}, Set.of("capability1")),
268-
Arguments.of(new String[]{"capability1", "capability2"}, Set.of("capability1", "capability2"))
269-
);
270-
}
271-
}
272-
273261
private static class InvalidNonceProvider implements ArgumentsProvider {
274262
@Override
275263
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {

src/test/java/ee/sk/smartid/NotificationSignatureSessionRequestBuilderTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,6 @@ void initSignatureSession_withCapabilities_ok(String[] capabilities, Set<String>
249249
assertEquals(SignatureProtocol.RAW_DIGEST_SIGNATURE.name(), capturedRequest.signatureProtocol());
250250
}
251251

252-
253252
@Nested
254253
class ErrorCases {
255254

@@ -312,7 +311,7 @@ void initSignatureSession_signableDataAndSignableHashAreNotSet_throwException()
312311
@Test
313312
void initSignatureSession_signableDataAlreadySetAndSignableHashIsAlsoAdded_throwException() {
314313
var ex = assertThrows(SmartIdRequestSetupException.class,
315-
() -> new NotificationSignatureSessionRequestBuilder(connector)
314+
() -> new NotificationSignatureSessionRequestBuilder(connector)
316315
.withRelyingPartyUUID(RELYING_PARTY_UUID)
317316
.withRelyingPartyName(RELYING_PARTY_NAME)
318317
.withInteractions(List.of(NotificationInteraction.displayTextAndPin("Sign?")))
@@ -325,7 +324,7 @@ void initSignatureSession_signableDataAlreadySetAndSignableHashIsAlsoAdded_throw
325324
@Test
326325
void initSignatureSession_signableHashAlreadySetAndSignableHashIsAlsoAdded_throwException() {
327326
var ex = assertThrows(SmartIdRequestSetupException.class,
328-
() -> new NotificationSignatureSessionRequestBuilder(connector)
327+
() -> new NotificationSignatureSessionRequestBuilder(connector)
329328
.withRelyingPartyUUID(RELYING_PARTY_UUID)
330329
.withRelyingPartyName(RELYING_PARTY_NAME)
331330
.withInteractions(List.of(NotificationInteraction.displayTextAndPin("Sign?")))
@@ -461,7 +460,7 @@ private NotificationSignatureSessionRequestBuilder toBaseNotificationSignatureSe
461460
}
462461

463462
private NotificationSignatureSessionResponse mockNotificationSignatureSessionResponse() {
464-
var verificationCode = new VerificationCode("numeric4","4927");
463+
var verificationCode = new VerificationCode("numeric4", "4927");
465464
return toNotificationSignatureSessionResponse(verificationCode);
466465
}
467466

0 commit comments

Comments
 (0)