diff --git a/src/main/java/com/mangopay/core/APIs/ApiBase.java b/src/main/java/com/mangopay/core/APIs/ApiBase.java index a864e95c..e2c8cf96 100644 --- a/src/main/java/com/mangopay/core/APIs/ApiBase.java +++ b/src/main/java/com/mangopay/core/APIs/ApiBase.java @@ -230,7 +230,7 @@ protected MangoPayApi getRoot() { 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()}); - + put("create_quoted_conversion", new String[]{"/conversions/quoted-conversion", RequestType.POST.toString()}); }}; /** diff --git a/src/main/java/com/mangopay/core/APIs/ConversionsApi.java b/src/main/java/com/mangopay/core/APIs/ConversionsApi.java index 1ff68622..98fc9aac 100644 --- a/src/main/java/com/mangopay/core/APIs/ConversionsApi.java +++ b/src/main/java/com/mangopay/core/APIs/ConversionsApi.java @@ -3,6 +3,7 @@ import com.mangopay.entities.ConversionQuote; import com.mangopay.entities.ConversionRate; import com.mangopay.entities.InstantConversion; +import com.mangopay.entities.QuotedConversion; public interface ConversionsApi { @@ -45,4 +46,12 @@ public interface ConversionsApi { * @return Quote object returned from API */ ConversionQuote getConversionQuote(String quoteId) throws Exception; + + + /** + * This call triggers a conversion, at the rate guaranteed by its quote, of the debited funds to the credited wallet. + * + * @return QuotedConversion + */ + QuotedConversion createQuotedConversion(QuotedConversion quotedConversion, String idempotencyKey) throws Exception; } diff --git a/src/main/java/com/mangopay/core/APIs/implementation/ConversionsApiImpl.java b/src/main/java/com/mangopay/core/APIs/implementation/ConversionsApiImpl.java index ab77818c..1cfb036d 100644 --- a/src/main/java/com/mangopay/core/APIs/implementation/ConversionsApiImpl.java +++ b/src/main/java/com/mangopay/core/APIs/implementation/ConversionsApiImpl.java @@ -6,6 +6,7 @@ import com.mangopay.entities.ConversionQuote; import com.mangopay.entities.ConversionRate; import com.mangopay.entities.InstantConversion; +import com.mangopay.entities.QuotedConversion; public class ConversionsApiImpl extends ApiBase implements ConversionsApi { @@ -42,4 +43,9 @@ public ConversionQuote createConversionQuote(ConversionQuote conversionQuote, St public ConversionQuote getConversionQuote(String quoteId) throws Exception { return this.getObject(ConversionQuote.class, "get_conversion_quote", quoteId); } + + @Override + public QuotedConversion createQuotedConversion(QuotedConversion quotedConversion, String idempotencyKey) throws Exception { + return this.createObject(QuotedConversion.class, idempotencyKey, "create_quoted_conversion", quotedConversion); + } } diff --git a/src/main/java/com/mangopay/entities/QuotedConversion.java b/src/main/java/com/mangopay/entities/QuotedConversion.java new file mode 100644 index 00000000..3e8bf0c1 --- /dev/null +++ b/src/main/java/com/mangopay/entities/QuotedConversion.java @@ -0,0 +1,53 @@ +package com.mangopay.entities; + +import com.google.gson.annotations.SerializedName; + +/** + * A conversion, at the rate guaranteed by its quote, of the debited funds to the credited wallet. + */ +public class QuotedConversion extends Transaction { + + @SerializedName("QuoteId") + private String quoteId; + + @SerializedName("ConversionRateResponse") + private ConversionRate conversionRateResponse; + + @SerializedName("CreditedWalletId") + private String creditedWalletId; + + @SerializedName("DebitedWalletId") + private String debitedWalletId; + + public String getQuoteId() { + return quoteId; + } + + public void setQuoteId(String quoteId) { + this.quoteId = quoteId; + } + + public ConversionRate getConversionRateResponse() { + return conversionRateResponse; + } + + public void setConversionRateResponse(ConversionRate conversionRateResponse) { + this.conversionRateResponse = conversionRateResponse; + } + + public String getCreditedWalletId() { + return creditedWalletId; + } + + public void setCreditedWalletId(String creditedWalletId) { + this.creditedWalletId = creditedWalletId; + } + + public String getDebitedWalletId() { + return debitedWalletId; + } + + public void setDebitedWalletId(String debitedWalletId) { + this.debitedWalletId = debitedWalletId; + } +} diff --git a/src/test/java/com/mangopay/core/ConversionsImplTest.java b/src/test/java/com/mangopay/core/ConversionsImplTest.java index a48dcde2..3e28477c 100644 --- a/src/test/java/com/mangopay/core/ConversionsImplTest.java +++ b/src/test/java/com/mangopay/core/ConversionsImplTest.java @@ -3,11 +3,11 @@ 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 com.mangopay.entities.*; import org.junit.Test; +import java.util.ArrayList; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -69,16 +69,42 @@ public void getConversionQuoteTest() throws Exception { assertEquals("ACTIVE", conversionQuote.getStatus()); } + @Test + public void createQuotedConversion() throws Exception { + final UserNatural user = getJohn(); + + Wallet creditedWallet = new Wallet(); + creditedWallet.setOwners(new ArrayList()); + creditedWallet.getOwners().add(user.getId()); + creditedWallet.setCurrency(CurrencyIso.GBP); + creditedWallet.setDescription("WALLET IN EUR WITH MONEY"); + + creditedWallet = this.api.getWalletApi().create(creditedWallet); + + Wallet debitedWallet = getJohnsWalletWithMoney(); + ConversionQuote quote = createConversionQuote(); + + QuotedConversion quotedConversion = new QuotedConversion(); + quotedConversion.setQuoteId(quote.getId()); + quotedConversion.setAuthorId(debitedWallet.getOwners().get(0)); + quotedConversion.setCreditedWalletId(creditedWallet.getId()); + quotedConversion.setDebitedWalletId(debitedWallet.getId()); + + quotedConversion = this.api.getConversionsApi().createQuotedConversion(quotedConversion, null); + + assertNotNull(quotedConversion); + } + private ConversionQuote createConversionQuote() throws Exception { ConversionQuote conversionQuote = new ConversionQuote(); Money creditedFunds = new Money(); - creditedFunds.setCurrency(CurrencyIso.USD); + creditedFunds.setCurrency(CurrencyIso.GBP); conversionQuote.setCreditedFunds(creditedFunds); Money debitedFunds = new Money(); - debitedFunds.setCurrency(CurrencyIso.GBP); - debitedFunds.setAmount(100); + debitedFunds.setCurrency(CurrencyIso.EUR); + debitedFunds.setAmount(50); conversionQuote.setDebitedFunds(debitedFunds); conversionQuote.setDuration(90); @@ -86,4 +112,6 @@ private ConversionQuote createConversionQuote() throws Exception { return this.api.getConversionsApi().createConversionQuote(conversionQuote, null); } + + }