Merge branch 'JohnFF-patch-1'
[civicrm-core.git] / tests / phpunit / api / v3 / ACLPermissionTest.php
index e8b49c3f664a1d9881506b62a7d095cf60f8a978..6b18decdc8139852cc8a52c5b62234015504b49b 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.3                                                |
+ | CiviCRM version 4.5                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013                                |
+ | Copyright CiviCRM LLC (c) 2004-2014                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -30,17 +30,21 @@ require_once 'CiviTest/CiviUnitTestCase.php';
 /**
  * This class is intended to test ACL permission using the multisite module
  *
- *  @package CiviCRM_APIv3
- *  @subpackage API_Contact
+ * @package CiviCRM_APIv3
+ * @subpackage API_Contact
  */
 
 class api_v3_ACLPermissionTest extends CiviUnitTestCase {
   protected $_apiversion = 3;
   protected $_params;
-  protected $hookClass = null;
+
+  /**
+   * @var CRM_Utils_Hook_UnitTests
+   */
+  protected $hookClass = NULL;
   public $DBResetRequired = FALSE;
 
-  public $_eNoticeCompliant = TRUE;
+
 
   protected $_entity;
 
@@ -53,23 +57,25 @@ class api_v3_ACLPermissionTest extends CiviUnitTestCase {
     $config = CRM_Core_Config::singleton();
     $config->userPermissionClass->permissions = array();
   }
-/**
- * (non-PHPdoc)
- * @see CiviUnitTestCase::tearDown()
- */
+
+  /**
+   * (non-PHPdoc)
+   * @see CiviUnitTestCase::tearDown()
+   */
   function tearDown() {
     CRM_Utils_Hook::singleton()->reset();
     $tablesToTruncate = array(
-        'civicrm_contact',
+      'civicrm_contact',
     );
     $this->quickCleanup($tablesToTruncate);
     $config = CRM_Core_Config::singleton();
     unset($config->userPermissionClass->permissions);
   }
-/**
- * Function tests that an empty where hook returns no results
- */
-  function testContactGetNoResultsHook(){
+
+  /**
+   * Function tests that an empty where hook returns no results
+   */
+  function testContactGetNoResultsHook() {
     $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereHookNoResults'));
     $result = $this->callAPISuccess('contact', 'get', array(
       'check_permissions' => 1,
@@ -80,25 +86,26 @@ class api_v3_ACLPermissionTest extends CiviUnitTestCase {
 
   /**
    * Function tests all results are returned
-  */
-  function testContactGetAllResultsHook(){
+   */
+  function testContactGetAllResultsHook() {
     $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereHookAllResults'));
     $result = $this->callAPISuccess('contact', 'get', array(
-        'check_permissions' => 1,
-        'return' => 'display_name',
+      'check_permissions' => 1,
+      'return' => 'display_name',
     ));
 
     $this->assertEquals(2, $result['count']);
   }
+
   /**
    * Function tests that deleted contacts are not returned
-  */
-  function testContactGetPermissionHookNoDeleted(){
-    $result = $this->callAPISuccess('contact', 'create', array('id' => 2, 'is_deleted' => 1));
+   */
+  function testContactGetPermissionHookNoDeleted() {
+    $this->callAPISuccess('contact', 'create', array('id' => 2, 'is_deleted' => 1));
     $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereHookAllResults'));
     $result = $this->callAPISuccess('contact', 'get', array(
-        'check_permissions' => 1,
-        'return' => 'display_name',
+      'check_permissions' => 1,
+      'return' => 'display_name',
     ));
     $this->assertEquals(1, $result['count']);
   }
@@ -106,20 +113,20 @@ class api_v3_ACLPermissionTest extends CiviUnitTestCase {
   /**
    * test permissions limited by hook
    */
-  function testContactGetHookLimitingHook(){
+  function testContactGetHookLimitingHook() {
     $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereOnlySecond'));
 
     $result = $this->callAPISuccess('contact', 'get', array(
       'check_permissions' => 1,
       'return' => 'display_name',
-      ));
+    ));
     $this->assertEquals(1, $result['count']);
   }
 
-/**
- * confirm that without check permissions we still get 2 contacts returned
- */
-  function testContactGetHookLimitingHookDontCheck(){
+  /**
  * confirm that without check permissions we still get 2 contacts returned
  */
+  function testContactGetHookLimitingHookDontCheck() {
     //
     $result = $this->callAPISuccess('contact', 'get', array(
       'check_permissions' => 0,
@@ -127,10 +134,11 @@ class api_v3_ACLPermissionTest extends CiviUnitTestCase {
     ));
     $this->assertEquals(2, $result['count']);
   }
+
   /**
    * Check that id works as a filter
    */
-  function testContactGetIDFilter(){
+  function testContactGetIDFilter() {
     $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereHookAllResults'));
     $result = $this->callAPISuccess('contact', 'get', array(
       'sequential' => 1,
@@ -142,108 +150,109 @@ class api_v3_ACLPermissionTest extends CiviUnitTestCase {
     $this->assertEquals(2, $result['id']);
   }
 
-/**
- * Check that address IS returned
- */
-    function testContactGetAddressReturned(){
-      $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereOnlySecond'));
-      $fullresult = $this->callAPISuccess('contact', 'get', array(
-          'sequential' => 1,
-      ));
-      //return doesn't work for all keys - can't fix that here so let's skip ...
-      //prefix & suffix are inconsistent due to  CRM-7929
-      // unsure about others but return doesn't work on them
-      $elementsReturnDoesntSupport = array(
-        'prefix_id',
-        'prefix',
-        'suffix_id',
-        'suffix',
-        'gender_id',
-        'gender',
-        'current_employer',
-        'phone_id',
-        'phone_type_id',
-        'phone',
-        'worldregion_id',
-        'world_region');
-      $expectedReturnElements = array_diff(array_keys($fullresult['values'][0]),$elementsReturnDoesntSupport);
-      $result = $this->callAPISuccess('contact', 'get', array(
-          'check_permissions' => 1,
-          'return' => $expectedReturnElements,
-          'sequential' => 1,
-      ));
-      $this->assertEquals(1, $result['count']);
-      foreach ($expectedReturnElements as $element){
-        $this->assertArrayHasKey($element, $result['values'][0]);
-      }
-    }
-    /**
-     * Check that pledge IS not returned
-    */
-    function testContactGetPledgeIDNotReturned(){
-      $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereHookAllResults'));
-      $fullresult = $this->callAPISuccess('contact', 'get', array(
-          'sequential' => 1,
-      ));
-      $result = $this->callAPISuccess('contact', 'get', array(
-        'check_permissions' => 1,
-        'return' => 'pledge_id',
-        'sequential' => 1,
-      ));
-      $this->assertArrayNotHasKey('pledge_id', $result['values'][0]);
+  /**
+   * Check that address IS returned
+   */
+  function testContactGetAddressReturned() {
+    $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereOnlySecond'));
+    $fullresult = $this->callAPISuccess('contact', 'get', array(
+      'sequential' => 1,
+    ));
+    //return doesn't work for all keys - can't fix that here so let's skip ...
+    //prefix & suffix are inconsistent due to  CRM-7929
+    // unsure about others but return doesn't work on them
+    $elementsReturnDoesntSupport = array(
+      'prefix',
+      'suffix',
+      'gender',
+      'current_employer',
+      'phone_id',
+      'phone_type_id',
+      'phone',
+      'worldregion_id',
+      'world_region'
+    );
+    $expectedReturnElements = array_diff(array_keys($fullresult['values'][0]), $elementsReturnDoesntSupport);
+    $result = $this->callAPISuccess('contact', 'get', array(
+      'check_permissions' => 1,
+      'return' => $expectedReturnElements,
+      'sequential' => 1,
+    ));
+    $this->assertEquals(1, $result['count']);
+    foreach ($expectedReturnElements as $element) {
+      $this->assertArrayHasKey($element, $result['values'][0]);
     }
+  }
+
+  /**
+   * Check that pledge IS not returned
+   */
+  function testContactGetPledgeIDNotReturned() {
+    $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereHookAllResults'));
+    $this->callAPISuccess('contact', 'get', array(
+      'sequential' => 1,
+    ));
+    $result = $this->callAPISuccess('contact', 'get', array(
+      'check_permissions' => 1,
+      'return' => 'pledge_id',
+      'sequential' => 1,
+    ));
+    $this->assertArrayNotHasKey('pledge_id', $result['values'][0]);
+  }
+
+  /**
+   * Check that pledge IS not an allowable filter
+   */
+  function testContactGetPledgeIDNotFiltered() {
+    $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereHookAllResults'));
+    $this->callAPISuccess('contact', 'get', array(
+      'sequential' => 1,
+    ));
+    $result = $this->callAPISuccess('contact', 'get', array(
+      'check_permissions' => 1,
+      'pledge_id' => 1,
+      'sequential' => 1,
+    ));
+    $this->assertEquals(2, $result['count']);
+  }
 
-    /**
-     * Check that pledge IS not an allowable filter
-    */
-    function testContactGetPledgeIDNotFiltered(){
-      $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereHookAllResults'));
-      $fullresult = $this->callAPISuccess('contact', 'get', array(
-          'sequential' => 1,
-      ));
-      $result = $this->callAPISuccess('contact', 'get', array(
+  /**
+   * Check that chaining doesn't bypass permissions
+   */
+  function testContactGetPledgeNotChainable() {
+    $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereOnlySecond'));
+    $this->callAPISuccess('contact', 'get', array(
+      'sequential' => 1,
+    ));
+    $this->callAPIFailure('contact', 'get', array(
         'check_permissions' => 1,
-        'pledge_id' => 1,
+        'api.pledge.get' => 1,
         'sequential' => 1,
-      ));
-      $this->assertEquals(2, $result['count']);
-    }
-
-    /**
-     * Check that chaining doesn't bypass permissions
-    */
-    function testContactGetPledgeNotChainable(){
-      $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereOnlySecond'));
-      $fullresult = $this->callAPISuccess('contact', 'get', array(
-          'sequential' => 1,
-      ));
-      $result = $this->callAPIFailure('contact', 'get', array(
-          'check_permissions' => 1,
-          'api.pledge.get' => 1,
-          'sequential' => 1,
       ),
       'Error in call to pledge_get : API permission check failed for pledge/get call; missing permission: access CiviCRM.'
-      );
-    }
+    );
+  }
 
   /**
    * no results returned
    */
   function aclWhereHookNoResults($type, &$tables, &$whereTables, &$contactID, &$where) {
   }
+
   /**
    * all results returned
-  */
+   * @implements CRM_Utils_Hook::aclWhereClause
+   */
   function aclWhereHookAllResults($type, &$tables, &$whereTables, &$contactID, &$where) {
     $where = " (1) ";
   }
+
   /**
    * full results returned
-  */
+   * @implements CRM_Utils_Hook::aclWhereClause
+   */
   function aclWhereOnlySecond($type, &$tables, &$whereTables, &$contactID, &$where) {
     $where = " contact_a.id > 1";
   }
-
-
 }