Skip to content

Commit

Permalink
update activity tests to check civicaseShowCaseActivities setting
Browse files Browse the repository at this point in the history
  • Loading branch information
Rich Lott / Artful Robot committed Jan 24, 2020
1 parent 668630d commit 7ea29c0
Showing 1 changed file with 184 additions and 2 deletions.
186 changes: 184 additions & 2 deletions tests/phpunit/CRM/Activity/BAO/ActivityTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -331,18 +331,38 @@ public function testDeleteActivityAssignment() {

/**
* Test getActivities BAO method for getting count.
*
*
* @param bool
*/
public function testGetActivitiesCountForAdminDashboard() {
// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
$this->setUpForActivityDashboardTests();
$this->addCaseWithActivity();
CRM_Core_Config::singleton()->userPermissionClass->permissions[] = 'access all cases and activities';

$activityCount = CRM_Activity_BAO_Activity::getActivitiesCount($this->_params);
$this->assertEquals(8, $activityCount);

// If we're showing case activities, we exepct to see one more (the scheduled meeting)...
$this->setShowCaseActivitiesInCore(TRUE);
$activityCount = CRM_Activity_BAO_Activity::getActivitiesCount($this->_params);
$this->assertEquals(9, $activityCount);
// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
}

/**
* Test getActivities BAO method for getting count
*
*/
public function testGetActivitiesCountforNonAdminDashboard() {
// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
$this->createTestActivities();
$this->addCaseWithActivity();
CRM_Core_Config::singleton()->userPermissionClass->permissions[] = 'access all cases and activities';

$params = [
'contact_id' => 9,
Expand All @@ -358,15 +378,27 @@ public function testGetActivitiesCountforNonAdminDashboard() {
];

//since we are loading activities from dataset, we know total number of activities for this contact
// 5 activities ( 2 scheduled, 3 Completed ), note that dashboard shows only scheduled activities
// 5 activities ( 2 scheduled, 3 Completed, 1 Scheduled Case activity ),
// note that dashboard shows only scheduled activities
$this->assertEquals(2, CRM_Activity_BAO_Activity::getActivitiesCount($params));

// If we're showing case activities, we exepct to see one more (the scheduled meeting)...
$this->setShowCaseActivitiesInCore(TRUE);
$this->assertEquals(3, CRM_Activity_BAO_Activity::getActivitiesCount($params));
// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
}

/**
* Test getActivities BAO method for getting count
*
*/
public function testGetActivitiesCountforContactSummary() {
// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
$this->createTestActivities();
$this->addCaseWithActivity();
CRM_Core_Config::singleton()->userPermissionClass->permissions[] = 'access all cases and activities';

$params = [
'contact_id' => 9,
Expand All @@ -380,8 +412,14 @@ public function testGetActivitiesCountforContactSummary() {
];

//since we are loading activities from dataset, we know total number of activities for this contact
// 5 activities, Contact Summary should show all activities
// 5 activities
$this->assertEquals(5, CRM_Activity_BAO_Activity::getActivitiesCount($params));

// If we're showing case activities, we exepct to see one more (the scheduled meeting)...
$this->setShowCaseActivitiesInCore(TRUE);
$this->assertEquals(6, CRM_Activity_BAO_Activity::getActivitiesCount($params));
// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
}

/**
Expand Down Expand Up @@ -447,7 +485,11 @@ public function testGetActivitiesCountforContactSummaryWithNoActivities() {
* Test getActivities BAO method.
*/
public function testGetActivitiesForAdminDashboard() {
$this->setShowCaseActivitiesInCore(FALSE);
$this->setUpForActivityDashboardTests();
$this->addCaseWithActivity();
CRM_Core_Config::singleton()->userPermissionClass->permissions[] = 'access all cases and activities';

$activitiesNew = CRM_Activity_BAO_Activity::getActivities($this->_params);
// $this->assertEquals($activities, $activitiesDeprecatedFn);

Expand All @@ -463,6 +505,16 @@ public function testGetActivitiesForAdminDashboard() {
$this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.');
}
}

// Now check that we get the scheduled meeting, if civicaseShowCaseActivities is set.
$this->setShowCaseActivitiesInCore(TRUE);
$activitiesNew = CRM_Activity_BAO_Activity::getActivities($this->_params);
$this->assertEquals(9, count($activitiesNew));
// Scan through to find the meeting.
$this->assertTrue(in_array('test meeting activity', array_column($activitiesNew, 'subject')),
"failed to find scheduled case Meeting activity");
// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
}

/**
Expand Down Expand Up @@ -492,7 +544,10 @@ public function testGetActivitiesForAdminDashboardAclLimitedViewContacts() {
* Test getActivities BAO method.
*/
public function testGetActivitiesforNonAdminDashboard() {
$this->setShowCaseActivitiesInCore(FALSE);
$this->createTestActivities();
$this->addCaseWithActivity();
CRM_Core_Config::singleton()->userPermissionClass->permissions[] = 'access all cases and activities';

$contactID = 9;
$params = [
Expand Down Expand Up @@ -527,6 +582,17 @@ public function testGetActivitiesforNonAdminDashboard() {
}
}
}

// Now check that we get the scheduled meeting, if civicaseShowCaseActivities is set.
$this->setShowCaseActivitiesInCore(TRUE);
$activities = CRM_Activity_BAO_Activity::getActivities($params);
$this->assertEquals(3, count($activities));
// Scan through to find the meeting.
$this->assertTrue(in_array('test meeting activity', array_column($activities, 'subject')),
"failed to find scheduled case Meeting activity");

// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
}

/**
Expand Down Expand Up @@ -586,7 +652,11 @@ public function testGetActivitiesforContactSummaryWithSortOptions() {
* Test getActivities BAO method.
*/
public function testGetActivitiesForContactSummary() {
// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
$this->createTestActivities();
$this->addCaseWithActivity();
CRM_Core_Config::singleton()->userPermissionClass->permissions[] = 'access all cases and activities';

$contactID = 9;
$params = [
Expand Down Expand Up @@ -635,12 +705,24 @@ public function testGetActivitiesForContactSummary() {
$this->assertArrayHasKey($contactID, $value['assignee_contact_name']);
}
}

// Now check that we get the scheduled meeting, if civicaseShowCaseActivities is set.
$this->setShowCaseActivitiesInCore(TRUE);
$activities = CRM_Activity_BAO_Activity::getActivities($params);
$this->assertEquals(6, count($activities));
// Scan through to find the meeting.
$this->assertTrue(in_array('test meeting activity', array_column($activities, 'subject')),
"failed to find scheduled case Meeting activity");
// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
}

/**
* Test getActivities BAO method.
*/
public function testGetActivitiesforContactSummaryWithActivities() {
// Reset to default
$this->setShowCaseActivitiesInCore(FALSE);
$this->createTestActivities();

// parameters for different test cases, check each array key for the specific test-case
Expand Down Expand Up @@ -1417,4 +1499,104 @@ public function testSendEmailWithCaseId() {
$mut->stop();
}

/**
* Adds a case with one activity.
*
* @return CiviCaseTestCase
*/
protected function addCaseWithActivity() {
// case is not enabled by default do that now.
$enableResult = CRM_Core_BAO_ConfigSetting::enableComponent('CiviCase');
$this->assertTrue($enableResult, 'Cannot enable CiviCase in line ' . __LINE__);

// We need a minimal case setup.
$case_type_id = civicrm_api3('CaseType', 'get', [ 'return' => 'id', 'name' => 'test_case_type' ])['id'] ?? NULL;
if (!$case_type_id) {
$params = [
'name' => 'test_case_type',
'title' => 'test_case_type',
"is_active" => "1",
"definition" => [
"activityTypes" => [
[ "name" => "Open Case", "max_instances" => "1" ],
[ "name" => "Meeting" ],
],
"activitySets" => [
[
"name" => "standard_timeline",
"label" => "Standard Timeline",
"timeline" => "1",
"activityTypes" => [
[
"name" => "Open Case",
"status" => "Completed",
"label" => "Open Case",
"default_assignee_type" => "1"
]
]
]
],
"timelineActivityTypes" => [
[
"name" => "Open Case",
"status" => "Completed",
"label" => "Open Case",
"default_assignee_type" => "1"
]
],
"caseRoles" => [
[
"name" => "Case Coordinator",
"creator" => "1",
"manager" => "1"
]
],
]
];
$case_type_id = civicrm_api3('CaseType', 'create', $params)['id'];
}

// Create a case with Contact #3 as the client.
$case_id = civicrm_api3('case', 'get', [ 'subject' => 'test case 1' ])['id'] ?? NULL;
if (!$case_id) {
// $x = Civi\Api4\OptionValue::get()
// ->setSelect(['id', 'value', 'name'])
// ->setCheckPermissions(FALSE)
// ->addWhere('option_group.name', '=', 'case_status')
// ->execute();
// foreach ($x as $y) print json_encode($y);

// Create case
$params = [
'subject' => 'test case 1',
'contact_id' => 3,
'status_id' => 'Open',
'case_type_id' => $case_type_id,
'creator_id' => 3,
];
$case_id = civicrm_api3('case', 'create', $params)['id'];
}

// Create a scheduled 'Meeting' activity that belongs to this case, but is
// assigned to contact #9
$activity_id = civicrm_api3('Activity', 'create', [
'activity_type_id' => 'Meeting',
'status_id' => 1, // Scheduled
'case_id' => $case_id,
'source_contact_id' => 3,
'assignee_id' => [9],
'subject' => 'test meeting activity',
])['id'] ?? NULL;
if (!$activity_id) {
throw new \Exception("Failed to create an activity on case $case_id for contact 9");
}
}
/**
* Change setting, and the cache of it.
*/
protected function setShowCaseActivitiesInCore(bool $val) {
Civi::settings()->set('civicaseShowCaseActivities', $val ? 1 : 0);
CRM_Core_Component::getEnabledComponents();
Civi::$statics['CRM_Core_Component']['info']['CiviCase']->info['showActivitiesInCore'] = $val;
}
}

0 comments on commit 7ea29c0

Please sign in to comment.