/*
* Copyright © 2013. Palomino Labs (http://palominolabs.com)
*
* Licensed 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 com.palominolabs.crm.sf.soap;
import com.palominolabs.crm.sf.soap.jaxwsstub.partner.FieldType;
import com.palominolabs.crm.sf.soap.jaxwsstub.partner.FieldTypeType;
import com.palominolabs.crm.sf.soap.jaxwsstub.partner.SoapTypeType;
import com.palominolabs.crm.sf.testutil.TestFixtureUtils;
import org.junit.Test;
import java.util.List;
import static com.palominolabs.crm.sf.testutil.ConnectionTestSfUserProps.getPropVal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class FieldDescriptionTest {
@Test
public void testBlankApiField() {
FieldType apiField = new FieldType();
FieldDescription field = new FieldDescription(apiField);
assertEquals(0, field.getByteLength());
assertNull(field.getCalculatedFormula());
assertNull(field.getControllerName());
assertNull(field.getDefaultValueFormula());
assertEquals(0, field.getDigits());
assertNull(field.getInlineHelpText());
assertNull(field.getLabel());
assertEquals(0, field.getLength());
assertNull(field.getName());
assertEquals(0, field.getPicklistValues().size());
assertEquals(0, field.getPrecision());
assertEquals(0, field.getReferenceTo().size());
assertNull(field.getRelationshipName());
assertNull(field.getRelationshipOrder());
assertEquals(0, field.getScale());
assertNull(field.getSoapType());
assertNull(field.getType());
assertFalse(field.isAutoNumber());
assertFalse(field.isCalculated());
assertFalse(field.isCaseSensitive());
assertFalse(field.isCreateable());
assertFalse(field.isCustom());
assertFalse(field.isDefaultedOnCreate());
assertNull(field.isDependentPicklist());
assertFalse(field.isDeprecatedAndHidden());
assertNull(field.isExternalId());
assertFalse(field.isFilterable());
assertFalse(field.isGroupable());
assertNull(field.isHtmlFormatted());
assertFalse(field.isIdLookup());
assertFalse(field.isNameField());
assertNull(field.isNamePointing());
assertFalse(field.isNillable());
assertFalse(field.isRestrictedPicklist());
assertNull(field.isSortable());
assertFalse(field.isUnique());
assertFalse(field.isUpdateable());
assertNull(field.isWriteRequiresMasterRead());
assertFalse(field.isPermissionable());
}
@SuppressWarnings({"unchecked"})
@Test
public void testPicklistField() throws ApiException {
FieldDescription field = this.getDescription("Lead", "Industry");
assertEquals(120, field.getByteLength());
assertNull(field.getCalculatedFormula());
assertNull(field.getControllerName());
assertNull(field.getDefaultValueFormula());
assertEquals(0, field.getDigits());
assertNull(field.getInlineHelpText());
assertEquals("Industry", field.getLabel());
assertEquals(40, field.getLength());
assertEquals("Industry", field.getName());
assertEquals(32, field.getPicklistValues().size());
List<PicklistEntry> expectedEntries =
(List<PicklistEntry>) TestFixtureUtils
.loadFixtures("/sObjectFixtures/ConnectionTests/industryPicklistEntries.xml");
for (int i = 0; i < expectedEntries.size(); i++) {
PicklistEntry expected = expectedEntries.get(i);
PicklistEntry actual = field.getPicklistValues().get(i);
assertEquals(expected.getLabel(), actual.getLabel());
assertEquals(expected.getValidFor(), actual.getValidFor());
assertEquals(expected.getValue(), actual.getValue());
assertEquals(expected.isActive(), actual.isActive());
assertEquals(expected.isDefaultValue(), actual.isDefaultValue());
}
assertEquals(0, field.getPrecision());
assertEquals(0, field.getReferenceTo().size());
assertNull(field.getRelationshipName());
assertNull(field.getRelationshipOrder());
assertEquals(0, field.getScale());
assertEquals(SoapTypeType.XSD___STRING, field.getSoapType());
assertEquals(FieldTypeType.PICKLIST, field.getType());
assertFalse(field.isAutoNumber());
assertFalse(field.isCalculated());
assertFalse(field.isCaseSensitive());
assertTrue(field.isCreateable());
assertFalse(field.isCustom());
assertFalse(field.isDefaultedOnCreate());
assertNull(field.isDependentPicklist());
assertFalse(field.isDeprecatedAndHidden());
assertNull(field.isExternalId());
assertTrue(field.isFilterable());
assertTrue(field.isGroupable());
assertNull(field.isHtmlFormatted());
assertFalse(field.isIdLookup());
assertFalse(field.isNameField());
assertEquals(Boolean.FALSE, field.isNamePointing());
assertTrue(field.isNillable());
assertFalse(field.isRestrictedPicklist());
assertEquals(Boolean.TRUE, field.isSortable());
assertFalse(field.isUnique());
assertTrue(field.isUpdateable());
assertNull(field.isWriteRequiresMasterRead());
assertTrue(field.isPermissionable());
}
@Test
public void testDependentPicklistFields() throws ApiException {
FieldDescription depender = this.getDescription("Contact", "Picklist_Depender__c");
FieldDescription controller = this.getDescription("Contact", "Picklist_Controller__c");
int[][] expected = {{1, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 1, 0},
{0, 0, 0, 1, 0, 0, 0, 1, 0}, {1, 1, 1, 1, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 1, 0, 1, 0},
{0, 0, 0, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 1}};
assertSame(Boolean.TRUE, depender.isDependentPicklist());
assertNull(controller.isDependentPicklist());
assertEquals(controller.getName(), depender.getControllerName());
int size = 9;
for (int dependendEntryIdx = 0; dependendEntryIdx < size; dependendEntryIdx++) {
PicklistEntry dependentEntry = depender.getPicklistValues().get(dependendEntryIdx);
for (int controllerEntryIdx = 0; controllerEntryIdx < size; controllerEntryIdx++) {
boolean expectedValue = expected[dependendEntryIdx][controllerEntryIdx] == 1;
assertEquals("entry " + dependentEntry.getLabel() + " pos " + controllerEntryIdx + " " +
dependentEntry.getValidFor(), expectedValue,
dependentEntry.getValidFor().get(controllerEntryIdx));
}
}
}
@Test
public void testStandardField() throws ApiException {
FieldDescription field = this.getDescription("Lead", "Email");
assertEquals(240, field.getByteLength());
assertNull(field.getCalculatedFormula());
assertNull(field.getControllerName());
assertNull(field.getDefaultValueFormula());
assertEquals(0, field.getDigits());
assertNull(field.getInlineHelpText());
assertEquals("Email", field.getLabel());
assertEquals(80, field.getLength());
assertEquals("Email", field.getName());
assertEquals(0, field.getPicklistValues().size());
assertEquals(0, field.getPrecision());
assertEquals(0, field.getReferenceTo().size());
assertNull(field.getRelationshipName());
assertNull(field.getRelationshipOrder());
assertEquals(0, field.getScale());
assertEquals(SoapTypeType.XSD___STRING, field.getSoapType());
assertEquals(FieldTypeType.EMAIL, field.getType());
assertFalse(field.isAutoNumber());
assertFalse(field.isCalculated());
assertFalse(field.isCaseSensitive());
assertTrue(field.isCreateable());
assertFalse(field.isCustom());
assertFalse(field.isDefaultedOnCreate());
assertNull(field.isDependentPicklist());
assertFalse(field.isDeprecatedAndHidden());
assertNull(field.isExternalId());
assertTrue(field.isFilterable());
assertTrue(field.isGroupable());
assertNull(field.isHtmlFormatted());
assertTrue(field.isIdLookup());
assertFalse(field.isNameField());
assertEquals(Boolean.FALSE, field.isNamePointing());
assertTrue(field.isNillable());
assertFalse(field.isRestrictedPicklist());
assertEquals(Boolean.TRUE, field.isSortable());
assertFalse(field.isUnique());
assertTrue(field.isUpdateable());
assertNull(field.isWriteRequiresMasterRead());
assertTrue(field.isPermissionable());
}
private FieldDescription getDescription(String object, String fieldName) throws ApiException {
String user = getPropVal("com.palominolabs.test.crm.sf.conn.dependentPicklist.sfLogin");
String passwd = getPropVal("com.palominolabs.test.crm.sf.conn.dependentPicklist.sfPassword");
ConnectionBundle bundle = TestConnectionUtils.getConnectionBundle(user, passwd);
PartnerConnection conn = bundle.getPartnerConnection();
SObjectDescription descr = conn.describeSObject(object);
List<FieldDescription> fields = descr.getFields();
for (FieldDescription f : fields) {
if (f.getName().equals(fieldName)) {
// found it
return f;
}
}
fail("Didn't find " + fieldName);
return null;
}
}