use of org.apache.camel.component.salesforce.api.dto.composite.SObjectBatchResponse in project camel by apache.
the class CompositeApiBatchIntegrationTest method shouldSupportRelatedObjectRetrieval.
@Test
public void shouldSupportRelatedObjectRetrieval() throws IOException {
if (Version.create(version).compareTo(Version.create("36.0")) < 0) {
return;
}
final SObjectBatch batch = new SObjectBatch("36.0");
batch.addGetRelated("Account", accountId, "CreatedBy");
final SObjectBatchResponse response = testBatch(batch);
final List<SObjectBatchResult> results = response.getResults();
final SObjectBatchResult batchResult = results.get(0);
@SuppressWarnings("unchecked") final Map<String, Object> result = (Map<String, Object>) batchResult.getResult();
// JSON and XML structure are different, XML has `User` node, JSON does not
@SuppressWarnings("unchecked") final Map<String, String> data = (Map<String, String>) result.getOrDefault("User", result);
final SalesforceLoginConfig loginConfig = LoginConfigHelper.getLoginConfig();
assertEquals(loginConfig.getUserName(), data.get("Username"));
}
use of org.apache.camel.component.salesforce.api.dto.composite.SObjectBatchResponse in project camel by apache.
the class CompositeApiBatchIntegrationTest method shouldSubmitBatchUsingCompositeApi.
@Test
public void shouldSubmitBatchUsingCompositeApi() {
final SObjectBatch batch = new SObjectBatch(version);
final Account updates = new Account();
updates.setName("NewName");
batch.addUpdate("Account", accountId, updates);
final Account newAccount = new Account();
newAccount.setName("Account created from Composite batch API");
batch.addCreate(newAccount);
batch.addGet("Account", accountId, "Name", "BillingPostalCode");
batch.addDelete("Account", accountId);
final SObjectBatchResponse response = template.requestBody(batchuri, batch, SObjectBatchResponse.class);
assertNotNull("Response should be provided", response);
assertFalse(response.hasErrors());
}
use of org.apache.camel.component.salesforce.api.dto.composite.SObjectBatchResponse in project camel by apache.
the class CompositeApiBatchIntegrationTest method shouldSupportObjectCreation.
@Test
public void shouldSupportObjectCreation() {
final SObjectBatch batch = new SObjectBatch(version);
final Account newAccount = new Account();
newAccount.setName("Account created from Composite batch API");
batch.addCreate(newAccount);
final SObjectBatchResponse response = testBatch(batch);
final List<SObjectBatchResult> results = response.getResults();
final SObjectBatchResult batchResult = results.get(0);
@SuppressWarnings("unchecked") final Map<String, Object> result = (Map<String, Object>) batchResult.getResult();
// JSON and XML structure are different, XML has `Result` node, JSON does not
@SuppressWarnings("unchecked") final Map<String, Object> creationOutcome = (Map<String, Object>) result.getOrDefault("Result", result);
assertNotNull(creationOutcome.get("id"));
}
use of org.apache.camel.component.salesforce.api.dto.composite.SObjectBatchResponse in project camel by apache.
the class CompositeApiProcessor method processCompositeBatchResponse.
void processCompositeBatchResponse(final Exchange exchange, final Optional<SObjectBatchResponse> responseBody, final SalesforceException exception, final AsyncCallback callback) {
try {
if (!responseBody.isPresent()) {
exchange.setException(exception);
} else {
final Message in = exchange.getIn();
final Message out = exchange.getOut();
final SObjectBatchResponse response = responseBody.get();
out.copyFromWithNewBody(in, response);
}
} finally {
// notify callback that exchange is done
callback.done(false);
}
}
use of org.apache.camel.component.salesforce.api.dto.composite.SObjectBatchResponse in project camel by apache.
the class CompositeApiBatchIntegrationTest method shouldSupportSearch.
@Test
public void shouldSupportSearch() {
final SObjectBatch batch = new SObjectBatch(version);
// we cannot rely on search returning the `Composite API Batch` account as the search indexer runs
// asynchronously to object creation, so that account might not be indexed at this time, so we search for
// `United` Account that should be created with developer instance
batch.addSearch("FIND {United} IN Name Fields RETURNING Account (Name)");
final SObjectBatchResponse response = testBatch(batch);
final List<SObjectBatchResult> results = response.getResults();
final SObjectBatchResult batchResult = results.get(0);
final Object firstBatchResult = batchResult.getResult();
final Object searchResult;
if (firstBatchResult instanceof Map) {
// the JSON and XML responses differ, XML has a root node which can be either SearchResults or
// SearchResultWithMetadata
// furthermore version 37.0 search results are no longer array, but dictionary of {
// "searchRecords": [<array>] } and the XML output changed to <SearchResultWithMetadata><searchRecords>, so
// we have:
// @formatter:off
// | version | format | response syntax |
// | 34 | JSON | {attributes={type=Account... |
// | 34 | XML | {SearchResults={attributes={type=Account... |
// | 37 | JSON | {searchRecords=[{attributes={type=Account... |
// | 37 | XML | {SearchResultWithMetadata={searchRecords={attributes={type=Account... |
// @formatter:on
@SuppressWarnings("unchecked") final Map<String, Object> tmp = (Map<String, Object>) firstBatchResult;
@SuppressWarnings("unchecked") final Map<String, Object> nested = (Map<String, Object>) tmp.getOrDefault("SearchResultWithMetadata", tmp);
// JSON and XML structure are different, XML has `SearchResults` node, JSON does not
searchResult = nested.getOrDefault("searchRecords", nested.getOrDefault("SearchResults", nested));
} else {
searchResult = firstBatchResult;
}
final Map<String, Object> result;
if (searchResult instanceof List) {
@SuppressWarnings("unchecked") final Map<String, Object> tmp = (Map<String, Object>) ((List) searchResult).get(0);
result = tmp;
} else {
@SuppressWarnings("unchecked") final Map<String, Object> tmp = (Map<String, Object>) searchResult;
result = tmp;
}
assertNotNull(result.get("Name"));
}
Aggregations