You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2018/06/21 12:33:56 UTC
[camel] branch master updated: CAMEL-12138: camel-braintree -
expose dispute and documentUpload APIs
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 <ru...@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