From 5123cb11c3de594928afe71003906f3a37bde206 Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Tue, 18 Jun 2019 11:52:34 +1000 Subject: [PATCH] Add in unit test demonstrating the fatal error generated --- .../phpunit/CRM/Activity/BAO/ActivityTest.php | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/tests/phpunit/CRM/Activity/BAO/ActivityTest.php b/tests/phpunit/CRM/Activity/BAO/ActivityTest.php index e540f1f760..56a4f4327c 100644 --- a/tests/phpunit/CRM/Activity/BAO/ActivityTest.php +++ b/tests/phpunit/CRM/Activity/BAO/ActivityTest.php @@ -6,6 +6,8 @@ */ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { + private $allowedContactsACL = []; + public function setUp() { parent::setUp(); $this->prepareForACLs(); @@ -153,6 +155,45 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { $this->contactDelete($targetContactId); } + /** + * Test Assigning a target contact but then the logged in user cannot see the contact + */ + public function testTargetContactNotavaliable() { + $contactId = $this->individualCreate(); + $params = array( + 'first_name' => 'liz', + 'last_name' => 'hurleey', + ); + $targetContactId = $this->individualCreate($params); + + $params = array( + 'source_contact_id' => $contactId, + 'subject' => 'Scheduling Meeting', + 'activity_type_id' => 2, + 'target_contact_id' => array($targetContactId), + 'activity_date_time' => date('Ymd'), + ); + + CRM_Activity_BAO_Activity::create($params); + + // set custom hook + $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'hook_civicrm_aclWhereClause')); + + CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM'); + + $this->allowedContactsACL = array($contactId); + + // get logged in user + $user_id = $this->createLoggedInUser(); + $activityGetParams = CRM_Core_Page_AJAX::defaultSortAndPagerParams(); + $activityGetParams += ['contact_id' => $contactId]; + $activities = CRM_Activity_BAO_Activity::getContactActivitySelector($activityGetParams); + $this->assertEquals(1, $activites[1]['target_contact_count']); + $this->assertEquals([], $activites[1]['target_contact_name']); + $config = CRM_Core_Config::singleton(); + $config->userPermissionClass->permissions = array(); + } + /** * Test case for deleteActivity() method. * @@ -1289,4 +1330,14 @@ $text $this->callAPISuccess('Activity', 'create', ['id' => 12, 'activity_type_id' => 'Bulk Email']); } + /** + * ACL HOOK implementation for various tests + */ + public function hook_civicrm_aclWhereClause($type, &$tables, &$whereTables, &$contactID, &$where) { + if (!empty($this->allowedContactsACL)) { + $contact_id_list = implode(',', $this->allowedContactsACL); + $where = " contact_a.id IN ($contact_id_list)"; + } + } + } -- 2.25.1