More fixes for API option matching and validation CRM-12464
authorColeman Watts <coleman@civicrm.org>
Fri, 7 Jun 2013 21:47:34 +0000 (14:47 -0700)
committerColeman Watts <coleman@civicrm.org>
Fri, 7 Jun 2013 21:47:34 +0000 (14:47 -0700)
----------------------------------------
* CRM-12464: Add PseudoConstants to Schema Metadata
  http://issues.civicrm.org/jira/browse/CRM-12464

api/v3/utils.php
tests/phpunit/api/v3/ActivityTest.php

index fefb043a4aad5c284425d74af19da7c986d6dd91..54f0d378ecabeb04fd7b0761ca5b08790dd07130 100644 (file)
@@ -1452,9 +1452,11 @@ function _civicrm_api3_validate_integer(&$params, &$fieldName, &$fieldInfo, $ent
       _civicrm_api3_api_match_pseudoconstant($params, $entity, $fieldName, $fieldInfo);
     }
 
-    // After swapping options, ensure we have an integer
-    if (!is_numeric($params[$fieldName]) || (int) $params[$fieldName] != $params[$fieldName]) {
-      throw new API_Exception("$fieldname is not a valid integer", 2001, array('error_field' => $fieldname,"type" => "integer"));
+    // After swapping options, ensure we have an integer(s)
+    foreach ((array) ($params[$fieldName]) as $value) {
+      if (!is_numeric($value) || (int) $value != $value) {
+        throw new API_Exception("$fieldName is not a valid integer", 2001, array('error_field' => $fieldName, "type" => "integer"));
+      }
     }
 
     // Check our field length
@@ -1573,7 +1575,7 @@ function _civicrm_api3_api_match_pseudoconstant_value(&$value, $options, $fieldN
   $options = array_map("strtolower", $options);
   $value = array_search($value, $options);
   if ($value === FALSE) {
-    throw new Exception($errorMsg);
+    throw new API_Exception($errorMsg, 2001, array('error_field' => $fieldName));
   }
 }
 
index e8b26cbe8034a263535c844ff9bbc880c3a47d8b..2648ed825068a751984489876069315734b0332a 100644 (file)
@@ -310,7 +310,8 @@ class api_v3_ActivityTest extends CiviUnitTestCase {
     $result = civicrm_api('activity', 'create', $params);
     $this->assertEquals($result['is_error'], 1, "In line " . __LINE__);
     $this->assertEquals("'44' is not a valid option for field priority_id", $result['error_message']);
-    $this->assertEquals('priority_id',$result['error_field']);
+    $this->assertEquals(2001, $result['error_code']);
+    $this->assertEquals('priority_id', $result['error_field']);
   }
 
   function testActivityCreateWithValidStringPriority() {
@@ -1094,7 +1095,6 @@ class api_v3_ActivityTest extends CiviUnitTestCase {
     $params['target_contact_id'] = array($contact2 => $contact2);
     $result = civicrm_api('Activity', 'Create', $params);
 
-    $result = civicrm_api('activity', 'create', $params);
     $activityId = $result['id'];
     $this->assertAPISuccess($result);
     $getParams = array(