Skip to content

Commit d4ed659

Browse files
Ugo Lambertdamienbr
authored andcommitted
PL-3814 Expose Payment Request Activation endpoint to Ponto Connect libraries
1 parent e833617 commit d4ed659

File tree

8 files changed

+210
-0
lines changed

8 files changed

+210
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.ibanity.apis.client.products.ponto_connect.models;
2+
3+
import com.ibanity.apis.client.models.IbanityModel;
4+
import lombok.*;
5+
6+
import java.util.UUID;
7+
8+
@Data
9+
@Builder
10+
@NoArgsConstructor
11+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
12+
public class PaymentRequestActivationRequest implements IbanityModel {
13+
14+
public static final String RESOURCE_TYPE = "paymentRequestActivationRequest";
15+
public static final String API_URL_TAG_ID = "{" + RESOURCE_TYPE + URL_PARAMETER_ID_POSTFIX + "}";
16+
17+
private UUID id;
18+
private String selfLink;
19+
private String requestId;
20+
21+
private String redirectLink;
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.ibanity.apis.client.products.ponto_connect.models.create;
2+
3+
import lombok.Builder;
4+
import lombok.EqualsAndHashCode;
5+
import lombok.Getter;
6+
import lombok.ToString;
7+
8+
import java.util.Map;
9+
10+
import static java.util.Collections.emptyMap;
11+
12+
@Getter
13+
@Builder
14+
@ToString
15+
@EqualsAndHashCode
16+
public class PaymentRequestActivationRequestCreateQuery {
17+
18+
private String accessToken;
19+
private String redirectUri;
20+
21+
@Builder.Default
22+
private Map<String, String> additionalHeaders = emptyMap();
23+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.ibanity.apis.client.products.ponto_connect.services;
2+
3+
import com.ibanity.apis.client.products.ponto_connect.models.create.PaymentRequestActivationRequestCreateQuery;
4+
5+
public interface PaymentRequestActivationRequestService {
6+
7+
com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest create(PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery);
8+
}

src/main/java/com/ibanity/apis/client/products/ponto_connect/services/PontoConnectService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public interface PontoConnectService {
3434

3535
PaymentActivationRequestService paymentActivationRequestService();
3636

37+
PaymentRequestActivationRequestService paymentRequestActivationRequestService();
38+
3739
IntegrationAccountService integrationAccountService();
3840

3941
PaymentRequestService paymentRequestService();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.ibanity.apis.client.products.ponto_connect.services.impl;
2+
3+
import com.ibanity.apis.client.http.IbanityHttpClient;
4+
import com.ibanity.apis.client.jsonapi.DataApiModel;
5+
import com.ibanity.apis.client.jsonapi.RequestApiModel;
6+
import com.ibanity.apis.client.products.ponto_connect.models.create.PaymentRequestActivationRequestCreateQuery;
7+
import com.ibanity.apis.client.products.ponto_connect.services.PaymentRequestActivationRequestService;
8+
import com.ibanity.apis.client.services.ApiUrlProvider;
9+
import lombok.*;
10+
import org.apache.commons.lang3.StringUtils;
11+
import org.apache.http.HttpResponse;
12+
13+
import java.net.URI;
14+
import java.util.function.Function;
15+
16+
import static com.ibanity.apis.client.mappers.IbanityModelMapper.mapResource;
17+
import static com.ibanity.apis.client.mappers.IbanityModelMapper.toIbanityModel;
18+
import static com.ibanity.apis.client.mappers.ModelMapperHelper.buildRequest;
19+
import static com.ibanity.apis.client.models.IbanityProduct.PontoConnect;
20+
import static com.ibanity.apis.client.utils.URIHelper.buildUri;
21+
22+
public class PaymentRequestActivationRequestServiceImpl implements PaymentRequestActivationRequestService {
23+
24+
private final ApiUrlProvider apiUrlProvider;
25+
private final IbanityHttpClient ibanityHttpClient;
26+
27+
public PaymentRequestActivationRequestServiceImpl(ApiUrlProvider apiUrlProvider, IbanityHttpClient ibanityHttpClient) {
28+
this.apiUrlProvider = apiUrlProvider;
29+
this.ibanityHttpClient = ibanityHttpClient;
30+
}
31+
32+
@Override
33+
public com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest create(PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery) {
34+
URI uri = buildUri(getUrl());
35+
36+
RequestApiModel requestApiModel = buildRequest(PaymentRequestActivationRequest.RESOURCE_TYPE, toRequest(paymentRequestActivationRequestCreateQuery));
37+
HttpResponse response = ibanityHttpClient.post(uri, requestApiModel, paymentRequestActivationRequestCreateQuery.getAdditionalHeaders(), paymentRequestActivationRequestCreateQuery.getAccessToken());
38+
39+
return mapResource(response, customMapping());
40+
}
41+
42+
private PaymentRequestActivationRequest toRequest(PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery) {
43+
return PaymentRequestActivationRequest.builder()
44+
.redirectUri(paymentRequestActivationRequestCreateQuery.getRedirectUri())
45+
.build();
46+
}
47+
48+
private Function<DataApiModel, com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest> customMapping() {
49+
return dataApiModel -> {
50+
com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest paymentRequestActivationRequest = toIbanityModel(dataApiModel, com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest.class);
51+
paymentRequestActivationRequest.setRedirectLink(dataApiModel.getLinks().getRedirect());
52+
53+
return paymentRequestActivationRequest;
54+
};
55+
}
56+
57+
private String getUrl() {
58+
return StringUtils.removeEnd(apiUrlProvider.find(PontoConnect, "paymentRequestActivationRequests"), "/");
59+
}
60+
61+
@Data
62+
@Builder
63+
@NoArgsConstructor
64+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
65+
private static class PaymentRequestActivationRequest {
66+
public static final String RESOURCE_TYPE = "paymentRequestActivationRequest";
67+
68+
private String redirectUri;
69+
}
70+
}

src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/PontoConnectServiceImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class PontoConnectServiceImpl implements PontoConnectService {
2424
private final BulkPaymentService bulkPaymentService;
2525
private final ReauthorizationRequestService reauthorizationRequestService;
2626
private final PaymentActivationRequestService paymentActivationRequestService;
27+
private final PaymentRequestActivationRequestService paymentRequestActivationRequestService;
2728
private final IntegrationAccountService integrationAccountService;
2829
private final PaymentRequestService paymentRequestService;
2930

@@ -43,6 +44,7 @@ public PontoConnectServiceImpl(ApiUrlProvider apiUrlProvider, IbanityHttpClient
4344
bulkPaymentService = new BulkPaymentServiceImpl(apiUrlProvider, ibanityHttpClient);
4445
reauthorizationRequestService = new ReauthorizationRequestServiceImpl(apiUrlProvider, ibanityHttpClient);
4546
paymentActivationRequestService = new PaymentActivationRequestServiceImpl(apiUrlProvider, ibanityHttpClient);
47+
paymentRequestActivationRequestService = new PaymentRequestActivationRequestServiceImpl(apiUrlProvider, ibanityHttpClient);
4648
integrationAccountService = new IntegrationAccountServiceImpl(apiUrlProvider, ibanityHttpClient);
4749
paymentRequestService = new PaymentRequestServiceImpl(apiUrlProvider, ibanityHttpClient);
4850
}
@@ -120,6 +122,9 @@ public ReauthorizationRequestService reauthorizationRequestService() {
120122
@Override
121123
public PaymentActivationRequestService paymentActivationRequestService() { return paymentActivationRequestService;}
122124

125+
@Override
126+
public PaymentRequestActivationRequestService paymentRequestActivationRequestService() { return paymentRequestActivationRequestService;}
127+
123128
@Override
124129
public IntegrationAccountService integrationAccountService() {
125130
return integrationAccountService;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.ibanity.apis.client.products.ponto_connect.services.impl;
2+
3+
import com.ibanity.apis.client.http.IbanityHttpClient;
4+
import com.ibanity.apis.client.models.IbanityProduct;
5+
import com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest;
6+
import com.ibanity.apis.client.products.ponto_connect.models.create.PaymentRequestActivationRequestCreateQuery;
7+
import com.ibanity.apis.client.services.ApiUrlProvider;
8+
import org.assertj.core.api.Assertions;
9+
import org.junit.jupiter.api.BeforeEach;
10+
import org.junit.jupiter.api.Test;
11+
import org.junit.jupiter.api.extension.ExtendWith;
12+
import org.mockito.InjectMocks;
13+
import org.mockito.Mock;
14+
import org.mockito.junit.jupiter.MockitoExtension;
15+
16+
import java.io.IOException;
17+
import java.util.UUID;
18+
19+
import static com.ibanity.apis.client.helpers.IbanityTestHelper.loadHttpResponse;
20+
import static com.ibanity.apis.client.utils.URIHelper.buildUri;
21+
import static java.util.Collections.emptyMap;
22+
import static org.mockito.ArgumentMatchers.any;
23+
import static org.mockito.ArgumentMatchers.eq;
24+
import static org.mockito.Mockito.when;
25+
26+
@ExtendWith(MockitoExtension.class)
27+
class PaymentRequestActivationRequestServiceImplTest {
28+
29+
private static final String PAYMENT_ACTIVATION_REQUEST_ENDPOINT = "https://api.ibanity.localhost/ponto-connect/payment-request-activation-request";
30+
private static final UUID PAYMENT_ACTIVATION_REQUEST_ID = UUID.fromString("7e7fca4c-cc8e-4e23-9a5f-cfa4dc175a88");
31+
private static final String ACCESS_TOKEN = "anAccessToken";
32+
33+
@InjectMocks
34+
private PaymentRequestActivationRequestServiceImpl paymentRequestActivationRequestService;
35+
36+
@Mock
37+
private ApiUrlProvider apiUrlProvider;
38+
39+
@Mock
40+
private IbanityHttpClient ibanityHttpClient;
41+
42+
@BeforeEach
43+
void setUp() {
44+
when(apiUrlProvider.find(IbanityProduct.PontoConnect, "paymentRequestActivationRequests"))
45+
.thenReturn(PAYMENT_ACTIVATION_REQUEST_ENDPOINT);
46+
}
47+
48+
@Test
49+
void create() throws IOException {
50+
PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery =
51+
PaymentRequestActivationRequestCreateQuery.builder()
52+
.accessToken(ACCESS_TOKEN)
53+
.redirectUri("https://example.localhost")
54+
.build();
55+
56+
when(ibanityHttpClient.post(eq(buildUri(PAYMENT_ACTIVATION_REQUEST_ENDPOINT)), any(),eq(emptyMap()), eq(ACCESS_TOKEN)))
57+
.thenReturn(loadHttpResponse("json/ponto-connect/create_payment_request_activation_request.json"));
58+
59+
60+
PaymentRequestActivationRequest actual = paymentRequestActivationRequestService.create(paymentRequestActivationRequestCreateQuery);
61+
62+
Assertions.assertThat(actual).isEqualToComparingFieldByFieldRecursively(createExpected());
63+
}
64+
65+
private Object createExpected() {
66+
return PaymentRequestActivationRequest.builder()
67+
.id(PAYMENT_ACTIVATION_REQUEST_ID)
68+
.redirectLink("https://authorize.development.myponto.net/organizations/6680437c-8ed8-425b-84b7-2c31e5ca625d/sandbox/integrations/1f5caef0-7dcd-41d0-9318-24bf40ba9d16/payment-request-activation-requests/7e7fca4c-cc8e-4e23-9a5f-cfa4dc175a88")
69+
.build();
70+
}
71+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"data": {
3+
"type": "paymentRequestActivationRequest",
4+
"links": {
5+
"redirect": "https://authorize.development.myponto.net/organizations/6680437c-8ed8-425b-84b7-2c31e5ca625d/sandbox/integrations/1f5caef0-7dcd-41d0-9318-24bf40ba9d16/payment-request-activation-requests/7e7fca4c-cc8e-4e23-9a5f-cfa4dc175a88"
6+
},
7+
"id": "7e7fca4c-cc8e-4e23-9a5f-cfa4dc175a88"
8+
}
9+
}

0 commit comments

Comments
 (0)