blob: 59670575fd1e5d4299364b54f39ca016759e2e55 [file] [log] [blame]
/*
* 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.salesforce.api.dto.composite;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.thoughtworks.xstream.XStream;
import org.apache.camel.component.salesforce.api.utils.JsonUtils;
import org.apache.camel.component.salesforce.api.utils.XStreamUtils;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class SObjectBatchResponseTest {
@Test
public void shouldDeserializeFromJson() throws IOException {
final String json = "{\n"//
+ " \"hasErrors\" : false,\n"//
+ " \"results\" : [{\n"//
+ " \"statusCode\" : 204,\n"//
+ " \"result\" : null\n"//
+ " },{\n"//
+ " \"statusCode\" : 200,\n"//
+ " \"result\": {\n"//
+ " \"attributes\" : {\n"//
+ " \"type\" : \"Account\",\n"//
+ " \"url\" : \"/services/data/v34.0/sobjects/Account/001D000000K0fXOIAZ\"\n"//
+ " },\n"//
+ " \"Name\" : \"NewName\",\n"//
+ " \"BillingPostalCode\" : \"94105\",\n"//
+ " \"Id\" : \"001D000000K0fXOIAZ\"\n"//
+ " }\n"//
+ " }]\n"//
+ "}";
final ObjectMapper mapper = JsonUtils.createObjectMapper();
final SObjectBatchResponse response = mapper.readerFor(SObjectBatchResponse.class).readValue(json);
assertResponse(response);
}
@Test
public void shouldDeserializeFromXml() {
final String xml = "<batchResults>\n"//
+ " <hasErrors>false</hasErrors>\n"//
+ " <results>\n"//
+ " <batchResult>\n"//
+ " <statusCode>204</statusCode>\n"//
+ " <result/>\n"//
+ " </batchResult>\n"//
+ " <batchResult>\n"//
+ " <statusCode>200</statusCode>\n"//
+ " <result>\n"//
+ " <Account type=\"Account\" url=\"/services/data/v34.0/sobjects/Account/001D000000K0fXOIAZ\">\n"//
+ " <Id>001D000000K0fXOIAZ</Id>\n"//
+ " <Name>NewName</Name>\n"//
+ " <BillingPostalCode>94105</BillingPostalCode>"//
+ " </Account>\n"//
+ " </result>\n"//
+ " </batchResult>\n"//
+ " </results>\n"//
+ "</batchResults>";
final XStream xStream = XStreamUtils.createXStream(SObjectBatchResponse.class);
final SObjectBatchResponse response = (SObjectBatchResponse)xStream.fromXML(xml);
assertNotNull("Response should be parsed", response);
assertFalse("It should not have errors", response.hasErrors());
final List<SObjectBatchResult> results = response.getResults();
assertEquals("It should contain 2 results", 2, results.size());
final SObjectBatchResult firstResult = results.get(0);
assertEquals("First result should have status code of 204", 204, firstResult.getStatusCode());
assertTrue("First result contain no data", ((Map)firstResult.getResult()).isEmpty());
final SObjectBatchResult secondResult = results.get(1);
assertEquals("Second result should have status code of 200", 200, secondResult.getStatusCode());
@SuppressWarnings("unchecked")
final Map<String, Object> secondResultMap = (Map<String, Object>)secondResult.getResult();
@SuppressWarnings("unchecked")
final Map<String, Object> account = (Map<String, Object>)secondResultMap.get("Account");
@SuppressWarnings("unchecked")
final Map<String, String> attributes = (Map<String, String>)account.get("attributes");
assertEquals("Second result data should have attribute type set to `Account`", "Account", attributes.get("type"));
assertEquals("Second result data should have attribute url set as expected", "/services/data/v34.0/sobjects/Account/001D000000K0fXOIAZ", attributes.get("url"));
assertEquals("Second result data should have `NewName` set as expected", "NewName", account.get("Name"));
assertEquals("Second result data should have `BillingPostalCode` set as expected", "94105", account.get("BillingPostalCode"));
assertEquals("Second result data should have `Id` set as expected", "001D000000K0fXOIAZ", account.get("Id"));
}
static void assertResponse(final SObjectBatchResponse response) {
assertNotNull("Response should be parsed", response);
assertFalse("It should not have errors", response.hasErrors());
final List<SObjectBatchResult> results = response.getResults();
assertEquals("It should contain 2 results", 2, results.size());
final SObjectBatchResult firstResult = results.get(0);
assertEquals("First result should have status code of 204", 204, firstResult.getStatusCode());
assertNull("First result contain no data", firstResult.getResult());
final SObjectBatchResult secondResult = results.get(1);
assertEquals("Second result should have status code of 200", 200, secondResult.getStatusCode());
@SuppressWarnings("unchecked")
final Map<String, Object> secondResultMap = (Map<String, Object>)secondResult.getResult();
@SuppressWarnings("unchecked")
final Map<String, String> attributes = (Map<String, String>)secondResultMap.get("attributes");
assertEquals("Second result data should have attribute type set to `Account`", "Account", attributes.get("type"));
assertEquals("Second result data should have attribute url set as expected", "/services/data/v34.0/sobjects/Account/001D000000K0fXOIAZ", attributes.get("url"));
assertEquals("Second result data should have `NewName` set as expected", "NewName", secondResultMap.get("Name"));
assertEquals("Second result data should have `BillingPostalCode` set as expected", "94105", secondResultMap.get("BillingPostalCode"));
assertEquals("Second result data should have `Id` set as expected", "001D000000K0fXOIAZ", secondResultMap.get("Id"));
}
}