From c5a17fa2c279835c43c44291a2d27d5f2f427ec9 Mon Sep 17 00:00:00 2001 From: Mihai Moiseanu Date: Thu, 22 Feb 2024 09:11:42 +0200 Subject: [PATCH] added quote endpoints rename InstantConversion to Conversions --- src/main/java/com/mangopay/MangoPayApi.java | 12 +-- .../java/com/mangopay/core/APIs/ApiBase.java | 9 +- ...ConversionApi.java => ConversionsApi.java} | 18 +++- ...onApiImpl.java => ConversionsApiImpl.java} | 19 +++- .../mangopay/entities/ConversionQuote.java | 69 ++++++++++++++ src/test/java/com/mangopay/core/BaseTest.java | 6 +- .../mangopay/core/ConversionsImplTest.java | 89 +++++++++++++++++++ .../core/InstantConversionImplTest.java | 44 --------- 8 files changed, 204 insertions(+), 62 deletions(-) rename src/main/java/com/mangopay/core/APIs/{InstantConversionApi.java => ConversionsApi.java} (67%) rename src/main/java/com/mangopay/core/APIs/implementation/{InstantConversionApiImpl.java => ConversionsApiImpl.java} (60%) create mode 100644 src/main/java/com/mangopay/entities/ConversionQuote.java create mode 100644 src/test/java/com/mangopay/core/ConversionsImplTest.java delete mode 100644 src/test/java/com/mangopay/core/InstantConversionImplTest.java diff --git a/src/main/java/com/mangopay/MangoPayApi.java b/src/main/java/com/mangopay/MangoPayApi.java index 5164ff9b..7c1553ad 100644 --- a/src/main/java/com/mangopay/MangoPayApi.java +++ b/src/main/java/com/mangopay/MangoPayApi.java @@ -52,7 +52,7 @@ public MangoPayApi() { setSettlementApi(new SettlementApiImpl(this)); setRegulatoryApi(new RegulatoryApiImpl(this)); setDepositApi(new DepositApiImpl(this)); - setInstantConversionApi(new InstantConversionApiImpl(this)); + setConversionsApi(new ConversionsApiImpl(this)); setGson(gsonBuilder.create()); } @@ -206,7 +206,7 @@ public MangoPayApi() { /** * Provides Instant conversion methods */ - private InstantConversionApi instantConversionApi; + private ConversionsApi conversionApi; private Gson gson; @@ -447,11 +447,11 @@ public MangoPayApi setDepositApi(DepositApi depositApi) { return this; } - public InstantConversionApi getInstantConversionApi() { - return instantConversionApi; + public ConversionsApi getConversionsApi() { + return conversionApi; } - public void setInstantConversionApi(InstantConversionApi instantConversionApi) { - this.instantConversionApi = instantConversionApi; + public void setConversionsApi(ConversionsApi conversionApi) { + this.conversionApi = conversionApi; } } diff --git a/src/main/java/com/mangopay/core/APIs/ApiBase.java b/src/main/java/com/mangopay/core/APIs/ApiBase.java index 937495df..a864e95c 100644 --- a/src/main/java/com/mangopay/core/APIs/ApiBase.java +++ b/src/main/java/com/mangopay/core/APIs/ApiBase.java @@ -228,6 +228,8 @@ protected MangoPayApi getRoot() { put("get_conversion_rate", new String[]{"/conversion/rate/%s/%s", RequestType.GET.toString()}); put("create_instant_conversion", new String[]{"/instant-conversion", RequestType.POST.toString()}); put("get_instant_conversion", new String[]{"/instant-conversion/%s", RequestType.GET.toString()}); + put("create_conversion_quote", new String[]{"/conversions/quote", RequestType.POST.toString()}); + put("get_conversion_quote", new String[]{"/conversions/quote/%s", RequestType.GET.toString()}); }}; @@ -329,11 +331,10 @@ protected T createObject(Class classOfT, Strin } /** - * - * @param classOfT Type on behalf of which the request is being called. + * @param classOfT Type on behalf of which the request is being called. * @param methodKey Relevant method key. - * @param args Arguments that will be set on the method - * @param Type on behalf of which the request is being called. + * @param args Arguments that will be set on the method + * @param Type on behalf of which the request is being called. * @return The Dto instance returned from API. * @throws Exception */ diff --git a/src/main/java/com/mangopay/core/APIs/InstantConversionApi.java b/src/main/java/com/mangopay/core/APIs/ConversionsApi.java similarity index 67% rename from src/main/java/com/mangopay/core/APIs/InstantConversionApi.java rename to src/main/java/com/mangopay/core/APIs/ConversionsApi.java index 9d7a6cba..1ff68622 100644 --- a/src/main/java/com/mangopay/core/APIs/InstantConversionApi.java +++ b/src/main/java/com/mangopay/core/APIs/ConversionsApi.java @@ -1,9 +1,10 @@ package com.mangopay.core.APIs; +import com.mangopay.entities.ConversionQuote; import com.mangopay.entities.ConversionRate; import com.mangopay.entities.InstantConversion; -public interface InstantConversionApi { +public interface ConversionsApi { /** * This endpoint allows the platform to get a real @@ -29,4 +30,19 @@ public interface InstantConversionApi { * @return InstantConversion object returned from API */ InstantConversion getInstantConversion(String id) throws Exception; + + /** + * This call guarantees a conversion rate to let you Create a Quoted Conversion. + * + * @return Quote object returned from API + */ + ConversionQuote createConversionQuote(ConversionQuote conversionQuote, String idempotencyKey) throws Exception; + + /** + * This endpoint allows the platform to get the details of a quote + * + * @param quoteId The unique identifier of the quote + * @return Quote object returned from API + */ + ConversionQuote getConversionQuote(String quoteId) throws Exception; } diff --git a/src/main/java/com/mangopay/core/APIs/implementation/InstantConversionApiImpl.java b/src/main/java/com/mangopay/core/APIs/implementation/ConversionsApiImpl.java similarity index 60% rename from src/main/java/com/mangopay/core/APIs/implementation/InstantConversionApiImpl.java rename to src/main/java/com/mangopay/core/APIs/implementation/ConversionsApiImpl.java index 8770cde7..ab77818c 100644 --- a/src/main/java/com/mangopay/core/APIs/implementation/InstantConversionApiImpl.java +++ b/src/main/java/com/mangopay/core/APIs/implementation/ConversionsApiImpl.java @@ -2,18 +2,19 @@ import com.mangopay.MangoPayApi; import com.mangopay.core.APIs.ApiBase; -import com.mangopay.core.APIs.InstantConversionApi; +import com.mangopay.core.APIs.ConversionsApi; +import com.mangopay.entities.ConversionQuote; import com.mangopay.entities.ConversionRate; import com.mangopay.entities.InstantConversion; -public class InstantConversionApiImpl extends ApiBase implements InstantConversionApi { +public class ConversionsApiImpl extends ApiBase implements ConversionsApi { /** * Creates new API instance. * * @param root Root/parent instance that holds the OAuthToken and Configuration instance. */ - public InstantConversionApiImpl(MangoPayApi root) { + public ConversionsApiImpl(MangoPayApi root) { super(root); } @@ -29,6 +30,16 @@ public InstantConversion createInstantConversion(InstantConversion conversion, S @Override public InstantConversion getInstantConversion(String id) throws Exception { - return this.getObject(InstantConversion.class, "get_instant_conversion",id); + return this.getObject(InstantConversion.class, "get_instant_conversion", id); + } + + @Override + public ConversionQuote createConversionQuote(ConversionQuote conversionQuote, String idempotencyKey) throws Exception { + return this.createObject(ConversionQuote.class, idempotencyKey, "create_conversion_quote", conversionQuote); + } + + @Override + public ConversionQuote getConversionQuote(String quoteId) throws Exception { + return this.getObject(ConversionQuote.class, "get_conversion_quote", quoteId); } } diff --git a/src/main/java/com/mangopay/entities/ConversionQuote.java b/src/main/java/com/mangopay/entities/ConversionQuote.java new file mode 100644 index 00000000..67c981a2 --- /dev/null +++ b/src/main/java/com/mangopay/entities/ConversionQuote.java @@ -0,0 +1,69 @@ +package com.mangopay.entities; + +import com.google.gson.annotations.SerializedName; +import com.mangopay.core.EntityBase; +import com.mangopay.core.Money; + +public class ConversionQuote extends EntityBase { + + @SerializedName("ExpirationDate") + private int expirationDate; + @SerializedName("Status") + private String status; + @SerializedName("Duration") + private int duration; + @SerializedName("DebitedFunds") + private Money debitedFunds; + @SerializedName("CreditedFunds") + private Money creditedFunds; + @SerializedName("ConversionRateResponse") + private ConversionRate conversionRateResponse; + + public int getExpirationDate() { + return expirationDate; + } + + public void setExpirationDate(int expirationDate) { + this.expirationDate = expirationDate; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + public Money getDebitedFunds() { + return debitedFunds; + } + + public void setDebitedFunds(Money debitedFunds) { + this.debitedFunds = debitedFunds; + } + + public Money getCreditedFunds() { + return creditedFunds; + } + + public void setCreditedFunds(Money creditedFunds) { + this.creditedFunds = creditedFunds; + } + + public ConversionRate getConversionRateResponse() { + return conversionRateResponse; + } + + public void setConversionRateResponse(ConversionRate conversionRateResponse) { + this.conversionRateResponse = conversionRateResponse; + } +} diff --git a/src/test/java/com/mangopay/core/BaseTest.java b/src/test/java/com/mangopay/core/BaseTest.java index 2c2efa20..5f7f342a 100644 --- a/src/test/java/com/mangopay/core/BaseTest.java +++ b/src/test/java/com/mangopay/core/BaseTest.java @@ -1602,7 +1602,7 @@ protected void assertEqualInputProps(T entity1, T entity2) throws Exception } protected ConversionRate getConversionRate() throws Exception { - return this.api.getInstantConversionApi().getConversionRate("EUR", "GBP"); + return this.api.getConversionsApi().getConversionRate("EUR", "GBP"); } protected InstantConversion createInstantConversion() throws Exception { @@ -1633,12 +1633,12 @@ protected InstantConversion createInstantConversion() throws Exception { instantConversion.setDebitedFunds(debitedFunds); instantConversion.setTag("create instant conversion"); - return this.api.getInstantConversionApi().createInstantConversion(instantConversion, null); + return this.api.getConversionsApi().createInstantConversion(instantConversion, null); } protected InstantConversion getInstantConversion() throws Exception { InstantConversion createdInstantConversion = createInstantConversion(); - return api.getInstantConversionApi().getInstantConversion(createdInstantConversion.getId()); + return api.getConversionsApi().getInstantConversion(createdInstantConversion.getId()); } } diff --git a/src/test/java/com/mangopay/core/ConversionsImplTest.java b/src/test/java/com/mangopay/core/ConversionsImplTest.java new file mode 100644 index 00000000..a48dcde2 --- /dev/null +++ b/src/test/java/com/mangopay/core/ConversionsImplTest.java @@ -0,0 +1,89 @@ +package com.mangopay.core; + +import com.mangopay.core.enumerations.CurrencyIso; +import com.mangopay.core.enumerations.TransactionStatus; +import com.mangopay.core.enumerations.TransactionType; +import com.mangopay.entities.ConversionQuote; +import com.mangopay.entities.ConversionRate; +import com.mangopay.entities.InstantConversion; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class ConversionsImplTest extends BaseTest { + + @Test + public void getConversionRateTest() throws Exception { + ConversionRate conversionRate = getConversionRate(); + + assertNotNull(conversionRate); + assertNotNull(conversionRate.clientRate); + assertNotNull(conversionRate.marketRate); + } + + @Test + public void createInstantConversionTest() throws Exception { + InstantConversion instantConversion = createInstantConversion(); + + assertNotNull(instantConversion); + assertNotNull(instantConversion.creditedFunds.getAmount()); + assertNotNull(instantConversion.debitedFunds.getAmount()); + assertEquals(instantConversion.status, TransactionStatus.SUCCEEDED); + assertEquals(instantConversion.type, TransactionType.CONVERSION); + } + + @Test + public void getInstantConversionTest() throws Exception { + InstantConversion instantConversion = getInstantConversion(); + + assertNotNull(instantConversion); + assertNotNull(instantConversion.creditedFunds.getAmount()); + assertNotNull(instantConversion.debitedFunds.getAmount()); + assertEquals(instantConversion.status, TransactionStatus.SUCCEEDED); + assertEquals(instantConversion.type, TransactionType.CONVERSION); + + } + + @Test + public void createConversionQuoteTest() throws Exception { + ConversionQuote conversionQuote = createConversionQuote(); + + assertNotNull(conversionQuote); + assertNotNull(conversionQuote.getDebitedFunds()); + assertNotNull(conversionQuote.getCreditedFunds()); + assertNotNull(conversionQuote.getConversionRateResponse()); + assertEquals("ACTIVE", conversionQuote.getStatus()); + + } + + @Test + public void getConversionQuoteTest() throws Exception { + ConversionQuote createdConversionQuote = createConversionQuote(); + ConversionQuote conversionQuote = this.api.getConversionsApi().getConversionQuote(createdConversionQuote.getId()); + + assertNotNull(conversionQuote); + assertNotNull(conversionQuote.getDebitedFunds()); + assertNotNull(conversionQuote.getCreditedFunds()); + assertNotNull(conversionQuote.getConversionRateResponse()); + assertEquals("ACTIVE", conversionQuote.getStatus()); + } + + private ConversionQuote createConversionQuote() throws Exception { + ConversionQuote conversionQuote = new ConversionQuote(); + + Money creditedFunds = new Money(); + creditedFunds.setCurrency(CurrencyIso.USD); + conversionQuote.setCreditedFunds(creditedFunds); + + Money debitedFunds = new Money(); + debitedFunds.setCurrency(CurrencyIso.GBP); + debitedFunds.setAmount(100); + conversionQuote.setDebitedFunds(debitedFunds); + + conversionQuote.setDuration(90); + conversionQuote.setTag("Created using the Mangopay PHP SDK"); + + return this.api.getConversionsApi().createConversionQuote(conversionQuote, null); + } +} diff --git a/src/test/java/com/mangopay/core/InstantConversionImplTest.java b/src/test/java/com/mangopay/core/InstantConversionImplTest.java deleted file mode 100644 index 69e78408..00000000 --- a/src/test/java/com/mangopay/core/InstantConversionImplTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.mangopay.core; - -import com.mangopay.core.enumerations.TransactionStatus; -import com.mangopay.core.enumerations.TransactionType; -import com.mangopay.entities.ConversionRate; -import com.mangopay.entities.InstantConversion; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class InstantConversionImplTest extends BaseTest { - - @Test - public void getConversionRateTest() throws Exception { - ConversionRate conversionRate = getConversionRate(); - - assertNotNull(conversionRate); - assertNotNull(conversionRate.clientRate); - assertNotNull(conversionRate.marketRate); - } - - @Test - public void createInstantConversionTest() throws Exception { - InstantConversion instantConversion = createInstantConversion(); - - assertNotNull(instantConversion); - assertNotNull(instantConversion.creditedFunds.getAmount()); - assertNotNull(instantConversion.debitedFunds.getAmount()); - assertEquals(instantConversion.status, TransactionStatus.SUCCEEDED); - assertEquals(instantConversion.type, TransactionType.CONVERSION); - } - - @Test - public void getInstantConversionTest() throws Exception { - InstantConversion instantConversion = getInstantConversion(); - - assertNotNull(instantConversion); - assertNotNull(instantConversion.creditedFunds.getAmount()); - assertNotNull(instantConversion.debitedFunds.getAmount()); - assertEquals(instantConversion.status, TransactionStatus.SUCCEEDED); - assertEquals(instantConversion.type, TransactionType.CONVERSION); - - } -}