public function setUp() {
parent::setUp();
-
- $this->_populateOptionAndCustomGroup();
}
- public function _populateOptionAndCustomGroup() {
+ public function _populateOptionAndCustomGroup($type = NULL) {
$dataValues = array(
'integer' => array(1, 2, 3),
'number' => array(10.11, 20.22, 30.33),
'state_province' => array_rand(CRM_Core_PseudoConstant::stateProvince(FALSE, FALSE), 3),
'date' => NULL,
'contact' => NULL,
+ 'boolean' => NULL,
);
+ $dataValues = !empty($type) ? array($type => $dataValues[$type]) : $dataValues;
+
foreach ($dataValues as $dataType => $values) {
$this->optionGroup[$dataType] = array('values' => $values);
if (!empty($values)) {
// true tells quickCleanup to drop any tables that might have been created in the test
$this->quickCleanup($tablesToTruncate, TRUE);
+
+ // cleanup created option group for each custom-set before running next test
+ if (!empty($this->optionGroup)) {
+ foreach ($this->optionGroup as $type => $value) {
+ if (!empty($value['id'])) {
+ $this->callAPISuccess('OptionGroup', 'delete', array('id' => $value['id']));
+ }
+ }
+ }
}
public function testCreateCustomValue() {
+ $this->_populateOptionAndCustomGroup();
+
$customFieldDataType = CRM_Core_BAO_CustomField::dataType();
$dataToHtmlTypes = CRM_Core_BAO_CustomField::dataToHtml();
$count = 0;
foreach ($customFieldDataType as $dataType => $label) {
switch ($dataType) {
- case 'Date':
- case 'StateProvince';
+ case 'Country':
+ case 'StateProvince':
+ $this->foreignKeyChecksOff();
case 'String':
case 'Link':
case 'Int':
case 'Float':
case 'Money':
+ case 'Date':
+ case 'Boolean':
+
+ //Based on the custom field data-type choose desired SQL operators(to test with) and basic $type
if (in_array($dataType, array('String', 'Link'))) {
- $validSQLOperator = array('=', '!=', 'IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'IS NOT NULL', 'IS NULL');
+ $validSQLOperators = array('=', '!=', 'IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'IS NOT NULL', 'IS NULL');
$type = 'string';
}
+ elseif ($dataType == 'Boolean') {
+ $validSQLOperators = array('=', '!=', 'IS NOT NULL', 'IS NULL');
+ $type = 'boolean';
+ }
else {
if ($dataType == 'Country') {
- $type == 'country';
+ $type = 'country';
}
elseif ($dataType == 'StateProvince') {
$type = 'state_province';
else {
$type = $dataType == 'Int' ? 'integer' : 'number';
}
- $validSQLOperator = array('=', '!=', 'IN', 'NOT IN', '<=', '>=', '>', '<', 'IS NOT NULL', 'IS NULL');
+ $validSQLOperators = array('=', '!=', 'IN', 'NOT IN', '<=', '>=', '>', '<', 'IS NOT NULL', 'IS NULL');
}
+ //Create custom field of $dataType and html-type $html
foreach ($dataToHtmlTypes[$count] as $html) {
$params = array(
'custom_group_id' => $this->ids[$type]['custom_group_id'],
'html_type' => $html,
'default_value' => NULL,
);
- if (!in_array($html, array('Text', 'TextArea')) && !in_array($dataType, array('Link', 'Date', 'ContactReference'))) {
+ if (!in_array($html, array('Text', 'TextArea')) && !in_array($dataType, array('Link', 'Date', 'ContactReference', 'Boolean'))) {
$params += array('option_group_id' => $this->optionGroup[$type]['id']);
}
$customField = $this->customFieldCreate($params);
- $this->_testCustomValue($customField['values'][$customField['id']], $validSQLOperator, $type);
+ //Now test with $validSQLOperator SQL operators against its custom value(s)
+ $this->_testCustomValue($customField['values'][$customField['id']], $validSQLOperators, $type);
}
$count++;
break;
default:
- //TODO: Test case of Country fields remain as it throws foreign key contraint ONLY in test environment
+ // skipping File data-type
$count++;
break;
}
$selectedValue = $this->optionGroup[$type]['values'][1];
$notselectedValue = $this->optionGroup[$type]['values'][0];
}
+ elseif ($type == 'boolean') {
+ $selectedValue = 1;
+ $notselectedValue = 0;
+ }
else {
$selectedValue = $this->optionGroup[$type]['values'][0];
$notselectedValue = $this->optionGroup[$type]['values'][$count];
foreach ($sqlOps as $op) {
$qillOp = CRM_Utils_Array::value($op, CRM_Core_SelectValues::getSearchBuilderOperators(), $op);
- $description = "\nFind Contact where '$customField[label]' $qillOp ";
switch ($op) {
case '=':
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => (is_array($selectedValue) ? implode(CRM_Core_DAO::VALUE_SEPARATOR, $selectedValue) : $selectedValue)));
$this->assertEquals($contactId, $result['id']);
- echo $description . implode("[separator]", (array) $selectedValue);
break;
case '!=':
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => array($op => $notselectedValue)));
$this->assertEquals(TRUE, array_key_exists($contactId, $result['values']));
- echo $description . $notselectedValue;
break;
case '>':
if ($op == '>') {
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => array($op => $lesserSelectedValue)));
$this->assertEquals($contactId, $result['id']);
- echo $description . $lesserSelectedValue;
}
elseif ($op == '<') {
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => array($op => $selectedValue)));
$this->assertEquals($contactId2, $result['id']);
- echo $description . $selectedValue;
}
else {
$result = $this->callAPISuccess('Contact', 'create', array('contact_type' => 'Individual', 'email' => substr(sha1(rand()), 0, 7) . 'man3@yahoo.com'));
$this->callAPISuccess('CustomValue', 'create', array('entity_id' => $contactId3, 'custom_' . $customId => $greaterSelectedValue));
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => array($op => $selectedValue)));
- echo $description . $selectedValue;
$this->assertEquals($contactId, $result['values'][$contactId]['id']);
if ($op == '>=') {
case 'IN':
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => array($op => (array) $selectedValue)));
$this->assertEquals($contactId, $result['id']);
- echo $description . implode(",", (array) $selectedValue);
break;
case 'NOT IN':
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => array($op => (array) $notselectedValue)));
$this->assertEquals($contactId, $result['id']);
- echo $description . implode(",", (array) $notselectedValue);
break;
case 'LIKE':
$selectedValue = is_array($selectedValue) ? $selectedValue[0] : $selectedValue;
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => array($op => "%$selectedValue%")));
$this->assertEquals($contactId, $result['id']);
- echo $description . "%$selectedValue%";
break;
case 'NOT LIKE':
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => array($op => $notselectedValue)));
$this->assertEquals($contactId, $result['id']);
- echo $description . "'$notselectedValue'";
break;
case 'IS NULL':
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => array($op => 1)));
$this->assertEquals(FALSE, array_key_exists($contactId, $result['values']));
- echo $description;
break;
case 'IS NOT NULL':
$result = $this->callAPISuccess('Contact', 'Get', array('custom_' . $customId => array($op => 1)));
$this->assertEquals($contactId, $result['id']);
- echo $description;
break;
}
}
* @throws \CiviCRM_API3_Exception
*/
public function testAlterOptionValue() {
+ $this->_populateOptionAndCustomGroup('string');
+
$selectField = $this->customFieldCreate(array(
- 'custom_group_id' => $this->ids['single']['custom_group_id'],
+ 'custom_group_id' => $this->ids['string']['custom_group_id'],
'label' => 'Custom Select',
'html_type' => 'Select',
- 'option_values' => array(
- 'one' => 'Option1',
- 'two' => 'Option2',
- 'notone' => 'OptionNotOne',
- ),
+ 'option_group_id' => $this->optionGroup['string']['id'],
));
$selectField = civicrm_api3('customField', 'getsingle', array('id' => $selectField['id']));
$radioField = $this->customFieldCreate(array(
- 'custom_group_id' => $this->ids['single']['custom_group_id'],
+ 'custom_group_id' => $this->ids['string']['custom_group_id'],
'label' => 'Custom Radio',
'html_type' => 'Radio',
'option_group_id' => $selectField['option_group_id'],
));
$multiSelectField = $this->customFieldCreate(array(
- 'custom_group_id' => $this->ids['single']['custom_group_id'],
+ 'custom_group_id' => $this->ids['string']['custom_group_id'],
'label' => 'Custom Multi-Select',
'html_type' => 'Multi-Select',
'option_group_id' => $selectField['option_group_id'],
$selectName = 'custom_' . $selectField['id'];
$radioName = 'custom_' . $radioField['id'];
$multiSelectName = 'custom_' . $multiSelectField['id'];
- $controlFieldName = 'custom_' . $this->ids['single']['custom_field_id'];
+ $controlFieldName = 'custom_' . $this->ids['string']['custom_field_id'];
$params = array(
'first_name' => 'abc4',
'last_name' => 'xyz4',
'contact_type' => 'Individual',
'email' => 'man4@yahoo.com',
- $selectName => 'one',
- $multiSelectName => array('one', 'two', 'notone'),
- $radioName => 'notone',
+ $selectName => $this->optionGroup['string']['values'][0],
+ $multiSelectName => $this->optionGroup['string']['values'],
+ $radioName => $this->optionGroup['string']['values'][1],
// The control group in a science experiment should be unaffected
- $controlFieldName => 'one',
+ $controlFieldName => $this->optionGroup['string']['values'][2],
);
$contact = $this->callAPISuccess('Contact', 'create', $params);
'id' => $contact['id'],
'return' => array($selectName, $multiSelectName),
));
- $this->assertEquals('one', $result[$selectName]);
- $this->assertEquals(array('one', 'two', 'notone'), $result[$multiSelectName]);
+ $this->assertEquals($params[$selectName], $result[$selectName]);
+ $this->assertEquals($params[$multiSelectName], $result[$multiSelectName]);
$this->callAPISuccess('OptionValue', 'create', array(
'value' => 'one-modified',
'option_group_id' => $selectField['option_group_id'],
- 'name' => 'Option1',
+ 'name' => 'string 1',
'options' => array(
'match-mandatory' => array('option_group_id', 'name'),
),
));
// Ensure the relevant fields have been updated
$this->assertEquals('one-modified', $result[$selectName]);
- $this->assertEquals(array('one-modified', 'two', 'notone'), $result[$multiSelectName]);
+ $this->assertEquals(array('one-modified', $params[$radioName], $params[$controlFieldName]), $result[$multiSelectName]);
// This field should not have changed because we didn't alter this option
- $this->assertEquals('notone', $result[$radioName]);
+ $this->assertEquals($params[$radioName], $result[$radioName]);
// This should not have changed because this field doesn't use the affected option group
- $this->assertEquals('one', $result[$controlFieldName]);
+ $this->assertEquals($params[$controlFieldName], $result[$controlFieldName]);
}
}