2 require_once 'CiviTest/CiviUnitTestCase.php';
3 require_once 'CiviTest/Contact.php';
4 require_once 'CiviTest/Custom.php';
5 class CRM_Core_BAO_CustomFieldTest
extends CiviUnitTestCase
{
8 'name' => 'Custom Field BAOs',
9 'description' => 'Test all Core_BAO_CustomField methods.',
10 'group' => 'CiviCRM BAO Tests',
18 function testCreateCustomfield() {
19 $customGroup = Custom
::createGroup(array(), 'Individual');
22 'data_type' => 'String',
23 'html_type' => 'Text',
24 'custom_group_id' => $customGroup->id
,
26 $customField = CRM_Core_BAO_CustomField
::create($fields);
27 $customFieldID = $this->assertDBNotNull('CRM_Core_DAO_CustomField', $customGroup->id
, 'id', 'custom_group_id',
28 'Database check for created CustomField.'
31 'id' => $customFieldID,
32 'label' => 'editTestFld',
34 'data_type' => 'String',
35 'html_type' => 'Text',
36 'custom_group_id' => $customGroup->id
,
39 $customField = CRM_Core_BAO_CustomField
::create($fields);
40 $this->assertDBNotNull('CRM_Core_DAO_CustomField', 1, 'id', 'is_active', 'Database check for edited CustomField.');
41 $this->assertDBNotNull('CRM_Core_DAO_CustomField', $fields['label'], 'id', 'label', 'Database check for edited CustomField.');
43 Custom
::deleteGroup($customGroup);
46 function testGetFields() {
47 $customGroup = Custom
::createGroup(array(), 'Individual');
49 'label' => 'testFld1',
50 'data_type' => 'String',
51 'html_type' => 'Text',
53 'custom_group_id' => $customGroup->id
,
55 $customField1 = CRM_Core_BAO_CustomField
::create($fields);
56 $customFieldID1 = $this->assertDBNotNull('CRM_Core_DAO_CustomField', $customGroup->id
, 'id', 'custom_group_id',
57 'Database check for created CustomField.'
60 'label' => 'testFld2',
61 'data_type' => 'String',
62 'html_type' => 'Text',
64 'custom_group_id' => $customGroup->id
,
66 $customField2 = CRM_Core_BAO_CustomField
::create($fields);
67 $customFieldID2 = $this->assertDBNotNull('CRM_Core_DAO_CustomField', $customGroup->id
, 'id', 'custom_group_id',
68 'Database check for created CustomField.'
70 $getCustomFields = array();
71 $getCustomFields = CRM_Core_BAO_CustomField
::getFields('Individual', TRUE, TRUE);
72 //CRM_Core_Error::debug('fdf',$getCustomFields);
73 //$this->assertEquals( 'testFld1', $getCustomFields[$customFieldID1][0], 'Confirm First Custom field label' );
74 //$this->assertEquals( 'testFld2', $getCustomFields[$customFieldID2][0], 'Confirm Second Custom field label' );
77 Custom
::deleteGroup($customGroup);
80 function testGetDisplayedValues() {
81 $customGroup = Custom
::createGroup(array(), 'Individual');
83 'label' => 'testCountryFld1',
84 'data_type' => 'Country',
85 'html_type' => 'Select Country',
87 'default_value' => 1228,
88 'custom_group_id' => $customGroup->id
,
90 $customField1 = CRM_Core_BAO_CustomField
::create($fields);
91 $customFieldID1 = $this->assertDBNotNull('CRM_Core_DAO_CustomField', $customGroup->id
, 'id', 'custom_group_id',
92 'Database check for created CustomField.'
95 $options[$customFieldID1]['attributes'] = array(
96 'label' => 'testCountryFld1',
97 'data_type' => 'Country',
98 'html_type' => 'Select Country',
100 $display = CRM_Core_BAO_CustomField
::getDisplayValue($fields['default_value'], $customFieldID1, $options);
102 $this->assertEquals('United States', $display, 'Confirm Country display Name');
104 Custom
::deleteGroup($customGroup);
107 function testDeleteCustomfield() {
108 $customGroup = Custom
::createGroup(array(), 'Individual');
110 'groupId' => $customGroup->id
,
111 'dataType' => 'Memo',
112 'htmlType' => 'TextArea',
115 $customField = Custom
::createField(array(), $fields);
116 $this->assertNotNull($customField);
117 CRM_Core_BAO_CustomField
::deleteField($customField);
118 $this->assertDBNull('CRM_Core_DAO_CustomField', $customGroup->id
, 'id',
119 'custom_group_id', 'Database check for deleted Custom Field.'
121 Custom
::deleteGroup($customGroup);
125 * Move a custom field from $groupA to $groupB. Make sure that data records are
126 * correctly matched and created.
128 function testMoveField() {
129 $countriesByName = array_flip(CRM_Core_PseudoConstant
::country(FALSE, FALSE));
130 $this->assertTrue($countriesByName['Andorra'] > 0);
132 'A' => Custom
::createGroup(array(
133 'title' => 'Test_Group A',
134 'name' => 'test_group_a',
135 'extends' => array('Individual'),
141 'B' => Custom
::createGroup(array(
142 'title' => 'Test_Group B',
143 'name' => 'test_group_b',
144 'extends' => array('Individual'),
152 'countryA' => Custom
::createField(array(
154 'groupId' => $groups['A']->id
,
155 'label' => 'Country A',
156 'dataType' => 'Country',
157 'htmlType' => 'Select Country',
159 'countryB' => Custom
::createField(array(
161 'groupId' => $groups['A']->id
,
162 'label' => 'Country B',
163 'dataType' => 'Country',
164 'htmlType' => 'Select Country',
166 'countryC' => Custom
::createField(array(
168 'groupId' => $groups['B']->id
,
169 'label' => 'Country C',
170 'dataType' => 'Country',
171 'htmlType' => 'Select Country',
175 'alice' => Contact
::createIndividual(array(
176 'first_name' => 'Alice',
177 'last_name' => 'Albertson',
178 'custom_' . $fields['countryA']->id
=> $countriesByName['Andorra'],
179 'custom_' . $fields['countryB']->id
=> $countriesByName['Barbados'],
181 'bob' => Contact
::createIndividual(array(
182 'first_name' => 'Bob',
183 'last_name' => 'Roberts',
184 'custom_' . $fields['countryA']->id
=> $countriesByName['Austria'],
185 'custom_' . $fields['countryB']->id
=> $countriesByName['Bermuda'],
186 'custom_' . $fields['countryC']->id
=> $countriesByName['Chad'],
188 'carol' => Contact
::createIndividual(array(
189 'first_name' => 'Carol',
190 'last_name' => 'Carolson',
191 'custom_' . $fields['countryC']->id
=> $countriesByName['Cambodia'],
196 CRM_Core_BAO_CustomField
::moveField($fields['countryB']->id
, $groups['B']->id
);
198 // Group[A] no longer has fields[countryB]
199 $errorScope = CRM_Core_TemporaryErrorScope
::useException();
201 $this->assertDBQuery(1, "SELECT {$fields['countryB']->column_name} FROM {$groups['A']->table_name}");
202 $this->fail('Expected exception when querying column on wrong table');
204 catch(PEAR_Exception
$e) {}
207 // Alice: Group[B] has fields[countryB], but fields[countryC] did not exist before
208 $this->assertDBQuery(1,
209 "SELECT count(*) FROM {$groups['B']->table_name}
211 AND {$fields['countryB']->column_name} = %3
212 AND {$fields['countryC']->column_name} is null",
214 1 => array($contacts['alice'], 'Integer'),
215 3 => array($countriesByName['Barbados'], 'Integer'),
219 // Bob: Group[B] has merged fields[countryB] and fields[countryC] on the same record
220 $this->assertDBQuery(1,
221 "SELECT count(*) FROM {$groups['B']->table_name}
223 AND {$fields['countryB']->column_name} = %3
224 AND {$fields['countryC']->column_name} = %4",
226 1 => array($contacts['bob'], 'Integer'),
227 3 => array($countriesByName['Bermuda'], 'Integer'),
228 4 => array($countriesByName['Chad'], 'Integer'),
232 // Carol: Group[B] still has fields[countryC] but did not get fields[countryB]
233 $this->assertDBQuery(1,
234 "SELECT count(*) FROM {$groups['B']->table_name}
236 AND {$fields['countryB']->column_name} is null
237 AND {$fields['countryC']->column_name} = %4",
239 1 => array($contacts['carol'], 'Integer'),
240 4 => array($countriesByName['Cambodia'], 'Integer'),
244 Custom
::deleteGroup($groups['A']);
245 Custom
::deleteGroup($groups['B']);