diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d998205..c7d87a1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## unreleased +* Add support to search by 'venmoUsername' in advanced search for transactions + ## 3.48.0 * Add `acceptPartialAuthorization` in `TransactionRequest` and `partiallyAuthorized` in `Transaction` * Deprecate transactions for `visa_checkout_card` and maintain search functionality diff --git a/src/main/java/com/braintreegateway/TransactionSearchRequest.java b/src/main/java/com/braintreegateway/TransactionSearchRequest.java index f8561821..e4e884d8 100644 --- a/src/main/java/com/braintreegateway/TransactionSearchRequest.java +++ b/src/main/java/com/braintreegateway/TransactionSearchRequest.java @@ -173,6 +173,10 @@ public TextNode shippingStreetAddress() { return textNode("shipping_street_address"); } + public TextNode venmoUsername() { + return textNode("venmo_username"); + } + public MultipleValueNode paymentInstrumentType() { return multiTypeNode("payment_instrument_type"); } diff --git a/src/test/java/com/braintreegateway/integrationtest/TransactionIT.java b/src/test/java/com/braintreegateway/integrationtest/TransactionIT.java index 582b1b66..f0eb0700 100644 --- a/src/test/java/com/braintreegateway/integrationtest/TransactionIT.java +++ b/src/test/java/com/braintreegateway/integrationtest/TransactionIT.java @@ -5354,6 +5354,36 @@ public void searchOnAllTextFields() { assertEquals(transaction.getId(), collection.getFirst().getId()); } + @Test + public void searchOnVenmoUsername() { + TransactionRequest request = new TransactionRequest() + .merchantAccountId(FAKE_VENMO_ACCOUNT_MERCHANT_ACCOUNT_ID) + .amount(SandboxValues.TransactionAmount.AUTHORIZE.amount) + .paymentMethodNonce(Nonce.VenmoAccount); + + Result result = gateway.transaction().sale(request); + assertTrue(result.isSuccess()); + + Transaction transaction = result.getTarget(); + String venmoUsername = transaction.getVenmoAccountDetails().getUsername(); + assertNotNull(venmoUsername); + + TransactionSearchRequest matchingSearchRequest = new TransactionSearchRequest() + .id().is(transaction.getId()) + .venmoUsername().is(venmoUsername); + + ResourceCollection matchingCollection = gateway.transaction().search(matchingSearchRequest); + assertEquals(1, matchingCollection.getMaximumSize()); + assertEquals(transaction.getId(), matchingCollection.getFirst().getId()); + + TransactionSearchRequest nonMatchingSearchRequest = new TransactionSearchRequest() + .id().is(transaction.getId()) + .venmoUsername().is(venmoUsername + "-does-not-match"); + + ResourceCollection nonMatchingCollection = gateway.transaction().search(nonMatchingSearchRequest); + assertEquals(0, nonMatchingCollection.getMaximumSize()); + } + @Test public void searchWithCreditCardNumberStartsWithEndsWith() { String creditCardToken = String.valueOf(new Random().nextInt());