You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2021/07/23 07:06:40 UTC

[camel-quarkus] branch main updated (3289222 -> 61ffea5)

This is an automated email from the ASF dual-hosted git repository.

ppalaga pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git.


    from 3289222  Updated CHANGELOG.md
     new c92c1e0  Salesforce - Mock existing integration tests Fixes #2667
     new 3ff5c7f  Update integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
     new 61ffea5  Update Salesforce integrations tests Readme to add Wiremock informations

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 integration-tests/salesforce/README.adoc           |  6 ++-
 integration-tests/salesforce/pom.xml               |  7 +++
 .../component/salesforce/SalesforceRoutes.java     | 52 +++++++++++++++++++-
 .../src/main/resources/application.properties      |  4 --
 .../quarkus/component/salesforce/SalesforceIT.java |  5 --
 ...esforceIT.java => SalesforceIntegrationIT.java} |  5 +-
 ...rceTest.java => SalesforceIntegrationTest.java} | 57 +---------------------
 .../component/salesforce/SalesforceTest.java       | 54 ++------------------
 .../salesforce/SalesforceTestResource.java}        | 31 +++++++-----
 .../test/resources/mappings/bulApi-abortJob.json   | 18 +++++++
 .../test/resources/mappings/bulkApi-createJob.json | 18 +++++++
 .../src/test/resources/mappings/getAccount.json    | 18 +++++++
 .../src/test/resources/mappings/getDocument.json   | 18 +++++++
 .../src/test/resources/mappings/handshake.json     | 19 ++++++++
 .../src/test/resources/mappings/oauth2.json        | 19 ++++++++
 .../src/test/resources/mappings/revokeToken.json   | 17 +++++++
 16 files changed, 215 insertions(+), 133 deletions(-)
 copy integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/{SalesforceIT.java => SalesforceIntegrationIT.java} (92%)
 copy integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/{SalesforceTest.java => SalesforceIntegrationTest.java} (61%)
 copy integration-tests/{openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenStackTestResource.java => salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTestResource.java} (55%)
 create mode 100644 integration-tests/salesforce/src/test/resources/mappings/bulApi-abortJob.json
 create mode 100644 integration-tests/salesforce/src/test/resources/mappings/bulkApi-createJob.json
 create mode 100644 integration-tests/salesforce/src/test/resources/mappings/getAccount.json
 create mode 100644 integration-tests/salesforce/src/test/resources/mappings/getDocument.json
 create mode 100644 integration-tests/salesforce/src/test/resources/mappings/handshake.json
 create mode 100644 integration-tests/salesforce/src/test/resources/mappings/oauth2.json
 create mode 100644 integration-tests/salesforce/src/test/resources/mappings/revokeToken.json

[camel-quarkus] 02/03: Update integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java

Posted by pp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ppalaga pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 3ff5c7f08bba254a1427dbdae0be2c80a51265fb
Author: Zineb BENDHIBA <be...@gmail.com>
AuthorDate: Wed Jul 21 11:13:32 2021 +0200

    Update integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
    
    Co-authored-by: Peter Palaga <pp...@redhat.com>
---
 .../apache/camel/quarkus/component/salesforce/SalesforceRoutes.java    | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java b/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
index 581f8e6..6449547 100644
--- a/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
+++ b/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
@@ -44,9 +44,6 @@ public class SalesforceRoutes extends RouteBuilder {
     @ConfigProperty(name = "SALESFORCE_CLIENTSECRET", defaultValue = "clientSecret")
     String clientSecret;
 
-    @Produces
-    @ApplicationScoped
-    @Unremovable
     @Named("salesforce")
     SalesforceComponent salesforceComponent() {
         // check if wiremock URL exists

[camel-quarkus] 03/03: Update Salesforce integrations tests Readme to add Wiremock informations

Posted by pp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ppalaga pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 61ffea5dfa848bd707deb68d94d59adba82e1188
Author: Zineb Bendhiba <be...@gmail.com>
AuthorDate: Wed Jul 21 11:26:39 2021 +0200

    Update Salesforce integrations tests Readme to add Wiremock informations
---
 integration-tests/salesforce/README.adoc                            | 6 +++++-
 .../apache/camel/quarkus/component/salesforce/SalesforceRoutes.java | 2 --
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/integration-tests/salesforce/README.adoc b/integration-tests/salesforce/README.adoc
index ea406ab..e85a862 100644
--- a/integration-tests/salesforce/README.adoc
+++ b/integration-tests/salesforce/README.adoc
@@ -1,6 +1,10 @@
 == Camel Quarkus Salesforce Integration Tests
 
-To run the `camel-quarkus-salesforce` integration tests against the real API, you must first create a Salesforce developer account https://developer.salesforce.com/.
+By default, the Salesforce integration tests use WireMock to stub the API interactions.
+
+IMPORTANT: Note that when using Wiremock, the Change Data Capture Events test is disabled.
+
+To run `camel-quarkus-salesforce` integration tests using Salesforce API interactions, you must first create a Salesforce developer account https://developer.salesforce.com/.
 
 Next create a new 'Connected App' from the app manager page. You may need to adjust the OAuth policy settings for
 `Permitted Users` and also `IP Relaxation` rules, depending on your needs. Also enable Change Data Capture for the 'Account' entity by visiting the Integrations -> Change Data Capture page.
diff --git a/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java b/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
index 6449547..387e701 100644
--- a/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
+++ b/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
@@ -20,9 +20,7 @@ import java.util.Optional;
 
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Named;
-import javax.ws.rs.Produces;
 
-import io.quarkus.arc.Unremovable;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.salesforce.AuthenticationType;
 import org.apache.camel.component.salesforce.SalesforceComponent;

[camel-quarkus] 01/03: Salesforce - Mock existing integration tests Fixes #2667

Posted by pp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ppalaga pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit c92c1e0eb9674a2567c9ceee1eca4f76d62e5cc8
Author: Zineb Bendhiba <be...@gmail.com>
AuthorDate: Thu Jul 1 10:11:19 2021 +0200

    Salesforce - Mock existing integration tests
    Fixes #2667
---
 integration-tests/salesforce/pom.xml               |  7 +++
 .../component/salesforce/SalesforceRoutes.java     | 57 ++++++++++++++++++++-
 .../src/main/resources/application.properties      |  4 --
 .../quarkus/component/salesforce/SalesforceIT.java |  5 --
 ...esforceIT.java => SalesforceIntegrationIT.java} |  5 +-
 ...rceTest.java => SalesforceIntegrationTest.java} | 57 +--------------------
 .../component/salesforce/SalesforceTest.java       | 54 ++------------------
 .../salesforce/SalesforceTestResource.java         | 59 ++++++++++++++++++++++
 .../test/resources/mappings/bulApi-abortJob.json   | 18 +++++++
 .../test/resources/mappings/bulkApi-createJob.json | 18 +++++++
 .../src/test/resources/mappings/getAccount.json    | 18 +++++++
 .../src/test/resources/mappings/getDocument.json   | 18 +++++++
 .../src/test/resources/mappings/handshake.json     | 19 +++++++
 .../src/test/resources/mappings/oauth2.json        | 19 +++++++
 .../src/test/resources/mappings/revokeToken.json   | 17 +++++++
 15 files changed, 254 insertions(+), 121 deletions(-)

diff --git a/integration-tests/salesforce/pom.xml b/integration-tests/salesforce/pom.xml
index 612f97e..3f1faca 100644
--- a/integration-tests/salesforce/pom.xml
+++ b/integration-tests/salesforce/pom.xml
@@ -55,6 +55,13 @@
             <scope>test</scope>
         </dependency>
 
+        <!-- dependencies needed to mock Salesforce API -->
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-integration-wiremock-support</artifactId>
+            <scope>test</scope>
+        </dependency>
+
 
         <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
         <dependency>
diff --git a/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java b/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
index 016fbab..581f8e6 100644
--- a/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
+++ b/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceRoutes.java
@@ -16,13 +16,66 @@
  */
 package org.apache.camel.quarkus.component.salesforce;
 
+import java.util.Optional;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Named;
+import javax.ws.rs.Produces;
+
+import io.quarkus.arc.Unremovable;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.salesforce.AuthenticationType;
+import org.apache.camel.component.salesforce.SalesforceComponent;
+import org.eclipse.microprofile.config.ConfigProvider;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
 
+@ApplicationScoped
 public class SalesforceRoutes extends RouteBuilder {
 
+    @ConfigProperty(name = "SALESFORCE_USERNAME", defaultValue = "username")
+    String username;
+
+    @ConfigProperty(name = "SALESFORCE_PASSWORD", defaultValue = "password")
+    String password;
+
+    @ConfigProperty(name = "SALESFORCE_CLIENTID", defaultValue = "clientId")
+    String clientId;
+
+    @ConfigProperty(name = "SALESFORCE_CLIENTSECRET", defaultValue = "clientSecret")
+    String clientSecret;
+
+    @Produces
+    @ApplicationScoped
+    @Unremovable
+    @Named("salesforce")
+    SalesforceComponent salesforceComponent() {
+        // check if wiremock URL exists
+        Optional<String> wireMockUrl = ConfigProvider.getConfig().getOptionalValue("wiremock.url", String.class);
+
+        SalesforceComponent salesforceComponent = new SalesforceComponent();
+        salesforceComponent.setClientId(clientId);
+        salesforceComponent.setClientSecret(clientSecret);
+        salesforceComponent.setUserName(username);
+        salesforceComponent.setPassword(password);
+
+        // Set URL depending if mock is enabled
+        if (wireMockUrl.isPresent()) {
+            salesforceComponent.setAuthenticationType(AuthenticationType.USERNAME_PASSWORD);
+            salesforceComponent.setRefreshToken("refreshToken");
+            salesforceComponent.setLoginUrl(wireMockUrl.get());
+        } else {
+            salesforceComponent.setLoginUrl("https://login.salesforce.com");
+        }
+        return salesforceComponent;
+    }
+
     @Override
     public void configure() throws Exception {
-        from("salesforce:/data/AccountChangeEvent?replayId=-1").routeId("cdc").autoStartup(false)
-                .to("seda:events");
+        Optional<String> wireMockUrl = ConfigProvider.getConfig().getOptionalValue("wiremock.url", String.class);
+        // Wiremock used only with Templates - this Route is used only with Salesforce credentials
+        if (!wireMockUrl.isPresent()) {
+            from("salesforce:/data/AccountChangeEvent?replayId=-1").routeId("cdc").autoStartup(false)
+                    .to("seda:events");
+        }
     }
 }
diff --git a/integration-tests/salesforce/src/main/resources/application.properties b/integration-tests/salesforce/src/main/resources/application.properties
index b180e3a..ca368ac 100644
--- a/integration-tests/salesforce/src/main/resources/application.properties
+++ b/integration-tests/salesforce/src/main/resources/application.properties
@@ -19,7 +19,3 @@
 # Camel :: Salesforce
 #
 camel.component.salesforce.loginUrl = https://login.salesforce.com
-camel.component.salesforce.userName = {{env:SALESFORCE_USERNAME}}
-camel.component.salesforce.password = {{env:SALESFORCE_PASSWORD}}
-camel.component.salesforce.clientId = {{env:SALESFORCE_CLIENTID}}
-camel.component.salesforce.clientSecret = {{env:SALESFORCE_CLIENTSECRET}}
diff --git a/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIT.java b/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIT.java
index dadbe10..729fc4e 100644
--- a/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIT.java
+++ b/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIT.java
@@ -17,12 +17,7 @@
 package org.apache.camel.quarkus.component.salesforce;
 
 import io.quarkus.test.junit.NativeImageTest;
-import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
 
-@EnabledIfEnvironmentVariable(named = "SALESFORCE_USERNAME", matches = ".+")
-@EnabledIfEnvironmentVariable(named = "SALESFORCE_PASSWORD", matches = ".+")
-@EnabledIfEnvironmentVariable(named = "SALESFORCE_CLIENTID", matches = ".+")
-@EnabledIfEnvironmentVariable(named = "SALESFORCE_CLIENTSECRET", matches = ".+")
 @NativeImageTest
 class SalesforceIT extends SalesforceTest {
 
diff --git a/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIT.java b/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIntegrationIT.java
similarity index 92%
copy from integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIT.java
copy to integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIntegrationIT.java
index dadbe10..afecad8 100644
--- a/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIT.java
+++ b/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIntegrationIT.java
@@ -16,14 +16,11 @@
  */
 package org.apache.camel.quarkus.component.salesforce;
 
-import io.quarkus.test.junit.NativeImageTest;
 import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
 
 @EnabledIfEnvironmentVariable(named = "SALESFORCE_USERNAME", matches = ".+")
 @EnabledIfEnvironmentVariable(named = "SALESFORCE_PASSWORD", matches = ".+")
 @EnabledIfEnvironmentVariable(named = "SALESFORCE_CLIENTID", matches = ".+")
 @EnabledIfEnvironmentVariable(named = "SALESFORCE_CLIENTSECRET", matches = ".+")
-@NativeImageTest
-class SalesforceIT extends SalesforceTest {
-
+public class SalesforceIntegrationIT extends SalesforceIntegrationTest {
 }
diff --git a/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTest.java b/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIntegrationTest.java
similarity index 61%
copy from integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTest.java
copy to integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIntegrationTest.java
index 1de2906..91c68d8 100644
--- a/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTest.java
+++ b/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceIntegrationTest.java
@@ -20,72 +20,17 @@ import java.util.UUID;
 
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
-import io.restassured.path.json.JsonPath;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
 
-import static org.hamcrest.Matchers.emptyString;
 import static org.hamcrest.Matchers.is;
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @EnabledIfEnvironmentVariable(named = "SALESFORCE_USERNAME", matches = ".+")
 @EnabledIfEnvironmentVariable(named = "SALESFORCE_PASSWORD", matches = ".+")
 @EnabledIfEnvironmentVariable(named = "SALESFORCE_CLIENTID", matches = ".+")
 @EnabledIfEnvironmentVariable(named = "SALESFORCE_CLIENTSECRET", matches = ".+")
 @QuarkusTest
-class SalesforceTest {
-
-    @Test
-    public void testGetDocumentRaw() {
-        RestAssured.get("/salesforce/document/test")
-                .then()
-                .statusCode(200)
-                .body("attributes.type", is("Document"));
-    }
-
-    @Test
-    public void testGetAccountDTO() {
-        RestAssured.get("/salesforce/account")
-                .then()
-                .statusCode(200)
-                .body(
-                        "id", not(emptyString()),
-                        "accountNumber", not(emptyString()));
-    }
-
-    @Test
-    public void testBulkJobApi() {
-        // Create bulk job
-        JsonPath jobInfo = RestAssured.given()
-                .post("/salesforce/bulk")
-                .then()
-                .statusCode(200)
-                .extract()
-                .body()
-                .jsonPath();
-
-        String id = jobInfo.getString("id");
-        String state = jobInfo.getString("state");
-        assertNotNull(id);
-        assertTrue(id.length() > 0);
-        assertEquals("OPEN", state);
-
-        // Abort bulk job
-        jobInfo = RestAssured.given()
-                .queryParam("jobId", id)
-                .delete("/salesforce/bulk")
-                .then()
-                .statusCode(200)
-                .extract()
-                .body()
-                .jsonPath();
-
-        state = jobInfo.getString("state");
-        assertEquals("ABORTED", state);
-    }
+public class SalesforceIntegrationTest {
 
     @Test
     public void testChangeDataCaptureEvents() {
diff --git a/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTest.java b/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTest.java
index 1de2906..4acd09f 100644
--- a/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTest.java
+++ b/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTest.java
@@ -16,13 +16,11 @@
  */
 package org.apache.camel.quarkus.component.salesforce;
 
-import java.util.UUID;
-
+import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.path.json.JsonPath;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
 
 import static org.hamcrest.Matchers.emptyString;
 import static org.hamcrest.Matchers.is;
@@ -31,11 +29,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-@EnabledIfEnvironmentVariable(named = "SALESFORCE_USERNAME", matches = ".+")
-@EnabledIfEnvironmentVariable(named = "SALESFORCE_PASSWORD", matches = ".+")
-@EnabledIfEnvironmentVariable(named = "SALESFORCE_CLIENTID", matches = ".+")
-@EnabledIfEnvironmentVariable(named = "SALESFORCE_CLIENTSECRET", matches = ".+")
 @QuarkusTest
+@QuarkusTestResource(SalesforceTestResource.class)
 class SalesforceTest {
 
     @Test
@@ -52,8 +47,8 @@ class SalesforceTest {
                 .then()
                 .statusCode(200)
                 .body(
-                        "id", not(emptyString()),
-                        "accountNumber", not(emptyString()));
+                        "Id", not(emptyString()),
+                        "AccountNumber", not(emptyString()));
     }
 
     @Test
@@ -86,45 +81,4 @@ class SalesforceTest {
         state = jobInfo.getString("state");
         assertEquals("ABORTED", state);
     }
-
-    @Test
-    public void testChangeDataCaptureEvents() {
-        String accountId = null;
-        try {
-            // Start the Salesforce CDC consumer
-            RestAssured.post("/salesforce/cdc/start")
-                    .then()
-                    .statusCode(200);
-
-            // Create an account
-            String accountName = "Camel Quarkus Account Test: " + UUID.randomUUID().toString();
-            accountId = RestAssured.given()
-                    .body(accountName)
-                    .post("/salesforce/account")
-                    .then()
-                    .statusCode(200)
-                    .extract()
-                    .body()
-                    .asString();
-
-            // Verify we captured the account creation event
-            RestAssured.given()
-                    .get("/salesforce/cdc")
-                    .then()
-                    .statusCode(200)
-                    .body("Name", is(accountName));
-        } finally {
-            // Shut down the CDC consumer
-            RestAssured.post("/salesforce/cdc/stop")
-                    .then()
-                    .statusCode(200);
-
-            // Clean up
-            if (accountId != null) {
-                RestAssured.delete("/salesforce/account/" + accountId)
-                        .then()
-                        .statusCode(204);
-            }
-        }
-    }
 }
diff --git a/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTestResource.java b/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTestResource.java
new file mode 100644
index 0000000..9d47e8c
--- /dev/null
+++ b/integration-tests/salesforce/src/test/java/org/apache/camel/quarkus/component/salesforce/SalesforceTestResource.java
@@ -0,0 +1,59 @@
+/*
+ * 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.quarkus.component.salesforce;
+
+import java.util.Map;
+
+import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
+import com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer;
+import org.apache.camel.quarkus.test.wiremock.WireMockTestResourceLifecycleManager;
+
+public class SalesforceTestResource extends WireMockTestResourceLifecycleManager {
+    private static final String SALESFORCE_BASE_URL = "login.salesforce.com";
+    private static final String SALESFORCE_CLIENT_ID = "SALESFORCE_CLIENTID";
+    private static final String SALESFORCE_CLIENT_SECRET = "SALESFORCE_CLIENTSECRET";
+    private static final String SALESFORCE_USERNAME = "SALESFORCE_USERNAME";
+    private static final String SALESFORCE_PASSWORD = "SALESFORCE_PASSWORD";
+
+    @Override
+    protected String getRecordTargetBaseUrl() {
+        return SALESFORCE_BASE_URL;
+    }
+
+    @Override
+    protected boolean isMockingEnabled() {
+        return !envVarsPresent(SALESFORCE_CLIENT_ID, SALESFORCE_CLIENT_SECRET, SALESFORCE_USERNAME, SALESFORCE_PASSWORD);
+    }
+
+    @Override
+    public Map<String, String> start() {
+        Map<String, String> options = super.start();
+        if (options.containsKey("wiremock.url")) {
+            options.put("camel.component.salesforce.loginUrl", options.get("wiremock.url"));
+            options.put("camel.component.salesforce.userName", "username");
+            options.put("camel.component.salesforce.password", "password");
+            options.put("camel.component.salesforce.clientId", "clientId");
+        }
+        return options;
+    }
+
+    @Override
+    protected void customizeWiremockConfiguration(WireMockConfiguration config) {
+        config.extensions(new ResponseTemplateTransformer(false));
+    }
+
+}
diff --git a/integration-tests/salesforce/src/test/resources/mappings/bulApi-abortJob.json b/integration-tests/salesforce/src/test/resources/mappings/bulApi-abortJob.json
new file mode 100644
index 0000000..0230ce0
--- /dev/null
+++ b/integration-tests/salesforce/src/test/resources/mappings/bulApi-abortJob.json
@@ -0,0 +1,18 @@
+{
+  "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "name": "salesforce_api_json",
+  "request": {
+    "url": "/services/async/50.0/job/750x0000000005LAAQ",
+    "method": "POST"
+  },
+  "response": {
+    "status": 200,
+    "body": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<jobInfo\n   xmlns=\"http://www.force.com/2009/06/asyncapi/dataload\">\n  <id>750x0000000005LAAQ</id>\n  <operation>insert</operation>\n  <object>Contact</object>\n  <createdById>005x0000000wPWdAAM</createdById>\n  <createdDate>2009-09-01T16:42:46.000Z</createdDate>\n  <systemModstamp>2009-09-01T16:42:46.000Z</systemModstamp>\n  <state>Aborted</state>\n  <concurrencyMode>Parallel</concurrencyMode>\n  <contentType>CSV</contentType>\ [...]
+    "headers": {
+      "Content-Type": "application/json; charset=UTF-8"
+    }
+  },
+  "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "persistent": true,
+  "insertionIndex": 2
+}
\ No newline at end of file
diff --git a/integration-tests/salesforce/src/test/resources/mappings/bulkApi-createJob.json b/integration-tests/salesforce/src/test/resources/mappings/bulkApi-createJob.json
new file mode 100644
index 0000000..3b5e29e
--- /dev/null
+++ b/integration-tests/salesforce/src/test/resources/mappings/bulkApi-createJob.json
@@ -0,0 +1,18 @@
+{
+  "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "name": "salesforce_api_json",
+  "request": {
+    "url": "/services/async/50.0/job",
+    "method": "POST"
+  },
+  "response": {
+    "status": 200,
+    "body": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<jobInfo\n   xmlns=\"http://www.force.com/2009/06/asyncapi/dataload\">\n  <id>750x0000000005LAAQ</id>\n  <operation>insert</operation>\n  <object>Contact</object>\n  <createdById>005x0000000wPWdAAM</createdById>\n  <createdDate>2009-09-01T16:42:46.000Z</createdDate>\n  <systemModstamp>2009-09-01T16:42:46.000Z</systemModstamp>\n  <state>Open</state>\n  <concurrencyMode>Parallel</concurrencyMode>\n  <contentType>CSV</contentType>\n   [...]
+    "headers": {
+      "Content-Type": "application/json; charset=UTF-8"
+    }
+  },
+  "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "persistent": true,
+  "insertionIndex": 2
+}
\ No newline at end of file
diff --git a/integration-tests/salesforce/src/test/resources/mappings/getAccount.json b/integration-tests/salesforce/src/test/resources/mappings/getAccount.json
new file mode 100644
index 0000000..a2c85fa
--- /dev/null
+++ b/integration-tests/salesforce/src/test/resources/mappings/getAccount.json
@@ -0,0 +1,18 @@
+{
+  "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "name": "salesforce_api_json",
+  "request": {
+    "url": "/services/data/v50.0/query/?q=SELECT%20Id%2CAccountNumber%20from%20Account%20LIMIT%201",
+    "method": "GET"
+  },
+  "response": {
+    "status": 200,
+    "body" : "{\"records\":[{\"Id\":\"someFakeId\", \"AccountNumber\":\"11233\", \"attributes\": {\"type\" : \"Account\"}}]}",
+    "headers": {
+      "Content-Type": "application/json; charset=UTF-8"
+    }
+  },
+  "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "persistent": true,
+  "insertionIndex": 2
+}
\ No newline at end of file
diff --git a/integration-tests/salesforce/src/test/resources/mappings/getDocument.json b/integration-tests/salesforce/src/test/resources/mappings/getDocument.json
new file mode 100644
index 0000000..aac6d77
--- /dev/null
+++ b/integration-tests/salesforce/src/test/resources/mappings/getDocument.json
@@ -0,0 +1,18 @@
+{
+  "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "name": "salesforce_api_json",
+  "request": {
+    "url": "/services/data/v50.0/sobjects/Document/Name/test",
+    "method": "GET"
+  },
+  "response": {
+    "status": 200,
+    "body" : "{\"attributes\": {\"type\" : \"Document\"}}",
+    "headers": {
+      "Content-Type": "application/json; charset=UTF-8"
+    }
+},
+  "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "persistent": true,
+  "insertionIndex": 2
+}
\ No newline at end of file
diff --git a/integration-tests/salesforce/src/test/resources/mappings/handshake.json b/integration-tests/salesforce/src/test/resources/mappings/handshake.json
new file mode 100644
index 0000000..e619cba
--- /dev/null
+++ b/integration-tests/salesforce/src/test/resources/mappings/handshake.json
@@ -0,0 +1,19 @@
+{
+  "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "name": "salesforce_api_json",
+  "request": {
+    "url": "/cometd/50.0/handshake",
+    "method": "POST"
+  },
+  "response": {
+    "status": 200,
+    "body": "[\"ext\": {\"replay\": true,\"payload.format\": true}, \"minimumVersion\": \"1.0\", \"clientId\": \"clientId\",\"supportedConnectionTypes\": [ \"long-polling\" ], \"channel\": \"/meta/handshake\", \"id\": \"{{jsonPath request.body '$[0].id'}}\",\"version\": \"1.0\",\"successful\": \"true\" }]",
+    "transformers": ["response-template"],
+    "headers": {
+      "Content-Type": "application/json; charset=UTF-8"
+    }
+  },
+  "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "persistent": true,
+  "insertionIndex": 2
+}
\ No newline at end of file
diff --git a/integration-tests/salesforce/src/test/resources/mappings/oauth2.json b/integration-tests/salesforce/src/test/resources/mappings/oauth2.json
new file mode 100644
index 0000000..0623ea6
--- /dev/null
+++ b/integration-tests/salesforce/src/test/resources/mappings/oauth2.json
@@ -0,0 +1,19 @@
+{
+  "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "name": "salesforce_api_json",
+  "request": {
+    "url": "/services/oauth2/token",
+    "method": "POST"
+  },
+  "response": {
+    "status": 200,
+    "body": "{\"instance_url\":\"{{request.baseUrl}}\",\"access_token\":\"token\"}",
+    "transformers": ["response-template"],
+    "headers": {
+      "Content-Type": "application/json; charset=UTF-8"
+    }
+    },
+  "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "persistent": true,
+  "insertionIndex": 2
+}
\ No newline at end of file
diff --git a/integration-tests/salesforce/src/test/resources/mappings/revokeToken.json b/integration-tests/salesforce/src/test/resources/mappings/revokeToken.json
new file mode 100644
index 0000000..984cc76
--- /dev/null
+++ b/integration-tests/salesforce/src/test/resources/mappings/revokeToken.json
@@ -0,0 +1,17 @@
+{
+  "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "name": "salesforce_api_json",
+  "request": {
+    "url": "/services/oauth2/revoke?token=token",
+    "method": "GET"
+  },
+  "response": {
+    "status": 200,
+    "headers": {
+      "Content-Type": "application/json; charset=UTF-8"
+    }
+  },
+  "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+  "persistent": true,
+  "insertionIndex": 2
+}
\ No newline at end of file