diff --git a/README.md b/README.md index 18738b27..95495bd0 100644 --- a/README.md +++ b/README.md @@ -123,11 +123,30 @@ CompletableFuture> paymentResponse = client ApiResponse payment = paymentResponse.get(); ``` -### Build a link to our hosted createPaymentResponse page +### Build a link to our Hosted Payment Page (HPP) + +By default, the Hosted Payment Page link builder creates a payment result page, so you can just pass +a `resource_id`, a `resource_token` and `return_uri` parameters: +```java +URI link = client.hppLinkBuilder() + .resourceType(ResourceType.PAYMENT) // Either PAYMENT or MANDATE. Not mandatory, if not specified PAYMENT is used as default + .resourceId("$resourceId") + .resourceToken("$resourceToken") + .returnUri(URI.create("http://yourdomain.com")) + .build(); +``` +If needed, you can specify extra parameters as per our [public documentation](https://docs.truelayer.com/docs/authorise-payments-or-mandates-with-the-hpp#1-build-a-hpp-url), +like `max_wait_for_result` and `signup`: + ```java -URI hppLink = client.hpp().getHostedPaymentPageLink("your-createPaymentResponse-id", - "your-createPaymentResponse-token", - URI.create("http://yourdomain.com")); +URI link = client.hppLinkBuilder() + .resourceType(ResourceType.MANDATE) + .resourceId("$resourceId") + .resourceToken("$resourceToken") + .returnUri(URI.create("http://yourdomain.com")) + .maxWaitForResultSeconds(15) + .signup(true) + .build(); ``` ## Local setup diff --git a/gradle.properties b/gradle.properties index cd6db4e8..3bb7c723 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ # Main properties group=com.truelayer archivesBaseName=truelayer-java -version=16.0.1 +version=16.1.0 # Artifacts properties sonatype_repository_url=https://s01.oss.sonatype.org/service/local/ diff --git a/src/main/java/com/truelayer/java/HostedPaymentPageLinkBuilder.java b/src/main/java/com/truelayer/java/HostedPaymentPageLinkBuilder.java new file mode 100644 index 00000000..c0b3efb2 --- /dev/null +++ b/src/main/java/com/truelayer/java/HostedPaymentPageLinkBuilder.java @@ -0,0 +1,84 @@ +package com.truelayer.java; + +import static org.apache.commons.lang3.ObjectUtils.isEmpty; + +import com.truelayer.java.entities.ResourceType; +import java.net.URI; +import java.text.MessageFormat; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PACKAGE) +public class HostedPaymentPageLinkBuilder { + private final Environment environment; + + private ResourceType resourceType = ResourceType.PAYMENT; + private String resourceId; + private String resourceToken; + private URI returnUri; + private Integer maxWaitForResultSeconds; + private Boolean signup; + + public HostedPaymentPageLinkBuilder resourceType(ResourceType resourceType) { + this.resourceType = resourceType; + return this; + } + + public HostedPaymentPageLinkBuilder resourceId(String resourceId) { + this.resourceId = resourceId; + return this; + } + + public HostedPaymentPageLinkBuilder resourceToken(String resourceToken) { + this.resourceToken = resourceToken; + return this; + } + + public HostedPaymentPageLinkBuilder returnUri(URI returnUri) { + this.returnUri = returnUri; + return this; + } + + public HostedPaymentPageLinkBuilder maxWaitForResultSeconds(int maxWaitForResultSeconds) { + this.maxWaitForResultSeconds = maxWaitForResultSeconds; + return this; + } + + public HostedPaymentPageLinkBuilder signup(boolean signup) { + this.signup = signup; + return this; + } + + public URI build() { + if (isEmpty(this.resourceId)) { + throw new TrueLayerException("resource_id must be set"); + } + + if (isEmpty(resourceToken)) { + throw new TrueLayerException("resource_token must be set"); + } + + if (isEmpty(returnUri) || isEmpty(returnUri.toString())) { + throw new TrueLayerException("return_uri must be set"); + } + + URI hppLink = URI.create(MessageFormat.format( + "{0}/{1}#{2}={3}&resource_token={4}&return_uri={5}", + environment.getHppUri(), + resourceType.getHppLinkPath(), + resourceType.getHppLinkQueryParameter(), + resourceId, + resourceToken, + returnUri)); + + if (!isEmpty(maxWaitForResultSeconds)) { + hppLink = URI.create(MessageFormat.format("{0}&max_wait_for_result={1}", hppLink, maxWaitForResultSeconds)); + } + + if (!isEmpty(signup)) { + hppLink = URI.create(MessageFormat.format("{0}&signup={1}", hppLink, signup)); + } + + return hppLink; + } +} diff --git a/src/main/java/com/truelayer/java/ITrueLayerClient.java b/src/main/java/com/truelayer/java/ITrueLayerClient.java index 384b066c..a964be35 100644 --- a/src/main/java/com/truelayer/java/ITrueLayerClient.java +++ b/src/main/java/com/truelayer/java/ITrueLayerClient.java @@ -63,9 +63,17 @@ public interface ITrueLayerClient { /** * Entrypoint for Hosted Payment Page related services. * @return a utility to build a Hosted Payment Page URL. + * @deprecated use {@link #hppLinkBuilder()} instead. */ + @Deprecated IHostedPaymentPageLinkBuilder hpp(); + /** + * Entrypoint for Hosted Payment Page related services. + * @return a utility to build a Hosted Payment Page URL. + */ + HostedPaymentPageLinkBuilder hppLinkBuilder(); + /** * Utility to submit payment returns parameters. * @param request a submit payment return parameters payload diff --git a/src/main/java/com/truelayer/java/TrueLayerClient.java b/src/main/java/com/truelayer/java/TrueLayerClient.java index 890849fe..8d046b01 100644 --- a/src/main/java/com/truelayer/java/TrueLayerClient.java +++ b/src/main/java/com/truelayer/java/TrueLayerClient.java @@ -34,17 +34,25 @@ public class TrueLayerClient implements ITrueLayerClient { private ISignupPlusHandler signupPlusHandler; private ICommonHandler commonHandler; - private IHostedPaymentPageLinkBuilder hostedPaymentPageLinkBuilder; + /** + * @deprecated - use {@link #hostedPaymentPageLinkBuilder} instead. + */ + @Deprecated + private IHostedPaymentPageLinkBuilder hppLinkBuilder; + + private HostedPaymentPageLinkBuilder hostedPaymentPageLinkBuilder; public TrueLayerClient( IAuthenticationHandler authenticationHandler, IHostedPaymentPageLinkBuilder hostedPaymentPageLinkBuilder, ICommonHandler commonHandler, - ISignupPlusHandler signupPlusHandler) { + ISignupPlusHandler signupPlusHandler, + HostedPaymentPageLinkBuilder hppLinkBuilder) { this.authenticationHandler = authenticationHandler; - this.hostedPaymentPageLinkBuilder = hostedPaymentPageLinkBuilder; + this.hppLinkBuilder = hostedPaymentPageLinkBuilder; this.commonHandler = commonHandler; this.signupPlusHandler = signupPlusHandler; + this.hostedPaymentPageLinkBuilder = hppLinkBuilder; } /** @@ -124,7 +132,13 @@ public ISignupPlusHandler signupPlus() { * {@inheritDoc} */ @Override + @Deprecated public IHostedPaymentPageLinkBuilder hpp() { + return this.hppLinkBuilder; + } + + @Override + public HostedPaymentPageLinkBuilder hppLinkBuilder() { return this.hostedPaymentPageLinkBuilder; } diff --git a/src/main/java/com/truelayer/java/TrueLayerClientBuilder.java b/src/main/java/com/truelayer/java/TrueLayerClientBuilder.java index f493cb7b..71fa107b 100644 --- a/src/main/java/com/truelayer/java/TrueLayerClientBuilder.java +++ b/src/main/java/com/truelayer/java/TrueLayerClientBuilder.java @@ -9,7 +9,6 @@ import com.truelayer.java.commonapi.ICommonApi; import com.truelayer.java.commonapi.ICommonHandler; import com.truelayer.java.entities.RequestScopes; -import com.truelayer.java.hpp.HostedPaymentPageLinkBuilder; import com.truelayer.java.hpp.IHostedPaymentPageLinkBuilder; import com.truelayer.java.http.OkHttpClientFactory; import com.truelayer.java.http.RetrofitFactory; @@ -229,8 +228,9 @@ public TrueLayerClient build() { .httpClient(RetrofitFactory.build(authServerApiHttpClient, environment.getAuthApiUri())) .build(); - IHostedPaymentPageLinkBuilder hppLinkBuilder = - HostedPaymentPageLinkBuilder.New().uri(environment.getHppUri()).build(); + IHostedPaymentPageLinkBuilder hppLinkBuilder = com.truelayer.java.hpp.HostedPaymentPageLinkBuilder.New() + .uri(environment.getHppUri()) + .build(); // We're reusing a client with only User agent and Idempotency key interceptors and give it our base payment // endpoint @@ -254,7 +254,12 @@ public TrueLayerClient build() { // As per our RFC, if signing options is not configured we create a client which is able to interact // with the Authentication API only if (isEmpty(signingOptions)) { - return new TrueLayerClient(authenticationHandler, hppLinkBuilder, commonHandler, signupPlusHandler); + return new TrueLayerClient( + authenticationHandler, + hppLinkBuilder, + commonHandler, + signupPlusHandler, + new HostedPaymentPageLinkBuilder(environment)); } // The client used for PayIn endpoints has the authenticated as baseline, but adds the signature manager @@ -319,7 +324,8 @@ public TrueLayerClient build() { payoutsHandler, signupPlusHandler, commonHandler, - hppLinkBuilder); + hppLinkBuilder, + new HostedPaymentPageLinkBuilder(environment)); } private boolean customScopesPresent() { diff --git a/src/main/java/com/truelayer/java/entities/ResourceType.java b/src/main/java/com/truelayer/java/entities/ResourceType.java new file mode 100644 index 00000000..626017c8 --- /dev/null +++ b/src/main/java/com/truelayer/java/entities/ResourceType.java @@ -0,0 +1,15 @@ +package com.truelayer.java.entities; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public enum ResourceType { + PAYMENT("payments", "payment_id"), + MANDATE("mandates", "mandate_id"), + ; + + private final String hppLinkPath; + private final String hppLinkQueryParameter; +} diff --git a/src/main/java/com/truelayer/java/hpp/HostedPaymentPageLinkBuilder.java b/src/main/java/com/truelayer/java/hpp/HostedPaymentPageLinkBuilder.java index ac68f38c..f9966028 100644 --- a/src/main/java/com/truelayer/java/hpp/HostedPaymentPageLinkBuilder.java +++ b/src/main/java/com/truelayer/java/hpp/HostedPaymentPageLinkBuilder.java @@ -9,13 +9,13 @@ /** * {@inheritDoc} + * @deprecated - use {@link com.truelayer.java.HostedPaymentPageLinkBuilder} instead. */ @Builder(builderMethodName = "New") @Getter +@Deprecated public class HostedPaymentPageLinkBuilder implements IHostedPaymentPageLinkBuilder { - /** - * @param uri the hosted payment page URI - */ + private URI uri; @Override diff --git a/src/main/java/com/truelayer/java/hpp/IHostedPaymentPageLinkBuilder.java b/src/main/java/com/truelayer/java/hpp/IHostedPaymentPageLinkBuilder.java index d8c4f926..bf0d2dbe 100644 --- a/src/main/java/com/truelayer/java/hpp/IHostedPaymentPageLinkBuilder.java +++ b/src/main/java/com/truelayer/java/hpp/IHostedPaymentPageLinkBuilder.java @@ -4,8 +4,11 @@ /** * Exposes all the Hosted Payment Page related capabilities of the library. + * @deprecated - use {@link com.truelayer.java.HostedPaymentPageLinkBuilder} instead */ +@Deprecated public interface IHostedPaymentPageLinkBuilder { + /** * Builds a link to TrueLayer HPP with the given details * @param paymentId the id of the payment created with a previous call to the Create Payment endpoint diff --git a/src/test/java/com/truelayer/java/HostedPaymentPageLinkBuilderTests.java b/src/test/java/com/truelayer/java/HostedPaymentPageLinkBuilderTests.java new file mode 100644 index 00000000..09294663 --- /dev/null +++ b/src/test/java/com/truelayer/java/HostedPaymentPageLinkBuilderTests.java @@ -0,0 +1,123 @@ +package com.truelayer.java; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import com.truelayer.java.entities.ResourceType; +import java.net.URI; +import java.text.MessageFormat; +import java.util.UUID; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; + +public class HostedPaymentPageLinkBuilderTests { + + @Test + @DisplayName("It should throw an exception if resource_token is not set") + public void itShouldThrowExceptionIfResourceTokenIsNotSet() { + Environment environment = Environment.live(); + String resourceId = UUID.randomUUID().toString(); + + HostedPaymentPageLinkBuilder sut = new HostedPaymentPageLinkBuilder(environment); + + Throwable error = assertThrows( + TrueLayerException.class, () -> sut.resourceId(resourceId).build()); + assertEquals("resource_token must be set", error.getMessage()); + } + + @Test + @DisplayName("It should throw an exception if return_uri is not set") + public void itShouldThrowExceptionIfReturnUriIsNotSet() { + Environment environment = Environment.live(); + String resourceId = UUID.randomUUID().toString(); + String resourceToken = UUID.randomUUID().toString(); + + HostedPaymentPageLinkBuilder sut = new HostedPaymentPageLinkBuilder(environment); + + Throwable error = assertThrows( + TrueLayerException.class, + () -> sut.resourceId(resourceId).resourceToken(resourceToken).build()); + assertEquals("return_uri must be set", error.getMessage()); + } + + @Test + @DisplayName("It should yield a payments HPP link by default") + public void itShouldYieldAPaymentsHppLinkByDefault() { + Environment environment = Environment.live(); + String resourceId = UUID.randomUUID().toString(); + String resourceToken = UUID.randomUUID().toString(); + URI returnUri = URI.create("https://example.com"); + + URI uri = new HostedPaymentPageLinkBuilder(environment) + .resourceId(resourceId) + .resourceToken(resourceToken) + .returnUri(returnUri) + .build(); + + assertEquals( + MessageFormat.format( + "{0}/payments#payment_id={1}&resource_token={2}&return_uri={3}", + environment.getHppUri().toString(), resourceId, resourceToken, returnUri), + uri.toString()); + } + + @ParameterizedTest + @DisplayName("It should yield an HPP link for a resource of type") + @EnumSource(ResourceType.class) + public void itShouldYieldAnHppLink(ResourceType resourceType) { + Environment environment = Environment.live(); + String resourceId = UUID.randomUUID().toString(); + String resourceToken = UUID.randomUUID().toString(); + URI returnUri = URI.create("https://example.com"); + + URI uri = new HostedPaymentPageLinkBuilder(environment) + .resourceType(resourceType) + .resourceId(resourceId) + .resourceToken(resourceToken) + .returnUri(returnUri) + .build(); + + assertEquals( + MessageFormat.format( + "{0}/{1}#{2}={3}&resource_token={4}&return_uri={5}", + environment.getHppUri().toString(), + resourceType.getHppLinkPath(), + resourceType.getHppLinkQueryParameter(), + resourceId, + resourceToken, + returnUri), + uri.toString()); + } + + @Test + @DisplayName("It should yield an HPP link with extra optional parameters") + public void itShouldYieldAPaymentsHppLinkWithExtraOptionalParameters() { + Environment environment = Environment.live(); + String resourceId = UUID.randomUUID().toString(); + String resourceToken = UUID.randomUUID().toString(); + URI returnUri = URI.create("https://example.com"); + int maxWaitSeconds = 15; + boolean signup = true; + + URI uri = new HostedPaymentPageLinkBuilder(environment) + .resourceId(resourceId) + .resourceToken(resourceToken) + .returnUri(returnUri) + .maxWaitForResultSeconds(maxWaitSeconds) + .signup(signup) + .build(); + + assertEquals( + MessageFormat.format( + "{0}/payments#payment_id={1}&resource_token={2}&return_uri={3}&max_wait_for_result={4}&signup={5}", + environment.getHppUri().toString(), + resourceId, + resourceToken, + returnUri, + maxWaitSeconds, + signup), + uri.toString()); + } +} diff --git a/src/test/java/com/truelayer/java/TestUtils.java b/src/test/java/com/truelayer/java/TestUtils.java index 85d0ad11..1d1dac85 100644 --- a/src/test/java/com/truelayer/java/TestUtils.java +++ b/src/test/java/com/truelayer/java/TestUtils.java @@ -15,6 +15,7 @@ import com.truelayer.java.commonapi.entities.PaymentProviderReturnResource; import com.truelayer.java.commonapi.entities.SubmitPaymentsProviderReturnRequest; import com.truelayer.java.commonapi.entities.SubmitPaymentsProviderReturnResponse; +import com.truelayer.java.entities.ResourceType; import com.truelayer.java.http.entities.ApiResponse; import com.truelayer.java.http.entities.Headers; import com.truelayer.java.payments.entities.paymentdetail.PaymentDetail; @@ -271,7 +272,7 @@ public static void runAndAssertHeadlessResourceAuthorisation( // Mandates require some adjustments to the query string... // TODO: review if we want this to be a permanent solution - String query = headlessResourceAuthorization.resource == HeadlessResource.MANDATES + String query = headlessResourceAuthorization.getResourceType() == ResourceType.MANDATE ? responseUrl.getQuery().replaceFirst("mandate-", "") : responseUrl.getQuery(); @@ -284,8 +285,8 @@ public static void runAndAssertHeadlessResourceAuthorisation( .get(); assertNotError(submitPaymentReturnParametersResponse); - switch (headlessResourceAuthorization.resource) { - case PAYMENTS: + switch (headlessResourceAuthorization.getResourceType()) { + case PAYMENT: assertEquals( PaymentProviderReturnResource.Type.PAYMENT, submitPaymentReturnParametersResponse @@ -293,7 +294,7 @@ public static void runAndAssertHeadlessResourceAuthorisation( .getResource() .getType()); break; - case MANDATES: + case MANDATE: assertEquals( PaymentProviderReturnResource.Type.MANDATE, submitPaymentReturnParametersResponse @@ -327,11 +328,6 @@ public void onTimeout(TimeoutEvent timeoutEvent) { }); } - public enum HeadlessResource { - PAYMENTS, - MANDATES - } - @RequiredArgsConstructor @Getter public enum HeadlessResourceAction { @@ -346,22 +342,22 @@ public enum HeadlessResourceAction { @Getter public static class HeadlessResourceAuthorization { private final HeadlessResourceAction action; - private final HeadlessResource resource; + private final ResourceType resourceType; private String path; private String payload; @Builder public static HeadlessResourceAuthorization newHeadlessResourceAuthorization( - HeadlessResource resource, HeadlessResourceAction action) { + ResourceType resource, HeadlessResourceAction action) { HeadlessResourceAuthorization testHeadlessResourceAuthorization = new HeadlessResourceAuthorization(action, resource); testHeadlessResourceAuthorization.payload = String.format("{\"action\":\"%s\", \"redirect\": false}", action.getAction()); switch (resource) { - case PAYMENTS: + case PAYMENT: testHeadlessResourceAuthorization.path = "single-immediate-payments"; break; - case MANDATES: + case MANDATE: testHeadlessResourceAuthorization.path = "vrp-consents"; break; } diff --git a/src/test/java/com/truelayer/java/TrueLayerClientTests.java b/src/test/java/com/truelayer/java/TrueLayerClientTests.java index defe537e..1e7b0a9f 100644 --- a/src/test/java/com/truelayer/java/TrueLayerClientTests.java +++ b/src/test/java/com/truelayer/java/TrueLayerClientTests.java @@ -5,7 +5,6 @@ import static org.junit.jupiter.api.Assertions.*; import com.truelayer.java.auth.IAuthenticationHandler; -import com.truelayer.java.hpp.IHostedPaymentPageLinkBuilder; import com.truelayer.java.mandates.IMandatesHandler; import com.truelayer.java.merchantaccounts.IMerchantAccountsHandler; import com.truelayer.java.payments.IPaymentsHandler; @@ -83,20 +82,21 @@ public void itShouldBuildAnHppLinkBuilder() { ITrueLayerClient trueLayerClient = TrueLayerClient.New().clientCredentials(getClientCredentials()).build(); - IHostedPaymentPageLinkBuilder hppLinkBuilder = trueLayerClient.hpp(); + HostedPaymentPageLinkBuilder hppLinkBuilder = trueLayerClient.hppLinkBuilder(); assertNotNull(hppLinkBuilder); } @Test - @DisplayName("It should yield the same instance of the HPP link builder if hpp() is called multiple times") + @DisplayName( + "It should yield the same instance of the HPP link builder if hppLinkBuilder() is called multiple times") @SneakyThrows public void itShouldYieldTheSameHppLinkBuilder() { ITrueLayerClient trueLayerClient = TrueLayerClient.New().clientCredentials(getClientCredentials()).build(); - IHostedPaymentPageLinkBuilder hpp1 = trueLayerClient.hpp(); - IHostedPaymentPageLinkBuilder hpp2 = trueLayerClient.hpp(); + HostedPaymentPageLinkBuilder hpp1 = trueLayerClient.hppLinkBuilder(); + HostedPaymentPageLinkBuilder hpp2 = trueLayerClient.hppLinkBuilder(); assertSame(hpp1, hpp2); } diff --git a/src/test/java/com/truelayer/java/acceptance/MandatesAcceptanceTests.java b/src/test/java/com/truelayer/java/acceptance/MandatesAcceptanceTests.java index a361f112..c16d04a9 100644 --- a/src/test/java/com/truelayer/java/acceptance/MandatesAcceptanceTests.java +++ b/src/test/java/com/truelayer/java/acceptance/MandatesAcceptanceTests.java @@ -177,7 +177,7 @@ public void itShouldGetFunds(String mandatesScope, Mandate.Type mandateType) { redirectUri, HeadlessResourceAuthorization.builder() .action(HeadlessResourceAction.AUTHORISE) - .resource(HeadlessResource.MANDATES) + .resource(ResourceType.MANDATE) .build()); waitForMandateToBeAuthorized(tlClient, createMandateResponse.getData().getId()); @@ -240,7 +240,7 @@ public void itShouldGetConstraints(String mandatesScope, Mandate.Type mandateTyp redirectUri, HeadlessResourceAuthorization.builder() .action(HeadlessResourceAction.AUTHORISE) - .resource(HeadlessResource.MANDATES) + .resource(ResourceType.MANDATE) .build()); waitForMandateToBeAuthorized(tlClient, createMandateResponse.getData().getId()); @@ -293,7 +293,7 @@ public void itShouldCreateAndRevokeAMandate(String mandatesScope, Mandate.Type m redirectUri, HeadlessResourceAuthorization.builder() .action(HeadlessResourceAction.AUTHORISE) - .resource(HeadlessResource.MANDATES) + .resource(ResourceType.MANDATE) .build()); waitForMandateToBeAuthorized(tlClient, createMandateResponse.getData().getId()); @@ -354,7 +354,7 @@ public void itShouldCreateAPaymentOnMandate(String mandatesScope, Mandate.Type m redirectUri, HeadlessResourceAuthorization.builder() .action(HeadlessResourceAction.AUTHORISE) - .resource(HeadlessResource.MANDATES) + .resource(ResourceType.MANDATE) .build()); waitForMandateToBeAuthorized(tlClient, createMandateResponse.getData().getId()); diff --git a/src/test/java/com/truelayer/java/acceptance/PaymentsAcceptanceTests.java b/src/test/java/com/truelayer/java/acceptance/PaymentsAcceptanceTests.java index 1e07ea6a..8b9d9c99 100644 --- a/src/test/java/com/truelayer/java/acceptance/PaymentsAcceptanceTests.java +++ b/src/test/java/com/truelayer/java/acceptance/PaymentsAcceptanceTests.java @@ -46,7 +46,6 @@ import java.util.stream.Stream; import lombok.*; import okhttp3.*; -import org.awaitility.core.*; import org.junit.jupiter.api.*; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -259,11 +258,11 @@ public void shouldCreateAPaymentAndOpenItInHPP() { assertTrue(createPaymentResponse.getData().isAuthorizationRequired()); // open it in HPP - URI link = tlClient.hpp() - .getHostedPaymentPageLink( - createPaymentResponse.getData().getId(), - createPaymentResponse.getData().getResourceToken(), - URI.create(RETURN_URI)); + URI link = tlClient.hppLinkBuilder() + .resourceId(createPaymentResponse.getData().getId()) + .resourceToken(createPaymentResponse.getData().getResourceToken()) + .returnUri(URI.create(RETURN_URI)) + .build(); assertCanBrowseLink(link); } @@ -480,7 +479,7 @@ public void shouldCompleteAnAuthorizationFlowForAPaymentWithProviderReturn() { redirectUri, HeadlessResourceAuthorization.builder() .action(HeadlessResourceAction.EXECUTE) - .resource(HeadlessResource.PAYMENTS) + .resource(ResourceType.PAYMENT) .build()); } @@ -515,7 +514,7 @@ public void shouldReturnAttemptFailedPaymentStatusIfAuthorizationIsRejectedWithR redirectUri, HeadlessResourceAuthorization.builder() .action(HeadlessResourceAction.REJECT_AUTHORISATION) - .resource(HeadlessResource.PAYMENTS) + .resource(ResourceType.PAYMENT) .build()); // sometimes status change event has a bit of delay @@ -572,7 +571,7 @@ public void shouldCreateAPaymentRefundAndGetRefundDetails() { redirectUri, HeadlessResourceAuthorization.builder() .action(HeadlessResourceAction.EXECUTE) - .resource(HeadlessResource.PAYMENTS) + .resource(ResourceType.PAYMENT) .build()); waitForPaymentStatusUpdate(tlClient, paymentId, Status.SETTLED); diff --git a/src/test/java/com/truelayer/java/acceptance/SignupPlusAcceptanceTests.java b/src/test/java/com/truelayer/java/acceptance/SignupPlusAcceptanceTests.java index 9afeca63..648caff8 100644 --- a/src/test/java/com/truelayer/java/acceptance/SignupPlusAcceptanceTests.java +++ b/src/test/java/com/truelayer/java/acceptance/SignupPlusAcceptanceTests.java @@ -120,7 +120,7 @@ private String createAndAuthorizePayment(String providerId, CurrencyCode currenc redirectUri, TestUtils.HeadlessResourceAuthorization.builder() .action(TestUtils.HeadlessResourceAction.EXECUTE) - .resource(TestUtils.HeadlessResource.PAYMENTS) + .resource(ResourceType.PAYMENT) .build()); return createPaymentResponse.getData().getId(); diff --git a/src/test/java/com/truelayer/java/hpp/HostedPaymentPageLinkBuilderTests.java b/src/test/java/com/truelayer/java/hpp/HostedPaymentPageLinkBuilderTests.java index f528aff0..97287dc5 100644 --- a/src/test/java/com/truelayer/java/hpp/HostedPaymentPageLinkBuilderTests.java +++ b/src/test/java/com/truelayer/java/hpp/HostedPaymentPageLinkBuilderTests.java @@ -1,7 +1,6 @@ package com.truelayer.java.hpp; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.*; import com.truelayer.java.TestUtils; import com.truelayer.java.TrueLayerException; @@ -9,6 +8,10 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +/** + * To be removed at the next major release + */ +@Deprecated class HostedPaymentPageLinkBuilderTests { public static final String A_RETURN_URI = "https://a-redirect-uri.com";