This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 62a3230 CAMEL-12138: camel-braintree - expose dispute and documentUpload APIs 62a3230 is described below commit 62a3230687c24d9e525b11db8c221d8c6c50f37a Author: Russ Johnson <rusjohn...@magento.com> AuthorDate: Thu Jun 21 13:04:25 2018 +0200 CAMEL-12138: camel-braintree - expose dispute and documentUpload APIs --- components/camel-braintree/pom.xml | 10 + .../src/main/docs/braintree-component.adoc | 86 +++++ .../braintree/DisputeGatewayIntegrationTest.java | 349 +++++++++++++++++++++ .../DocumentUploadGatewayIntegrationTest.java | 70 +++++ .../src/test/resources/pdf-sample.pdf | Bin 0 -> 7945 bytes 5 files changed, 515 insertions(+) diff --git a/components/camel-braintree/pom.xml b/components/camel-braintree/pom.xml index 6f193b7..f1d9e3e 100644 --- a/components/camel-braintree/pom.xml +++ b/components/camel-braintree/pom.xml @@ -160,6 +160,16 @@ <fromJavadoc/> </api> <api> + <apiName>dispute</apiName> + <proxyClass>com.braintreegateway.DisputeGateway</proxyClass> + <fromJavadoc/> + </api> + <api> + <apiName>documentUpload</apiName> + <proxyClass>com.braintreegateway.DocumentUploadGateway</proxyClass> + <fromJavadoc/> + </api> + <api> <apiName>merchantAccount</apiName> <proxyClass>com.braintreegateway.MerchantAccountGateway</proxyClass> <fromJavadoc/> diff --git a/components/camel-braintree/src/main/docs/braintree-component.adoc b/components/camel-braintree/src/main/docs/braintree-component.adoc index 50bfde3..202274a 100644 --- a/components/camel-braintree/src/main/docs/braintree-component.adoc +++ b/components/camel-braintree/src/main/docs/braintree-component.adoc @@ -115,6 +115,8 @@ Endpoint prefix can be one of: * creditCardverification * customer * discount +* dispute +* documentUpload * merchantAccount * paymentmethod * paymentmethodNonce @@ -357,6 +359,90 @@ braintree://discount/endpoint + +#### Endpoint prefix _dispute_ + +The following endpoints can be invoked with the prefix *dispute* as +follows: + +[source,java] +---------------------------------------------- +braintree://dispute/endpoint?[options] +---------------------------------------------- + +[cols="<,<,<,<",options="header",] +|======================================================================= +|Endpoint |Shorthand Alias |Options |Result Body Type +|accept | |id +|com.braintreegateway.Result + +|addFileEvidence | |disputeId, documentId +|com.braintreegateway.Result<DisputeEvidence> + +|addFileEvidence | |disputeId, fileEvidenceRequest +|com.braintreegateway.Result<DisputeEvidence> + +|addTextEvidence | |disputeId, content +|com.braintreegateway.Result<DisputeEvidence> + +|addTextEvidence | |disputeId, textEvidenceRequest +|com.braintreegateway.Result<DisputeEvidence> + +|finalize | |id +|com.braintreegateway.Result + +|find | |id +|com.braintreegateway.Dispute + +|removeEvidence | |id +|com.braintreegateway.Result + +|search | | disputeSearchRequest +|com.braintreegateway.PaginatedCollection<com.braintreegateway.Dispute> +|======================================================================= + +[[Braintree-URIOptionsfordispute]] +URI Options for _dispute_ + +[cols="<,<",options="header",] +|========================================================== +|Name |Type +|id |String +|disputeId |String +|documentId |String +|fileEvidenceRequest |com.braintreegateway.FileEvidenceRequest +|content |String | +|textEvidenceRequest |com.braintreegateway.TextEvidenceRequest +|disputeSearchRequest |com.braintreegateway.DisputeSearchRequest +|========================================================== + + +#### Endpoint prefix _documentUpload_ + +The following endpoints can be invoked with the prefix *documentUpload* as +follows: + +[source,java] +---------------------------------------------- +braintree://documentUpload/endpoint?[options] +---------------------------------------------- + +[cols="<,<,<,<",options="header",] +|======================================================================= +|Endpoint |Shorthand Alias |Options |Result Body Type +|create | |request +|com.braintreegateway.Result<com.braintreegateway.DocumentUpload> +|======================================================================= + +[[Braintree-URIOptionsfordocumentUpload]] +URI Options for _documentUpload_ + +[cols="<,<",options="header",] +|========================================================== +|Name |Type +|request |com.braintreegateway.DocumentUploadRequest +|========================================================== + + #### Endpoint prefix _merchantAccount_ The following endpoints can be invoked with the diff --git a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/DisputeGatewayIntegrationTest.java b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/DisputeGatewayIntegrationTest.java new file mode 100644 index 0000000..bc867e6 --- /dev/null +++ b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/DisputeGatewayIntegrationTest.java @@ -0,0 +1,349 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.braintree; + +import java.io.File; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.braintreegateway.BraintreeGateway; +import com.braintreegateway.Dispute; +import com.braintreegateway.DisputeEvidence; +import com.braintreegateway.DisputeSearchRequest; +import com.braintreegateway.DocumentUpload; +import com.braintreegateway.DocumentUploadRequest; +import com.braintreegateway.FileEvidenceRequest; +import com.braintreegateway.PaginatedCollection; +import com.braintreegateway.Result; +import com.braintreegateway.TextEvidenceRequest; +import com.braintreegateway.Transaction; +import com.braintreegateway.TransactionRequest; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.braintree.internal.BraintreeApiCollection; +import org.apache.camel.component.braintree.internal.DisputeGatewayApiMethod; +import org.apache.camel.component.braintree.internal.DocumentUploadGatewayApiMethod; +import org.apache.camel.component.braintree.internal.TransactionGatewayApiMethod; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DisputeGatewayIntegrationTest extends AbstractBraintreeTestSupport { + + private static final Logger LOG = LoggerFactory.getLogger(DisputeGatewayIntegrationTest.class); + private static final String PATH_PREFIX = BraintreeApiCollection.getCollection().getApiName(DisputeGatewayApiMethod.class).getName(); + private static final String TRANSACTION_PATH_PREFIX = BraintreeApiCollection.getCollection().getApiName(TransactionGatewayApiMethod.class).getName(); + private static final String DOCUMENT_UPLOAD_PATH_PREFIX = BraintreeApiCollection.getCollection().getApiName(DocumentUploadGatewayApiMethod.class).getName(); + + private BraintreeGateway gateway; + + @Override + protected void doPostSetup() throws Exception { + this.gateway = getGateway(); + } + + @Test + public void testAccept() throws Exception { + Dispute createdDispute = createDispute(); + assertEquals(Dispute.Status.OPEN, createdDispute.getStatus()); + + final Result result = requestBody( + "direct://ACCEPT", + createdDispute.getId() + ); + assertNotNull("accept result", result); + assertTrue("accept result success", result.isSuccess()); + + final Dispute finalizedDispute = requestBody( + "direct://FIND", + createdDispute.getId() + ); + assertNotNull("accepted dispute", finalizedDispute); + assertEquals(Dispute.Status.ACCEPTED, finalizedDispute.getStatus()); + } + + @Test + public void testAddFileEvidence() throws Exception { + Dispute createdDispute = createDispute(); + assertEquals(Dispute.Status.OPEN, createdDispute.getStatus()); + DocumentUpload uploadedDocument = uploadDocument(); + + final Map<String, Object> headers = new HashMap<String, Object>(); + headers.put("CamelBraintree.disputeId", createdDispute.getId()); + headers.put("CamelBraintree.documentId", uploadedDocument.getId()); + + final Result<DisputeEvidence> result = requestBodyAndHeaders( + "direct://ADDFILEEVIDENCE", + null, + headers + ); + + assertNotNull("addFileEvidence result", result); + assertTrue("addFileEvidence result success", result.isSuccess()); + } + + @Test + public void testAddFileEvidenceOne() throws Exception { + Dispute createdDispute = createDispute(); + assertEquals(Dispute.Status.OPEN, createdDispute.getStatus()); + DocumentUpload uploadedDocument = uploadDocument(); + + final Map<String, Object> headers = new HashMap<String, Object>(); + headers.put("CamelBraintree.disputeId", createdDispute.getId()); + FileEvidenceRequest fileEvidenceRequest = new FileEvidenceRequest().documentId(uploadedDocument.getId()); + headers.put("CamelBraintree.fileEvidenceRequest", fileEvidenceRequest); + + final Result<DisputeEvidence> result = requestBodyAndHeaders( + "direct://ADDFILEEVIDENCE_1", + null, + headers + ); + + assertNotNull("addFileEvidence result", result); + assertTrue("addFileEvidence result success", result.isSuccess()); + } + + @Test + public void testAddTextEvidence() throws Exception { + final String textEvidence = "Text Evidence"; + + Dispute createdDispute = createDispute(); + assertEquals(Dispute.Status.OPEN, createdDispute.getStatus()); + + final Map<String, Object> headers = new HashMap<String, Object>(); + headers.put("CamelBraintree.id", createdDispute.getId()); + headers.put("CamelBraintree.content", textEvidence); + final Result<DisputeEvidence> result = requestBodyAndHeaders( + "direct://ADDTEXTEVIDENCE", + null, + headers + ); + + assertNotNull("addTextEvidence result", result); + assertTrue("addTextEvidence result success", result.isSuccess()); + + DisputeEvidence disputeEvidence = result.getTarget(); + assertEquals(textEvidence, disputeEvidence.getComment()); + } + + @Test + public void testAddTextEvidenceOne() throws Exception { + final String textEvidence = "Text Evidence"; + + Dispute createdDispute = createDispute(); + assertEquals(Dispute.Status.OPEN, createdDispute.getStatus()); + + final Map<String, Object> headers = new HashMap<String, Object>(); + headers.put("CamelBraintree.id", createdDispute.getId()); + TextEvidenceRequest textEvidenceRequest = new TextEvidenceRequest().content(textEvidence); + headers.put("CamelBraintree.textEvidenceRequest", textEvidenceRequest); + + final Result<DisputeEvidence> result = requestBodyAndHeaders( + "direct://ADDTEXTEVIDENCE_1", + null, + headers + ); + + assertNotNull("addTextEvidence result", result); + assertTrue("addTextEvidence result success", result.isSuccess()); + + DisputeEvidence disputeEvidence = result.getTarget(); + assertEquals(textEvidence, disputeEvidence.getComment()); + } + + @Test + public void testFinalize() throws Exception { + Dispute createdDispute = createDispute(); + assertEquals(Dispute.Status.OPEN, createdDispute.getStatus()); + + final Result result = requestBody( + "direct://FINALIZE", + createdDispute.getId() + ); + assertNotNull("finalize result", result); + assertTrue("finalize result success", result.isSuccess()); + + final Dispute finalizedDispute = requestBody( + "direct://FIND", + createdDispute.getId() + ); + assertNotNull("finalized dispute", finalizedDispute); + assertEquals(Dispute.Status.DISPUTED, finalizedDispute.getStatus()); + } + + @Test + public void testFind() throws Exception { + Dispute createdDispute = createDispute(); + assertEquals(Dispute.Status.OPEN, createdDispute.getStatus()); + + final Dispute foundDispute = requestBody( + "direct://FIND", + createdDispute.getId() + ); + assertNotNull("found dispute", foundDispute); + assertEquals(Dispute.Status.OPEN, foundDispute.getStatus()); + } + + @Test + public void testRemoveEvidence() throws Exception { + final String textEvidence = "Text Evidence"; + + Dispute createdDispute = createDispute(); + assertEquals(Dispute.Status.OPEN, createdDispute.getStatus()); + + final Map<String, Object> addTextEvidenceHeaders = new HashMap<String, Object>(); + addTextEvidenceHeaders.put("CamelBraintree.id", createdDispute.getId()); + addTextEvidenceHeaders.put("CamelBraintree.content", textEvidence); + + final Result<DisputeEvidence> addTextEvidenceResult = requestBodyAndHeaders( + "direct://ADDTEXTEVIDENCE", + null, + addTextEvidenceHeaders + ); + + assertNotNull("addTextEvidence result", addTextEvidenceResult); + assertTrue("addTextEvidence result success", addTextEvidenceResult.isSuccess()); + + DisputeEvidence disputeEvidence = addTextEvidenceResult.getTarget(); + assertEquals(textEvidence, disputeEvidence.getComment()); + + final Map<String, Object> removeTextEvidenceHeaders = new HashMap<String, Object>(); + removeTextEvidenceHeaders.put("CamelBraintree.disputeId", createdDispute.getId()); + removeTextEvidenceHeaders.put("CamelBraintree.evidenceId", disputeEvidence.getId()); + + final Result removeTextEvidenceResult = requestBodyAndHeaders( + "direct://REMOVEEVIDENCE", + null, + removeTextEvidenceHeaders + ); + + assertNotNull("removeEvidence result", removeTextEvidenceResult); + assertTrue("removeEvidence result success", removeTextEvidenceResult.isSuccess()); + } + + @Test + public void testSearch() throws Exception { + Dispute createdDispute = createDispute(); + assertEquals(Dispute.Status.OPEN, createdDispute.getStatus()); + + DisputeSearchRequest query = new DisputeSearchRequest().id().is(createdDispute.getId()); + final PaginatedCollection<Dispute> result = requestBody( + "direct://SEARCH", + query + ); + + assertNotNull("search result", result); + for (Dispute foundDispute : result) { + assertEquals(createdDispute.getId(), foundDispute.getId()); + } + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() { + // route to create transaction + from("direct://SALE") + .to("braintree://" + TRANSACTION_PATH_PREFIX + "/sale?inBody=request"); + + // route to create documents + from("direct://CREATE") + .to("braintree://" + DOCUMENT_UPLOAD_PATH_PREFIX + "/create?inBody=request"); + + // test route for accept + from("direct://ACCEPT") + .to("braintree://" + PATH_PREFIX + "/accept?inBody=id"); + + // test route for addFileEvidence + from("direct://ADDFILEEVIDENCE") + .to("braintree://" + PATH_PREFIX + "/addFileEvidence"); + + // test route for addFileEvidence + from("direct://ADDFILEEVIDENCE_1") + .to("braintree://" + PATH_PREFIX + "/addFileEvidence"); + + // test route for addTextEvidence + from("direct://ADDTEXTEVIDENCE") + .to("braintree://" + PATH_PREFIX + "/addTextEvidence"); + + // test route for addTextEvidence + from("direct://ADDTEXTEVIDENCE_1") + .to("braintree://" + PATH_PREFIX + "/addTextEvidence"); + + // test route for finalize + from("direct://FINALIZE") + .to("braintree://" + PATH_PREFIX + "/finalize?inBody=id"); + + // test route for find + from("direct://FIND") + .to("braintree://" + PATH_PREFIX + "/find?inBody=id"); + + // test route for removeEvidence + from("direct://REMOVEEVIDENCE") + .to("braintree://" + PATH_PREFIX + "/removeEvidence"); + + // test route for search + from("direct://SEARCH") + .to("braintree://" + PATH_PREFIX + "/search?inBody=query"); + + } + }; + } + + private Dispute createDispute() { + return createDispute(100.00); + } + + private Dispute createDispute(double amount) { + final Result<Transaction> transactionResult = requestBody( + "direct://SALE", + new TransactionRequest() + .amount(new BigDecimal(amount)) + .paymentMethodNonce("fake-valid-nonce") + .creditCard() + .number("4023898493988028") + .done() + .options() + .submitForSettlement(true) + .done(), + Result.class); + + assertTrue(transactionResult.isSuccess()); + List<Dispute> disputes = transactionResult.getTarget().getDisputes(); + assertListSize(disputes, 1); + return disputes.get(0); + } + + private DocumentUpload uploadDocument() { + final String documentName = "pdf-sample.pdf"; + + File evidenceDocument = new File(getClass().getClassLoader().getResource(documentName).getPath()); + DocumentUploadRequest documentUploadRequest = new DocumentUploadRequest( + DocumentUpload.Kind.EVIDENCE_DOCUMENT, + evidenceDocument + ); + final Result<DocumentUpload> documentUploadResult = requestBody( + "direct://CREATE", + documentUploadRequest + ); + assertNotNull("create result", documentUploadResult); + assertTrue("create result success", documentUploadResult.isSuccess()); + return documentUploadResult.getTarget(); + } +} diff --git a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/DocumentUploadGatewayIntegrationTest.java b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/DocumentUploadGatewayIntegrationTest.java new file mode 100644 index 0000000..e392cee --- /dev/null +++ b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/DocumentUploadGatewayIntegrationTest.java @@ -0,0 +1,70 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.braintree; + +import java.io.File; + +import com.braintreegateway.DocumentUpload; +import com.braintreegateway.DocumentUploadRequest; +import com.braintreegateway.Result; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.braintree.internal.BraintreeApiCollection; +import org.apache.camel.component.braintree.internal.DocumentUploadGatewayApiMethod; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DocumentUploadGatewayIntegrationTest extends AbstractBraintreeTestSupport { + + private static final Logger LOG = LoggerFactory.getLogger(DocumentUploadGatewayIntegrationTest.class); + private static final String PATH_PREFIX = BraintreeApiCollection.getCollection().getApiName(DocumentUploadGatewayApiMethod.class).getName(); + + @Test + public void testCreate() throws Exception { + final String documentName = "pdf-sample.pdf"; + + File evidenceDocument = new File(getClass().getClassLoader().getResource(documentName).getPath()); + DocumentUploadRequest documentUploadRequest = new DocumentUploadRequest( + DocumentUpload.Kind.EVIDENCE_DOCUMENT, + evidenceDocument + ); + + final Result<DocumentUpload> result = requestBody( + "direct://CREATE", + documentUploadRequest + ); + + assertNotNull("create result", result); + assertTrue("create result success", result.isSuccess()); + + DocumentUpload documentUpload = result.getTarget(); + assertEquals(documentName, documentUpload.getName()); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() { + // test route for create + from("direct://CREATE") + .to("braintree://" + PATH_PREFIX + "/create?inBody=request"); + + } + }; + } +} diff --git a/components/camel-braintree/src/test/resources/pdf-sample.pdf b/components/camel-braintree/src/test/resources/pdf-sample.pdf new file mode 100644 index 0000000..f698ff5 Binary files /dev/null and b/components/camel-braintree/src/test/resources/pdf-sample.pdf differ