Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.ibanity.apis.client.products.ponto_connect.models;

import com.ibanity.apis.client.models.IbanityModel;
import lombok.*;

import java.util.UUID;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class PaymentRequestActivationRequest implements IbanityModel {

public static final String RESOURCE_TYPE = "paymentRequestActivationRequest";
public static final String API_URL_TAG_ID = "{" + RESOURCE_TYPE + URL_PARAMETER_ID_POSTFIX + "}";

private UUID id;
private String selfLink;
private String requestId;

private String redirectLink;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.ibanity.apis.client.products.ponto_connect.models.create;

import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;

import java.util.Map;

import static java.util.Collections.emptyMap;

@Getter
@Builder
@ToString
@EqualsAndHashCode
public class PaymentRequestActivationRequestCreateQuery {

private String accessToken;
private String redirectUri;

@Builder.Default
private Map<String, String> additionalHeaders = emptyMap();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.ibanity.apis.client.products.ponto_connect.services;

import com.ibanity.apis.client.products.ponto_connect.models.create.PaymentRequestActivationRequestCreateQuery;

public interface PaymentRequestActivationRequestService {

com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest create(PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery);
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ public interface PontoConnectService {

PaymentActivationRequestService paymentActivationRequestService();

PaymentRequestActivationRequestService paymentRequestActivationRequestService();

IntegrationAccountService integrationAccountService();

PaymentRequestService paymentRequestService();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package com.ibanity.apis.client.products.ponto_connect.services.impl;

import com.ibanity.apis.client.http.IbanityHttpClient;
import com.ibanity.apis.client.jsonapi.DataApiModel;
import com.ibanity.apis.client.jsonapi.RequestApiModel;
import com.ibanity.apis.client.products.ponto_connect.models.create.PaymentRequestActivationRequestCreateQuery;
import com.ibanity.apis.client.products.ponto_connect.services.PaymentRequestActivationRequestService;
import com.ibanity.apis.client.services.ApiUrlProvider;
import lombok.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;

import java.net.URI;
import java.util.function.Function;

import static com.ibanity.apis.client.mappers.IbanityModelMapper.mapResource;
import static com.ibanity.apis.client.mappers.IbanityModelMapper.toIbanityModel;
import static com.ibanity.apis.client.mappers.ModelMapperHelper.buildRequest;
import static com.ibanity.apis.client.models.IbanityProduct.PontoConnect;
import static com.ibanity.apis.client.utils.URIHelper.buildUri;

public class PaymentRequestActivationRequestServiceImpl implements PaymentRequestActivationRequestService {

private final ApiUrlProvider apiUrlProvider;
private final IbanityHttpClient ibanityHttpClient;

public PaymentRequestActivationRequestServiceImpl(ApiUrlProvider apiUrlProvider, IbanityHttpClient ibanityHttpClient) {
this.apiUrlProvider = apiUrlProvider;
this.ibanityHttpClient = ibanityHttpClient;
}

@Override
public com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest create(PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery) {
URI uri = buildUri(getUrl());

RequestApiModel requestApiModel = buildRequest(PaymentRequestActivationRequest.RESOURCE_TYPE, toRequest(paymentRequestActivationRequestCreateQuery));
HttpResponse response = ibanityHttpClient.post(uri, requestApiModel, paymentRequestActivationRequestCreateQuery.getAdditionalHeaders(), paymentRequestActivationRequestCreateQuery.getAccessToken());

return mapResource(response, customMapping());
}

private PaymentRequestActivationRequest toRequest(PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery) {
return PaymentRequestActivationRequest.builder()
.redirectUri(paymentRequestActivationRequestCreateQuery.getRedirectUri())
.build();
}

private Function<DataApiModel, com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest> customMapping() {
return dataApiModel -> {
com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest paymentRequestActivationRequest = toIbanityModel(dataApiModel, com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest.class);
paymentRequestActivationRequest.setRedirectLink(dataApiModel.getLinks().getRedirect());

return paymentRequestActivationRequest;
};
}

private String getUrl() {
return StringUtils.removeEnd(apiUrlProvider.find(PontoConnect, "paymentRequestActivationRequests"), "/");
}

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
private static class PaymentRequestActivationRequest {
public static final String RESOURCE_TYPE = "paymentRequestActivationRequest";

private String redirectUri;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public class PontoConnectServiceImpl implements PontoConnectService {
private final BulkPaymentService bulkPaymentService;
private final ReauthorizationRequestService reauthorizationRequestService;
private final PaymentActivationRequestService paymentActivationRequestService;
private final PaymentRequestActivationRequestService paymentRequestActivationRequestService;
private final IntegrationAccountService integrationAccountService;
private final PaymentRequestService paymentRequestService;

Expand All @@ -43,6 +44,7 @@ public PontoConnectServiceImpl(ApiUrlProvider apiUrlProvider, IbanityHttpClient
bulkPaymentService = new BulkPaymentServiceImpl(apiUrlProvider, ibanityHttpClient);
reauthorizationRequestService = new ReauthorizationRequestServiceImpl(apiUrlProvider, ibanityHttpClient);
paymentActivationRequestService = new PaymentActivationRequestServiceImpl(apiUrlProvider, ibanityHttpClient);
paymentRequestActivationRequestService = new PaymentRequestActivationRequestServiceImpl(apiUrlProvider, ibanityHttpClient);
integrationAccountService = new IntegrationAccountServiceImpl(apiUrlProvider, ibanityHttpClient);
paymentRequestService = new PaymentRequestServiceImpl(apiUrlProvider, ibanityHttpClient);
}
Expand Down Expand Up @@ -120,6 +122,9 @@ public ReauthorizationRequestService reauthorizationRequestService() {
@Override
public PaymentActivationRequestService paymentActivationRequestService() { return paymentActivationRequestService;}

@Override
public PaymentRequestActivationRequestService paymentRequestActivationRequestService() { return paymentRequestActivationRequestService;}

@Override
public IntegrationAccountService integrationAccountService() {
return integrationAccountService;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.ibanity.apis.client.products.ponto_connect.services.impl;

import com.ibanity.apis.client.http.IbanityHttpClient;
import com.ibanity.apis.client.models.IbanityProduct;
import com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest;
import com.ibanity.apis.client.products.ponto_connect.models.create.PaymentRequestActivationRequestCreateQuery;
import com.ibanity.apis.client.services.ApiUrlProvider;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.io.IOException;
import java.util.UUID;

import static com.ibanity.apis.client.helpers.IbanityTestHelper.loadHttpResponse;
import static com.ibanity.apis.client.utils.URIHelper.buildUri;
import static java.util.Collections.emptyMap;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
class PaymentRequestActivationRequestServiceImplTest {

private static final String PAYMENT_ACTIVATION_REQUEST_ENDPOINT = "https://api.ibanity.localhost/ponto-connect/payment-request-activation-request";
private static final UUID PAYMENT_ACTIVATION_REQUEST_ID = UUID.fromString("7e7fca4c-cc8e-4e23-9a5f-cfa4dc175a88");
private static final String ACCESS_TOKEN = "anAccessToken";

@InjectMocks
private PaymentRequestActivationRequestServiceImpl paymentRequestActivationRequestService;

@Mock
private ApiUrlProvider apiUrlProvider;

@Mock
private IbanityHttpClient ibanityHttpClient;

@BeforeEach
void setUp() {
when(apiUrlProvider.find(IbanityProduct.PontoConnect, "paymentRequestActivationRequests"))
.thenReturn(PAYMENT_ACTIVATION_REQUEST_ENDPOINT);
}

@Test
void create() throws IOException {
PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery =
PaymentRequestActivationRequestCreateQuery.builder()
.accessToken(ACCESS_TOKEN)
.redirectUri("https://example.localhost")
.build();

when(ibanityHttpClient.post(eq(buildUri(PAYMENT_ACTIVATION_REQUEST_ENDPOINT)), any(),eq(emptyMap()), eq(ACCESS_TOKEN)))
.thenReturn(loadHttpResponse("json/ponto-connect/create_payment_request_activation_request.json"));


PaymentRequestActivationRequest actual = paymentRequestActivationRequestService.create(paymentRequestActivationRequestCreateQuery);

Assertions.assertThat(actual).isEqualToComparingFieldByFieldRecursively(createExpected());
}

private Object createExpected() {
return PaymentRequestActivationRequest.builder()
.id(PAYMENT_ACTIVATION_REQUEST_ID)
.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")
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"data": {
"type": "paymentRequestActivationRequest",
"links": {
"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"
},
"id": "7e7fca4c-cc8e-4e23-9a5f-cfa4dc175a88"
}
}