Fix and extend custom field options test CRM-12464
authorColeman Watts <coleman@civicrm.org>
Mon, 3 Jun 2013 22:40:29 +0000 (15:40 -0700)
committerColeman Watts <coleman@civicrm.org>
Mon, 3 Jun 2013 22:40:29 +0000 (15:40 -0700)
----------------------------------------
* CRM-12464: Add PseudoConstants to Schema Metadata
  http://issues.civicrm.org/jira/browse/CRM-12464

CRM/Core/BAO/CustomField.php
CRM/Core/PseudoConstant.php
tests/phpunit/CRM/Core/PseudoConstantTest.php

index eae36c04d0a8d66150792f0ea208caefb7e136fb..b03e09fc1dd9eb387dd5565795d6d642afb5f637 100644 (file)
@@ -2167,6 +2167,8 @@ ORDER BY html_type";
   }
 
   static function buildOption($field, &$options) {
+    // Fixme - adding anything but options to the $options array is a bad idea
+    // What if an option had the key 'attributes'?
     $options['attributes'] = array(
       'label' => $field['label'],
       'data_type' => $field['data_type'],
index b8e56958b287079a397e39cb8e809eb85b1d1324..c32eb44840ac13c032f9c735c0f95a4ae969d473 100644 (file)
@@ -229,7 +229,7 @@ class CRM_Core_PseudoConstant {
     $flip = !empty($params['flip']);
 
     // Custom fields are not in the schema
-    if (strpos($fieldName, 'custom') === 0) {
+    if (strpos($fieldName, 'custom') === 0 && is_numeric($fieldName[7])) {
       $dao = new CRM_Core_DAO_CustomField;
       $dao->id = (int) substr($fieldName, 7);
       $dao->find(TRUE);
@@ -237,6 +237,8 @@ class CRM_Core_PseudoConstant {
       $dao->free();
       $output = array();
       CRM_Core_BAO_CustomField::buildOption($customField, $output);
+      // @see FIXME note in CRM_Core_BAO_CustomField::buildOption()
+      unset($output['attributes']);
       return $flip ? array_flip($output) : $output;
     }
 
index 67b8a80848a28a3cde04b7948bf208d5c10e3bef..146244f6310d0384f8bf9e63e150794641f44723 100644 (file)
@@ -60,7 +60,27 @@ class CRM_Core_PseudoConstantTest extends CiviUnitTestCase {
     $result = civicrm_api('customGroup', 'create', $api_params);
     $this->assertAPISuccess($result);
 
-    // Create a Group for testing.
+    // Add a custom field to the above field group.
+    $api_params = array(
+      'version' => 3,
+      'debug' => 1,
+      'custom_group_id' => $result['id'],
+      'label' => $custom_group_name,
+      'html_type' => 'Select',
+      'data_type' => 'String',
+      'is_active' => TRUE,
+      'option_values' => array(array(
+        'label' => 'Foo',
+        'value' => 'foo',
+        'is_active' => 1,
+        'weight' => 0,
+      )),
+    );
+    $result = civicrm_api('custom_field', 'create', $api_params);
+    $this->assertAPISuccess($result);
+    $customFieldId = $result['id'];
+
+    // Create a Contact Group for testing.
     $group_name = md5(microtime());
     $api_params = array(
       'version' => 3,
@@ -417,6 +437,11 @@ class CRM_Core_PseudoConstantTest extends CiviUnitTestCase {
           'sample' => array('en_US' => 'English (United States)'),
           'max' => 250,
         ),
+        array(
+          'fieldName' => "custom_$customFieldId",
+          'sample' => array('foo' => 'Foo'),
+          'max' => 1,
+        ),
       ),
       'CRM_Batch_DAO_Batch' => array(
         array(