X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=tests%2Fphpunit%2FCRM%2FActivity%2FBAO%2FActivityTest.php;h=bbf70d73f68f380a1a8fd5fd85d034c2f538e707;hb=a0741dc66a56012dca28350f8c1ddaad5ec03918;hp=1921d5ef1565e0d11814c47c392925fc63a6d5fb;hpb=c6f81d2728c7167353a19c61c98881278506cfb2;p=civicrm-core.git diff --git a/tests/phpunit/CRM/Activity/BAO/ActivityTest.php b/tests/phpunit/CRM/Activity/BAO/ActivityTest.php index 1921d5ef15..bbf70d73f6 100644 --- a/tests/phpunit/CRM/Activity/BAO/ActivityTest.php +++ b/tests/phpunit/CRM/Activity/BAO/ActivityTest.php @@ -5,6 +5,7 @@ * @group headless */ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { + public function setUp() { parent::setUp(); $this->prepareForACLs(); @@ -29,39 +30,6 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { parent::tearDown(); } - /** - * Setup or clean up SMS tests - * @param bool $teardown - * - * @throws \CiviCRM_API3_Exception - */ - public function setupForSmsTests($teardown = FALSE) { - require_once 'CiviTest/CiviTestSMSProvider.php'; - - // Option value params for CiviTestSMSProvider - $groupID = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', 'sms_provider_name', 'id', 'name'); - $params = array( - 'option_group_id' => $groupID, - 'label' => 'unittestSMS', - 'value' => 'unit.test.sms', - 'name' => 'CiviTestSMSProvider', - 'is_default' => 1, - 'is_active' => 1, - 'version' => 3, - ); - - if ($teardown) { - // Test completed, delete provider - $providerOptionValueResult = civicrm_api3('option_value', 'get', $params); - civicrm_api3('option_value', 'delete', array('id' => $providerOptionValueResult['id'])); - return; - } - - // Create an SMS provider "CiviTestSMSProvider". Civi handles "CiviTestSMSProvider" as a special case and allows it to be instantiated - // in CRM/Sms/Provider.php even though it is not an extension. - civicrm_api3('option_value', 'create', $params); - } - /** * Test case for create() method. */ @@ -330,12 +298,7 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { * Test getActivities BAO method for getting count */ public function testGetActivitiesCountforNonAdminDashboard() { - $op = new PHPUnit_Extensions_Database_Operation_Insert(); - $op->execute($this->_dbconn, - $this->createFlatXMLDataSet( - dirname(__FILE__) . '/activities_for_dashboard_count.xml' - ) - ); + $this->createTestActivities(); $params = array( 'contact_id' => 9, @@ -343,7 +306,8 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { 'caseId' => NULL, 'context' => 'home', 'activity_type_id' => NULL, - 'activity_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'status_id', 'Scheduled'), // for dashlet the Scheduled status is set by default + // for dashlet the Scheduled status is set by default + 'activity_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'status_id', 'Scheduled'), 'offset' => 0, 'rowCount' => 0, 'sort' => NULL, @@ -358,12 +322,7 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { * Test getActivities BAO method for getting count */ public function testGetActivitiesCountforContactSummary() { - $op = new PHPUnit_Extensions_Database_Operation_Insert(); - $op->execute($this->_dbconn, - $this->createFlatXMLDataSet( - dirname(__FILE__) . '/activities_for_dashboard_count.xml' - ) - ); + $this->createTestActivities(); $params = array( 'contact_id' => 9, @@ -385,12 +344,7 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { * CRM-18706 - Test Include/Exclude Activity Filters */ public function testActivityFilters() { - $op = new PHPUnit_Extensions_Database_Operation_Insert(); - $op->execute($this->_dbconn, - $this->createFlatXMLDataSet( - dirname(__FILE__) . '/activities_for_dashboard_count.xml' - ) - ); + $this->createTestActivities(); Civi::settings()->set('preserve_activity_tab_filter', 1); $this->createLoggedInUser(); @@ -403,7 +357,6 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { ); $expectedFilters = array( 'activity_type_filter_id' => 1, - 'activity_type_exclude_filter_id' => '', ); list($activities, $activityFilter) = CRM_Activity_Page_AJAX::getContactActivity(); @@ -414,11 +367,10 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { $this->assertContains('Meeting', $value['activity_type']); } unset($_GET['activity_type_id']); - $expectedFilters['activity_type_filter_id'] = ''; $_GET['activity_type_exclude_id'] = $expectedFilters['activity_type_exclude_filter_id'] = 1; list($activities, $activityFilter) = CRM_Activity_Page_AJAX::getContactActivity(); - $this->checkArrayEquals($expectedFilters, $activityFilter); + $this->assertEquals(['activity_type_exclude_filter_id' => 1], $activityFilter); // None of the activities should be of type Meeting. foreach ($activities['data'] as $value) { $this->assertNotContains('Meeting', $value['activity_type']); @@ -429,12 +381,7 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { * Test getActivities BAO method for getting count */ public function testGetActivitiesCountforContactSummaryWithNoActivities() { - $op = new PHPUnit_Extensions_Database_Operation_Insert(); - $op->execute($this->_dbconn, - $this->createFlatXMLDataSet( - dirname(__FILE__) . '/activities_for_dashboard_count.xml' - ) - ); + $this->createTestActivities(); $params = array( 'contact_id' => 17, @@ -501,12 +448,7 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { * Test getActivities BAO method. */ public function testGetActivitiesforNonAdminDashboard() { - $op = new PHPUnit_Extensions_Database_Operation_Insert(); - $op->execute($this->_dbconn, - $this->createFlatXMLDataSet( - dirname(__FILE__) . '/activities_for_dashboard_count.xml' - ) - ); + $this->createTestActivities(); $contactID = 9; $params = array( @@ -515,7 +457,8 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { 'caseId' => NULL, 'context' => 'home', 'activity_type_id' => NULL, - 'activity_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'status_id', 'Scheduled'), // for dashlet the Scheduled status is set by default + // for dashlet the Scheduled status is set by default + 'activity_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'status_id', 'Scheduled'), 'offset' => 0, 'rowCount' => 0, 'sort' => NULL, @@ -563,10 +506,34 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { 'contact_id' => $contactId, 'context' => 'activity', ); - foreach (array(CRM_Activity_BAO_Activity::getActivities($params)) as $activities) { - //verify target count - $this->assertEquals($targetCount, $activities[1]['target_contact_counter']); - $this->assertEquals([$targetContactIDs[0] => 'Anderson, Anthony'], $activities[1]['target_contact_name']); + $activities = CRM_Activity_BAO_Activity::getActivities($params); + //verify target count + $this->assertEquals($targetCount, $activities[1]['target_contact_count']); + $this->assertEquals([$targetContactIDs[0] => 'Anderson, Anthony'], $activities[1]['target_contact_name']); + $this->assertEquals('Anderson, Anthony', $activities[1]['source_contact_name']); + $this->assertEquals('Anderson, Anthony', $activities[1]['assignee_contact_name'][4]); + } + + /** + * Test getActivities BAO method. + */ + public function testGetActivitiesforContactSummaryWithSortOptions() { + $this->createTestActivities(); + $params = [ + 'contact_id' => 9, + 'admin' => FALSE, + 'caseId' => NULL, + 'context' => 'activity', + 'activity_type_id' => NULL, + 'offset' => 0, + 'rowCount' => 0, + 'sort' => 'source_contact_name desc', + ]; + + $activities = CRM_Activity_BAO_Activity::getActivities($params); + $alphaOrder = ['Test Contact 11', 'Test Contact 12', 'Test Contact 3', 'Test Contact 4', 'Test Contact 9']; + foreach ($activities as $activity) { + $this->assertEquals(array_pop($alphaOrder), $activity['source_contact_name']); } } @@ -574,13 +541,8 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { /** * Test getActivities BAO method. */ - public function testGetActivitiesforContactSummary() { - $op = new PHPUnit_Extensions_Database_Operation_Insert(); - $op->execute($this->_dbconn, - $this->createFlatXMLDataSet( - dirname(__FILE__) . '/activities_for_dashboard_count.xml' - ) - ); + public function testGetActivitiesForContactSummary() { + $this->createTestActivities(); $contactID = 9; $params = array( @@ -591,39 +553,42 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { 'activity_type_id' => NULL, 'offset' => 0, 'rowCount' => 0, - 'sort' => NULL, ); //since we are loading activities from dataset, we know total number of activities for this contact // 5 activities, Contact Summary should show all activities $count = 5; - foreach (array(CRM_Activity_BAO_Activity::getActivities($params)) as $activities) { + $activities = CRM_Activity_BAO_Activity::getActivities($params); + $this->assertEquals($count, count($activities)); + foreach ($activities as $key => $value) { + $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.'); - $this->assertEquals($count, count($activities)); - - foreach ($activities as $key => $value) { - $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.'); - - if ($key > 8) { - $this->assertEquals($value['status_id'], 2, 'Verify all activities are scheduled.'); - } - else { - $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.'); - } + if ($key > 8) { + $this->assertEquals($value['status_id'], 2, 'Verify all activities are scheduled.'); + } + else { + $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.'); + } - if ($key > 8) { - $this->assertEquals($value['activity_type_id'], 1, 'Verify activity type is correct.'); - } - else { - $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.'); - } + if ($key === 12) { + $this->assertEquals($value['activity_type'], 'Bulk Email', 'Verify activity type is correct.'); + $this->assertEquals('(2 recipients)', $value['recipients']); + $targetContactID = key($value['target_contact_name']); + // The 2 targets have ids 10 & 11. Since they are not sorted it could be either on some systems. + $this->assertTrue(in_array($targetContactID, [10, 11])); + } + elseif ($key > 8) { + $this->assertEquals($value['activity_type_id'], 1, 'Verify activity type is correct.'); + } + else { + $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.'); + } - if ($key == 3) { - $this->assertArrayHasKey($contactID, $value['target_contact_name']); - } - elseif ($key == 4) { - $this->assertArrayHasKey($contactID, $value['assignee_contact_name']); - } + if ($key == 3) { + $this->assertEquals([$contactID => 'Test Contact ' . $contactID], $value['target_contact_name']); + } + elseif ($key == 4) { + $this->assertArrayHasKey($contactID, $value['assignee_contact_name']); } } } @@ -632,12 +597,7 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { * Test getActivities BAO method. */ public function testGetActivitiesforContactSummaryWithActivities() { - $op = new PHPUnit_Extensions_Database_Operation_Insert(); - $op->execute($this->_dbconn, - $this->createFlatXMLDataSet( - dirname(__FILE__) . '/activities_for_dashboard_count.xml' - ) - ); + $this->createTestActivities(); // parameters for different test cases, check each array key for the specific test-case $testCases = array( @@ -762,12 +722,7 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { */ public function testByActivityDateAndStatus() { CRM_Core_Config::singleton()->userPermissionClass->permissions = ['view all contacts', 'access CiviCRM']; - $op = new PHPUnit_Extensions_Database_Operation_Insert(); - $op->execute($this->_dbconn, - $this->createFlatXMLDataSet( - dirname(__FILE__) . '/activities_for_dashboard_count.xml' - ) - ); + $this->createTestActivities(); // activity IDs catagorised by date $lastWeekActivities = array(1, 2, 3); @@ -960,7 +915,7 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { 'count' => 2, 'earliest' => strtotime('first day of january last year'), 'latest' => strtotime('first day of january this year'), - ] + ], ], ]; } @@ -1029,12 +984,7 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { * Set up for testing activity queries. */ protected function setUpForActivityDashboardTests() { - $op = new PHPUnit_Extensions_Database_Operation_Insert(); - $op->execute($this->_dbconn, - $this->createFlatXMLDataSet( - dirname(__FILE__) . '/activities_for_dashboard_count.xml' - ) - ); + $this->createTestActivities(); $this->_params = array( 'contact_id' => NULL, @@ -1042,7 +992,8 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { 'caseId' => NULL, 'context' => 'home', 'activity_type_id' => NULL, - 'activity_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'status_id', 'Scheduled'), // for dashlet the Scheduled status is set by default + // for dashlet the Scheduled status is set by default + 'activity_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'status_id', 'Scheduled'), 'offset' => 0, 'rowCount' => 0, 'sort' => NULL, @@ -1161,8 +1112,7 @@ $text public function testSendSMSWithoutPermission() { $dummy = NULL; $session = CRM_Core_Session::singleton(); - $config = &CRM_Core_Config::singleton(); - $config->userPermissionClass->permissions = array('access CiviCRM'); + CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM'); CRM_Activity_BAO_Activity::sendSMS( $dummy, @@ -1241,7 +1191,6 @@ $text $this->assertEquals(0, $success, "Expected success to be 0"); } - /** * @param int $phoneType (0=no phone, phone_type option group (1=fixed, 2=mobile) * @param bool $passPhoneTypeInContactDetails @@ -1334,4 +1283,15 @@ $text return array($sent, $activityId, $success); } + protected function createTestActivities() { + $op = new PHPUnit_Extensions_Database_Operation_Insert(); + $op->execute($this->_dbconn, + $this->createFlatXMLDataSet( + dirname(__FILE__) . '/activities_for_dashboard_count.xml' + ) + ); + // Make changes to improve variation in php since the xml method is brittle & relies on option values being unchanged. + $this->callAPISuccess('Activity', 'create', ['id' => 12, 'activity_type_id' => 'Bulk Email']); + } + }