You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2021/11/12 14:19:55 UTC

[camel-quarkus] branch main updated: Avoid using Camel Salesforce DTO types as the return type or method parameters in integration tests

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

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


The following commit(s) were added to refs/heads/main by this push:
     new 47f9ac6  Avoid using Camel Salesforce DTO types as the return type or method parameters in integration tests
47f9ac6 is described below

commit 47f9ac630bf79ecace8a4ac6699f7b1900e33686
Author: James Netherton <ja...@gmail.com>
AuthorDate: Fri Nov 12 08:39:08 2021 +0000

    Avoid using Camel Salesforce DTO types as the return type or method parameters in integration tests
    
    Fixes #3259
---
 .../salesforce/deployment/SalesforceProcessor.java |  32 ++--
 .../component/salesforce/SalesforceResource.java   | 137 +++++++++-----
 .../component/salesforce/SalesforceTest.java       | 196 +++++++++++++--------
 .../src/test/resources/mappings/getAccount.json    |   2 +-
 4 files changed, 225 insertions(+), 142 deletions(-)

diff --git a/extensions/salesforce/deployment/src/main/java/org/apache/camel/quarkus/component/salesforce/deployment/SalesforceProcessor.java b/extensions/salesforce/deployment/src/main/java/org/apache/camel/quarkus/component/salesforce/deployment/SalesforceProcessor.java
index 414f190..361d68d 100644
--- a/extensions/salesforce/deployment/src/main/java/org/apache/camel/quarkus/component/salesforce/deployment/SalesforceProcessor.java
+++ b/extensions/salesforce/deployment/src/main/java/org/apache/camel/quarkus/component/salesforce/deployment/SalesforceProcessor.java
@@ -23,13 +23,13 @@ import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
 import org.apache.camel.component.salesforce.api.dto.AbstractDTOBase;
-import org.apache.camel.component.salesforce.api.dto.PlatformEvent;
-import org.apache.camel.component.salesforce.internal.dto.PushTopic;
 import org.jboss.jandex.DotName;
 import org.jboss.jandex.IndexView;
 
 class SalesforceProcessor {
 
+    private static final String SALESFORCE_DTO_PACKAGE = "org.apache.camel.component.salesforce.api.dto";
+    private static final String SALESFORCE_INTERNAL_DTO_PACKAGE = "org.apache.camel.component.salesforce.internal.dto";
     private static final String FEATURE = "camel-salesforce";
 
     @BuildStep
@@ -46,29 +46,27 @@ class SalesforceProcessor {
     void registerForReflection(CombinedIndexBuildItem combinedIndex, BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
         IndexView index = combinedIndex.getIndex();
 
-        // Register everything extending AbstractDTOBase for reflection
-        DotName dtoBaseName = DotName.createSimple(AbstractDTOBase.class.getName());
-        String[] dtoClasses = index.getAllKnownSubclasses(dtoBaseName)
+        // NOTE: DTO classes are registered for reflection with fields and methods due to:
+        // https://issues.apache.org/jira/browse/CAMEL-16860
+
+        // Register Camel Salesforce DTO classes for reflection
+        String[] camelSalesforceDtoClasses = index.getKnownClasses()
                 .stream()
                 .map(classInfo -> classInfo.name().toString())
+                .filter(className -> className.startsWith(SALESFORCE_DTO_PACKAGE)
+                        || className.startsWith(SALESFORCE_INTERNAL_DTO_PACKAGE))
                 .toArray(String[]::new);
 
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, dtoClasses));
+        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, camelSalesforceDtoClasses));
 
-        // Register internal DTO classes for reflection
-        String[] internalDtoClasses = index.getKnownClasses()
+        // Register user generated DTOs for reflection
+        DotName dtoBaseName = DotName.createSimple(AbstractDTOBase.class.getName());
+        String[] userDtoClasses = index.getAllKnownSubclasses(dtoBaseName)
                 .stream()
                 .map(classInfo -> classInfo.name().toString())
-                .filter(className -> className.startsWith("org.apache.camel.component.salesforce.internal.dto"))
-                // it is registred below with fields accessible
-                .filter(className -> className != PushTopic.class.getName())
+                .filter(className -> !className.startsWith("org.apache.camel.component.salesforce"))
                 .toArray(String[]::new);
 
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, internalDtoClasses));
-
-        // enabling the search for private fields : related to issue https://issues.apache.org/jira/browse/CAMEL-16860
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, PushTopic.class));
-        // enabling custom fields : related to issue https://github.com/apache/camel-quarkus/issues/3067
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, PlatformEvent.class));
+        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, userDtoClasses));
     }
 }
diff --git a/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceResource.java b/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceResource.java
index 1a55d67..cba2462 100644
--- a/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceResource.java
+++ b/integration-tests/salesforce/src/main/java/org/apache/camel/quarkus/component/salesforce/SalesforceResource.java
@@ -17,12 +17,16 @@
 package org.apache.camel.quarkus.component.salesforce;
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.UUID;
+import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 import javax.json.Json;
+import javax.json.JsonArrayBuilder;
 import javax.json.JsonObject;
 import javax.json.JsonObjectBuilder;
 import javax.ws.rs.Consumes;
@@ -41,9 +45,11 @@ import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.Exchange;
 import org.apache.camel.FluentProducerTemplate;
 import org.apache.camel.component.salesforce.SalesforceEndpointConfig;
+import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.CreateSObjectResult;
 import org.apache.camel.component.salesforce.api.dto.GlobalObjects;
 import org.apache.camel.component.salesforce.api.dto.Limits;
+import org.apache.camel.component.salesforce.api.dto.RecentItem;
 import org.apache.camel.component.salesforce.api.dto.RestResources;
 import org.apache.camel.component.salesforce.api.dto.SObjectBasicInfo;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
@@ -82,28 +88,18 @@ public class SalesforceResource {
                 .request(String.class);
     }
 
-    @Path("/account")
+    @Path("/account/query/{id}")
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    public Account getAccount() {
+    public JsonObject getAccountByQueryRecords(@PathParam("id") String accountId) {
+        String query = QueryHelper.queryToFetchFilteredFieldsOf(new Account(),
+                sObjectField -> sObjectField.getName().equals("Id") || sObjectField.getName().equals("AccountNumber"));
         QueryRecordsAccount request = template
-                .toF("salesforce:query?sObjectQuery=SELECT Id,AccountNumber from Account LIMIT 1&sObjectClass=%s",
+                .toF("salesforce:query?sObjectQuery=%s&sObjectClass=%s",
+                        query + " WHERE Id = '" + accountId + "'",
                         QueryRecordsAccount.class.getName())
                 .request(QueryRecordsAccount.class);
-        return request.getRecords().get(0);
-    }
-
-    @Path("/account/query")
-    @GET
-    @Produces(MediaType.APPLICATION_JSON)
-    public Account getAccountByQueryHelper() {
-        String generatedQuery = QueryHelper.queryToFetchAllFieldsOf(new Account());
-        QueryRecordsAccount request = template
-                .toF("salesforce:query?sObjectQuery=%s LIMIT 1&sObjectClass=%s",
-                        generatedQuery,
-                        QueryRecordsAccount.class.getName())
-                .request(QueryRecordsAccount.class);
-        return request.getRecords().get(0);
+        return accountToJsonObject(request.getRecords().get(0));
     }
 
     @Path("/account")
@@ -113,6 +109,7 @@ public class SalesforceResource {
     public String createAccount(String accountName) {
         final Account account = new Account();
         account.setName(accountName);
+        account.setAccountNumber(UUID.randomUUID().toString());
 
         CreateSObjectResult result = template.to("salesforce:createSObject?sObjectName=Account")
                 .withBody(account)
@@ -137,12 +134,12 @@ public class SalesforceResource {
     @Path("/account/{id}")
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    public Account getAccountById(@PathParam("id") String accountId) {
+    public JsonObject getAccountById(@PathParam("id") String accountId) {
         Account account = template
                 .to("salesforce:getSObjectWithId?sObjectName=Account&sObjectIdName=Id&sObjectClass=" + Account.class.getName())
                 .withBody(accountId)
                 .request(Account.class);
-        return account;
+        return accountToJsonObject(account);
     }
 
     @Path("/bulk")
@@ -184,71 +181,71 @@ public class SalesforceResource {
     @Path("/cdc")
     @GET
     @Produces(MediaType.APPLICATION_JSON)
+    @SuppressWarnings("unchecked")
     public Map<String, Object> getCdcEvents() {
-        Map map = consumerTemplate.receiveBody("seda:events", 10000, Map.class);
-        return map;
-    }
-
-    private JobInfo createJobInfo() {
-        JobInfo jobInfo = new JobInfo();
-        jobInfo.setObject(Account.class.getSimpleName());
-        jobInfo.setContentType(ContentType.CSV);
-        return jobInfo;
-    }
-
-    private JsonObject jobInfoToJsonObject(JobInfo jobInfo) {
-        JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
-        objectBuilder.add("id", jobInfo.getId());
-        objectBuilder.add("state", jobInfo.getState().value().toUpperCase(Locale.US));
-        return objectBuilder.build();
+        return consumerTemplate.receiveBody("seda:events", 10000, Map.class);
     }
 
     @Path("sobjects/force-limit")
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    public GlobalObjectsAndHeaders getSObjectsWithForceLimitInfo() {
+    public String getSObjectsWithForceLimitInfo() {
         // Testing producer with headers
         Exchange exchange = template.to("salesforce:getGlobalObjects")
                 .withHeader("Sforce-Limit-Info", Collections.singletonList("api-usage")).send();
         GlobalObjectsAndHeaders objectsAndHeaders = new GlobalObjectsAndHeaders(
                 exchange.getMessage().getBody(GlobalObjects.class))
                         .withHeader("Sforce-Limit-Info", exchange.getMessage().getHeader("Sforce-Limit-Info", String.class));
-        return objectsAndHeaders;
+        return objectsAndHeaders.getHeader("Sforce-Limit-Info");
     }
 
     @Path("versions")
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    public List<Version> getListVersions() {
-        return template.to("salesforce:getVersions").request(List.class);
+    @SuppressWarnings("unchecked")
+    public List<String> getListVersions() {
+        List<Version> versions = template.to("salesforce:getVersions").request(List.class);
+        return versions.stream()
+                .map(Version::getVersion)
+                .collect(Collectors.toList());
     }
 
     @Path("resources")
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    public RestResources getListResources() {
-        return template.to("salesforce:getResources").request(RestResources.class);
+    public String getListResources() {
+        RestResources restResources = template.to("salesforce:getResources").request(RestResources.class);
+        return restResources.getSobjects();
     }
 
     @Path("basic-info/account")
     @GET
-    public SObjectBasicInfo getAccountBasicInfo() {
-        return template.to("salesforce:getBasicInfo?sObjectName=Account")
-                .request(SObjectBasicInfo.class);
+    public JsonObject getAccountBasicInfo() {
+        SObjectBasicInfo basicInfo = template.to("salesforce:getBasicInfo?sObjectName=Account").request(SObjectBasicInfo.class);
+        return basicInfoToJsonObject(basicInfo);
     }
 
     @Path("describe/account")
     @GET
-    public SObjectDescription getAccountDescription() {
-        return template.to("salesforce:getDescription?sObjectName=Account")
+    public String getAccountDescription() {
+        SObjectDescription sObjectDescription = template.to("salesforce:getDescription?sObjectName=Account")
                 .request(SObjectDescription.class);
+        return sObjectDescription.getName();
     }
 
     @Path("limits")
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    public Limits getLimits() {
-        return template.to("salesforce:limits").request(Limits.class);
+    public Map<String, Integer> getLimits() {
+        Limits limits = template.to("salesforce:limits").request(Limits.class);
+
+        Map<String, Integer> limitInfo = new HashMap<>();
+        for (Limits.Operation operation : Limits.Operation.values()) {
+            Limits.Usage usage = limits.forOperation(operation.name());
+            limitInfo.put(operation.name(), usage.getRemaining());
+        }
+
+        return limitInfo;
     }
 
     @Path("streaming")
@@ -296,4 +293,48 @@ public class SalesforceResource {
     public String getPlatformEvent() {
         return consumerTemplate.receiveBody("salesforce:event/TestEvent__e?rawPayload=true", 10000, String.class);
     }
+
+    private JsonObject accountToJsonObject(Account account) {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+        builder.add("Id", account.getId());
+        builder.add("AccountNumber", account.getAccountNumber());
+        return builder.build();
+    }
+
+    private JobInfo createJobInfo() {
+        JobInfo jobInfo = new JobInfo();
+        jobInfo.setObject(Account.class.getSimpleName());
+        jobInfo.setContentType(ContentType.CSV);
+        return jobInfo;
+    }
+
+    private JsonObject jobInfoToJsonObject(JobInfo jobInfo) {
+        JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
+        objectBuilder.add("id", jobInfo.getId());
+        objectBuilder.add("state", jobInfo.getState().value().toUpperCase(Locale.US));
+        return objectBuilder.build();
+    }
+
+    private JsonObject basicInfoToJsonObject(SObjectBasicInfo basicInfo) {
+        JsonObjectBuilder builder = Json.createObjectBuilder();
+
+        List<RecentItem> recentItems = basicInfo.getRecentItems();
+        JsonArrayBuilder recentItemsArrayBuilder = Json.createArrayBuilder();
+        for (RecentItem recentItem : recentItems) {
+            JsonObjectBuilder recentItemBuilder = Json.createObjectBuilder();
+            recentItemBuilder.add("Id", recentItem.getId());
+            recentItemBuilder.add("Name", recentItem.getName());
+
+            Attributes attributes = recentItem.getAttributes();
+            JsonObjectBuilder attributesObjectBuilder = Json.createObjectBuilder();
+            attributesObjectBuilder.add("url", attributes.getUrl());
+            recentItemBuilder.add("attributes", attributesObjectBuilder);
+
+            recentItemsArrayBuilder.add(recentItemBuilder);
+        }
+
+        builder.add("recentItems", recentItemsArrayBuilder);
+
+        return builder.build();
+    }
 }
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 3cdf182..d991c41 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
@@ -25,15 +25,15 @@ import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.path.json.JsonPath;
 import org.apache.camel.component.salesforce.api.dto.RecentItem;
-import org.apache.camel.component.salesforce.api.dto.RestResources;
 import org.apache.camel.component.salesforce.api.dto.SObjectBasicInfo;
-import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.component.salesforce.api.dto.Versions;
-import org.apache.camel.quarkus.component.salesforce.model.GlobalObjectsAndHeaders;
 import org.junit.jupiter.api.Test;
 
+import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.emptyString;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.matchesPattern;
+import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.core.IsNot.not;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -54,22 +54,62 @@ class SalesforceTest {
 
     @Test
     public void testGetAccountDTO() {
-        RestAssured.get("/salesforce/account")
-                .then()
-                .statusCode(200)
-                .body(
-                        "Id", not(emptyString()),
-                        "AccountNumber", not(emptyString()));
+        String accountId = null;
+        String accountName = "Camel Quarkus Account Test: " + UUID.randomUUID();
+
+        try {
+            accountId = RestAssured.given()
+                    .body(accountName)
+                    .post("/salesforce/account")
+                    .then()
+                    .statusCode(200)
+                    .extract()
+                    .body()
+                    .asString();
+
+            RestAssured.get("/salesforce/account/" + accountId)
+                    .then()
+                    .statusCode(200)
+                    .body(
+                            "Id", is(accountId),
+                            "AccountNumber", not(emptyString()));
+        } finally {
+            if (accountId != null) {
+                RestAssured.delete("/salesforce/account/" + accountId)
+                        .then()
+                        .statusCode(204);
+            }
+        }
     }
 
     @Test
-    public void testGetAccountByQueryHelper() {
-        RestAssured.get("/salesforce/account/query")
-                .then()
-                .statusCode(200)
-                .body(
-                        "Id", not(emptyString()),
-                        "AccountNumber", not(emptyString()));
+    public void testGetAccountByQueryRecords() {
+        String accountId = null;
+        String accountName = "Camel Quarkus Account Test: " + UUID.randomUUID();
+
+        try {
+            accountId = RestAssured.given()
+                    .body(accountName)
+                    .post("/salesforce/account")
+                    .then()
+                    .statusCode(200)
+                    .extract()
+                    .body()
+                    .asString();
+
+            RestAssured.get("/salesforce/account/query/" + accountId)
+                    .then()
+                    .statusCode(200)
+                    .body(
+                            "Id", not(emptyString()),
+                            "AccountNumber", not(emptyString()));
+        } finally {
+            if (accountId != null) {
+                RestAssured.delete("/salesforce/account/" + accountId)
+                        .then()
+                        .statusCode(204);
+            }
+        }
     }
 
     @Test
@@ -105,20 +145,15 @@ class SalesforceTest {
 
     @Test
     void testGlobalObjectsWithHeaders() {
-        GlobalObjectsAndHeaders globalObjectsAndHeaders = RestAssured.given()
+        RestAssured.given()
                 .get("/salesforce/sobjects/force-limit")
                 .then()
                 .statusCode(200)
-                .extract()
-                .body()
-                .as(GlobalObjectsAndHeaders.class);
-
-        assertNotNull(globalObjectsAndHeaders);
-        assertNotNull(globalObjectsAndHeaders.getGlobalObjects());
-        assertTrue(globalObjectsAndHeaders.getHeader("Sforce-Limit-Info").contains("api-usage="));
+                .body(containsString("api-usage="));
     }
 
     @Test
+    @SuppressWarnings("unchecked")
     void testGetVersions() {
         List<Versions> versions = RestAssured.given()
                 .get("/salesforce/versions")
@@ -133,73 +168,82 @@ class SalesforceTest {
 
     @Test
     void testGetRestResources() {
-        RestResources restResources = RestAssured.given()
+        RestAssured.given()
                 .get("/salesforce/resources")
                 .then()
                 .statusCode(200)
-                .extract()
-                .body()
-                .as(RestResources.class);
-        assertNotNull(restResources);
+                .body(matchesPattern("/services/data/.*/sobjects"));
     }
 
     @Test
     void testAccountWithBasicInfo() {
-        // create an object of type Account
-        String accountName = "Camel Quarkus Account Test: " + UUID.randomUUID().toString();
-        final String accountId = RestAssured.given()
-                .body(accountName)
-                .post("/salesforce/account")
-                .then()
-                .statusCode(200)
-                .extract()
-                .body()
-                .asString();
+        String accountId = null;
+        String accountName = "Camel Quarkus Account Test: " + UUID.randomUUID();
 
-        // get Account basic info
-        SObjectBasicInfo accountBasicInfo = RestAssured.given()
-                .get("/salesforce/basic-info/account")
-                .then()
-                .statusCode(200)
-                .extract()
-                .body()
-                .as(SObjectBasicInfo.class);
-        assertNotNull(accountBasicInfo);
-        List<RecentItem> recentItems = accountBasicInfo.getRecentItems();
-        assertNotNull(recentItems);
-        // make sure the created account is referenced
-        assertTrue(recentItems.stream().anyMatch(recentItem -> recentItem.getAttributes().getUrl().contains(accountId)));
-
-        // Get Account - querying Sobject by ID
-        RestAssured.get("/salesforce/account/" + accountId)
-                .then()
-                .statusCode(200)
-                .body(
-                        "Id", not(emptyString()),
-                        "AccountNumber", not(emptyString()));
+        try {
+            // create an object of type Account
+            accountId = RestAssured.given()
+                    .body(accountName)
+                    .post("/salesforce/account")
+                    .then()
+                    .statusCode(200)
+                    .extract()
+                    .body()
+                    .asString();
 
-        // delete the account
-        // Clean up
-        RestAssured.delete("/salesforce/account/" + accountId)
-                .then()
-                .statusCode(204);
+            // get Account basic info
+            SObjectBasicInfo accountBasicInfo = RestAssured.given()
+                    .get("/salesforce/basic-info/account")
+                    .then()
+                    .statusCode(200)
+                    .extract()
+                    .body()
+                    .as(SObjectBasicInfo.class);
+            assertNotNull(accountBasicInfo);
+            List<RecentItem> recentItems = accountBasicInfo.getRecentItems();
+            assertNotNull(recentItems);
+
+            // make sure the created account is referenced
+            boolean accountIdMatched = false;
+            for (RecentItem recentItem : recentItems) {
+                if (recentItem.getAttributes().getUrl().contains(accountId)) {
+                    accountIdMatched = true;
+                    break;
+                }
+            }
+            assertTrue(accountIdMatched);
+
+            // Get Account - querying Sobject by ID
+            RestAssured.get("/salesforce/account/" + accountId)
+                    .then()
+                    .statusCode(200)
+                    .body(
+                            "Id", not(emptyString()),
+                            "AccountNumber", not(emptyString()));
+        } finally {
+            if (accountId != null) {
+                // delete the account
+                // Clean up
+                RestAssured.delete("/salesforce/account/" + accountId)
+                        .then()
+                        .statusCode(204);
+            }
+        }
     }
 
     @Test
     void testGetAccountDescription() {
-        SObjectDescription accountDescription = RestAssured.given()
+        RestAssured.given()
                 .get("/salesforce/describe/account")
                 .then()
                 .statusCode(200)
-                .extract()
-                .body()
-                .as(SObjectDescription.class);
-        assertNotNull(accountDescription);
+                .body(notNullValue());
     }
 
     @Test
+    @SuppressWarnings("unchecked")
     void testLimits() {
-        final Map<String, Object> limits = RestAssured.given()
+        final Map<String, Integer> limits = RestAssured.given()
                 .get("/salesforce/limits")
                 .then()
                 .statusCode(200)
@@ -208,11 +252,11 @@ class SalesforceTest {
                 .as(Map.class);
 
         assertNotNull(limits, "Should fetch limits from Salesforce REST API");
-        assertNotNull(limits.get("concurrentAsyncGetReportInstances"));
-        assertNotNull(limits.get("concurrentSyncReportRuns"));
-        assertNotNull(limits.get("dailyApiRequests"));
-        assertNotNull(limits.get("dailyAsyncApexExecutions"));
-        assertNotNull(limits.get("dailyBulkApiRequests"));
+        assertNotNull(limits.get("ConcurrentAsyncGetReportInstances"));
+        assertNotNull(limits.get("ConcurrentSyncReportRuns"));
+        assertNotNull(limits.get("DailyApiRequests"));
+        assertNotNull(limits.get("DailyAsyncApexExecutions"));
+        assertNotNull(limits.get("DailyBulkApiRequests"));
     }
 
 }
diff --git a/integration-tests/salesforce/src/test/resources/mappings/getAccount.json b/integration-tests/salesforce/src/test/resources/mappings/getAccount.json
index a2c85fa..ca2f724 100644
--- a/integration-tests/salesforce/src/test/resources/mappings/getAccount.json
+++ b/integration-tests/salesforce/src/test/resources/mappings/getAccount.json
@@ -2,7 +2,7 @@
   "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",
+    "url": "/services/data/v50.0/query/?q=SELECT%20Id%2C%20AccountNumber%20FROM%20Account%20WHERE%20Id%20%3D%20%27001D000000IqhSLIAZ%27",
     "method": "GET"
   },
   "response": {