Add extra output info when getsingle fails as this seems to be common in intermittant...
[civicrm-core.git] / Civi / Test / Api3TestTrait.php
index 46880df32bf573f261aa8d116b5ba1d7145034a9..96e41b9d7a73d7a04a5e1bd06eb837586437c704 100644 (file)
@@ -160,7 +160,7 @@ trait Api3TestTrait {
    * @param string $entity
    * @param array $params
    * @param null $count
-   * @throws Exception
+   * @throws \Exception
    * @return array|int
    */
   public function callAPISuccessGetCount($entity, $params, $count = NULL) {
@@ -170,7 +170,7 @@ trait Api3TestTrait {
     );
     $result = $this->civicrm_api($entity, 'getcount', $params);
     if (!is_int($result) || !empty($result['is_error']) || isset($result['values'])) {
-      throw new Exception('Invalid getcount result : ' . print_r($result, TRUE) . " type :" . gettype($result));
+      throw new \Exception('Invalid getcount result : ' . print_r($result, TRUE) . " type :" . gettype($result));
     }
     if (is_int($count)) {
       $this->assertEquals($count, $result, "incorrect count returned from $entity getcount");
@@ -193,7 +193,7 @@ trait Api3TestTrait {
    *   - array
    *   - object
    *
-   * @throws Exception
+   * @throws \Exception
    * @return array|int
    */
   public function callAPISuccessGetSingle($entity, $params, $checkAgainst = NULL) {
@@ -202,7 +202,12 @@ trait Api3TestTrait {
     );
     $result = $this->civicrm_api($entity, 'getsingle', $params);
     if (!is_array($result) || !empty($result['is_error']) || isset($result['values'])) {
-      throw new \Exception('Invalid getsingle result' . print_r($result, TRUE));
+      $unfilteredResult = $this->civicrm_api($entity, 'get', $params);
+      throw new \Exception(
+        'Invalid getsingle result' . print_r($result, TRUE)
+        . "\n entity: $entity . \n params \n " . print_r($params, TRUE)
+        . "\n entities retrieved with blank params \n" .  print_r($unfilteredResult, TRUE)
+      );
     }
     if ($checkAgainst) {
       // @todo - have gone with the fn that unsets id? should we check id?
@@ -235,6 +240,9 @@ trait Api3TestTrait {
       'debug' => 1,
     );
     $result = $this->civicrm_api($entity, 'getvalue', $params);
+    if (is_array($result) && (!empty($result['is_error']) || isset($result['values']))) {
+      throw new \Exception('Invalid getvalue result' . print_r($result, TRUE));
+    }
     if ($type) {
       if ($type == 'integer') {
         // api seems to return integers as strings