Merge pull request #17953 from civicrm/5.28
[civicrm-core.git] / tests / phpunit / CRM / Case / XMLProcessor / ReportTest.php
index e199f656839c6cb05a33dd9e22e1e1394d1cefb9..3d1ce552568b689b5c9a4247e489c86ae7f20f4a 100644 (file)
@@ -71,6 +71,60 @@ class CRM_Case_XMLProcessor_ReportTest extends CiviCaseTestCase {
     }
   }
 
+  /**
+   * This is similar to testGetCaseReport but test with a timeline that
+   * does have Meeting in it.
+   */
+  public function testGetCaseReportWithMeetingInTimeline() {
+    $client_id = $this->individualCreate([
+      'first_name' => 'Casey',
+      'middle_name' => '',
+      'last_name' => 'Reportee',
+      'prefix_id' => NULL,
+      'suffix_id' => NULL,
+    ]);
+    $caseObj = $this->createCase($client_id, $this->_loggedInUser);
+    $case_id = $caseObj->id;
+
+    // Now update the timeline so it has Meeting in it.
+    $this->addMeetingToTimeline();
+
+    // Add a meeting activity to the case.
+    $meetingTypeId = $this->callAPISuccess('OptionValue', 'getsingle', [
+      'return' => ["value"],
+      'option_group_id' => 'activity_type',
+      'name' => 'Meeting',
+    ]);
+    $this->callAPISuccess('activity', 'create', [
+      'case_id' => $case_id,
+      'activity_type_id' => $meetingTypeId['value'],
+      'activity_date_time' => '20191114123456',
+      'subject' => 'Test Meeting',
+      'source_contact_id' => $this->_loggedInUser,
+      'target_contact_id' => $client_id,
+    ]);
+
+    $caseReportParams = [
+      'is_redact' => FALSE,
+      'include_activities' => 1,
+    ];
+
+    // run the thing we're testing and get the output vars
+    $template = CRM_Case_XMLProcessor_Report::populateCaseReportTemplate($client_id, $case_id, 'standard_timeline', $caseReportParams, $this->report);
+    $assigned_vars = $template->get_template_vars();
+
+    // We don't want to run all the data in the dataprovider but we know
+    // in this case it should be the same as the second one in the
+    // dataprovider so we can reuse it.
+    $expected = $this->caseReportDataProvider()[1][1];
+    $this->updateExpectedBecauseDataProviderEvaluatesBeforeEverything($expected, $client_id, $case_id);
+
+    foreach ($expected as $key => $value) {
+      // does the assigned template var match the expected value?
+      $this->assertEquals($value, $assigned_vars[$key], "$key does not match" . print_r($assigned_vars[$key], TRUE));
+    }
+  }
+
   /**
    * Data provider for testGetCaseReport
    * @return array
@@ -80,7 +134,9 @@ class CRM_Case_XMLProcessor_ReportTest extends CiviCaseTestCase {
       [
         // activity set name
         'standard_timeline',
-        // some expected assigned vars of CRM_Core_Smarty template
+        // Some expected assigned vars of CRM_Core_Smarty template.
+        // In particular we shouldn't have meeting in the output since it's
+        // not in the timeline.
         [
           'case' => [
             'clientName' => 'Casey Reportee',
@@ -95,58 +151,69 @@ class CRM_Case_XMLProcessor_ReportTest extends CiviCaseTestCase {
             0 => [
               'fields' => [
                 0 => [
+                  'name' => 'Client',
                   'label' => 'Client',
                   'value' => 'Casey Reportee',
                   'type' => 'String',
                 ],
                 1 => [
+                  'name' => 'Activity Type',
                   'label' => 'Activity Type',
                   'value' => 'Open Case',
                   'type' => 'String',
                 ],
                 2 => [
+                  'name' => 'Subject',
                   'label' => 'Subject',
                   'value' => 'Case Subject',
                   'type' => 'Memo',
                 ],
                 3 => [
+                  'name' => 'Created By',
                   'label' => 'Created By',
                   // data providers run before everything, so update this later
                   'value' => 'placeholder',
                   'type' => 'String',
                 ],
                 4 => [
+                  'name' => 'Reported By',
                   'label' => 'Reported By',
                   // see above - need to update this later
                   'value' => 'placeholder',
                   'type' => 'String',
                 ],
                 5 => [
+                  'name' => 'Medium',
                   'label' => 'Medium',
                   'value' => 'Phone',
                   'type' => 'String',
                 ],
                 6 => [
+                  'name' => 'Location',
                   'label' => 'Location',
                   'value' => NULL,
                   'type' => 'String',
                 ],
                 7 => [
+                  'name' => 'Date and Time',
                   'label' => 'Date and Time',
                   'value' => '2019-11-14 00:00:00',
                   'type' => 'Date',
                 ],
                 8 => [
+                  'name' => 'Details',
                   'label' => 'Details',
                   'value' => NULL,
                   'type' => 'Memo',
                 ],
                 9 => [
+                  'name' => 'Status',
                   'label' => 'Status',
                   'value' => 'Completed',
                   'type' => 'String',
                 ],
                 10 => [
+                  'name' => 'Priority',
                   'label' => 'Priority',
                   'value' => 'Normal',
                   'type' => 'String',
@@ -158,53 +225,63 @@ class CRM_Case_XMLProcessor_ReportTest extends CiviCaseTestCase {
             1 => [
               'fields' => [
                 0 => [
+                  'name' => 'Client',
                   'label' => 'Client',
                   'value' => 'Casey Reportee',
                   'type' => 'String',
                 ],
                 1 => [
+                  'name' => 'Activity Type',
                   'label' => 'Activity Type',
                   'value' => 'Medical evaluation',
                   'type' => 'String',
                 ],
                 2 => [
+                  'name' => 'Subject',
                   'label' => 'Subject',
                   'value' => '',
                   'type' => 'Memo',
                 ],
                 3 => [
+                  'name' => 'Created By',
                   'label' => 'Created By',
                   // see above - need to update this later
                   'value' => 'placeholder',
                   'type' => 'String',
                 ],
                 4 => [
+                  'name' => 'Reported By',
                   'label' => 'Reported By',
                   // see above - need to update this later
                   'value' => 'placeholder',
                   'type' => 'String',
                 ],
                 5 => [
+                  'name' => 'Location',
                   'label' => 'Location',
                   'value' => NULL,
                   'type' => 'String',
                 ],
                 6 => [
+                  'name' => 'Date and Time',
                   'label' => 'Date and Time',
                   'value' => '2019-11-15 00:00:00',
                   'type' => 'Date',
                 ],
                 7 => [
+                  'name' => 'Details',
                   'label' => 'Details',
                   'value' => NULL,
                   'type' => 'Memo',
                 ],
                 8 => [
+                  'name' => 'Status',
                   'label' => 'Status',
                   'value' => 'Scheduled',
                   'type' => 'String',
                 ],
                 9 => [
+                  'name' => 'Priority',
                   'label' => 'Priority',
                   'value' => 'Normal',
                   'type' => 'String',
@@ -219,7 +296,8 @@ class CRM_Case_XMLProcessor_ReportTest extends CiviCaseTestCase {
       [
         // activity set name is blank here, meaning don't filter the activities
         '',
-        // some expected assigned vars of CRM_Core_Smarty template
+        // Some expected assigned vars of CRM_Core_Smarty template.
+        // In particular now we will have Meeting in the output.
         [
           'case' => [
             'clientName' => 'Casey Reportee',
@@ -234,58 +312,69 @@ class CRM_Case_XMLProcessor_ReportTest extends CiviCaseTestCase {
             0 => [
               'fields' => [
                 0 => [
+                  'name' => 'Client',
                   'label' => 'Client',
                   'value' => 'Casey Reportee',
                   'type' => 'String',
                 ],
                 1 => [
+                  'name' => 'Activity Type',
                   'label' => 'Activity Type',
                   'value' => 'Open Case',
                   'type' => 'String',
                 ],
                 2 => [
+                  'name' => 'Subject',
                   'label' => 'Subject',
                   'value' => 'Case Subject',
                   'type' => 'Memo',
                 ],
                 3 => [
+                  'name' => 'Created By',
                   'label' => 'Created By',
                   // data providers run before everything, so update this later
                   'value' => 'placeholder',
                   'type' => 'String',
                 ],
                 4 => [
+                  'name' => 'Reported By',
                   'label' => 'Reported By',
                   // see above - need to update this later
                   'value' => 'placeholder',
                   'type' => 'String',
                 ],
                 5 => [
+                  'name' => 'Medium',
                   'label' => 'Medium',
                   'value' => 'Phone',
                   'type' => 'String',
                 ],
                 6 => [
+                  'name' => 'Location',
                   'label' => 'Location',
                   'value' => NULL,
                   'type' => 'String',
                 ],
                 7 => [
+                  'name' => 'Date and Time',
                   'label' => 'Date and Time',
                   'value' => '2019-11-14 00:00:00',
                   'type' => 'Date',
                 ],
                 8 => [
+                  'name' => 'Details',
                   'label' => 'Details',
                   'value' => NULL,
                   'type' => 'Memo',
                 ],
                 9 => [
+                  'name' => 'Status',
                   'label' => 'Status',
                   'value' => 'Completed',
                   'type' => 'String',
                 ],
                 10 => [
+                  'name' => 'Priority',
                   'label' => 'Priority',
                   'value' => 'Normal',
                   'type' => 'String',
@@ -297,53 +386,63 @@ class CRM_Case_XMLProcessor_ReportTest extends CiviCaseTestCase {
             1 => [
               'fields' => [
                 0 => [
+                  'name' => 'Client',
                   'label' => 'Client',
                   'value' => 'Casey Reportee',
                   'type' => 'String',
                 ],
                 1 => [
+                  'name' => 'Activity Type',
                   'label' => 'Activity Type',
                   'value' => 'Medical evaluation',
                   'type' => 'String',
                 ],
                 2 => [
+                  'name' => 'Subject',
                   'label' => 'Subject',
                   'value' => '',
                   'type' => 'Memo',
                 ],
                 3 => [
+                  'name' => 'Created By',
                   'label' => 'Created By',
                   // see above - need to update this later
                   'value' => 'placeholder',
                   'type' => 'String',
                 ],
                 4 => [
+                  'name' => 'Reported By',
                   'label' => 'Reported By',
                   // see above - need to update this later
                   'value' => 'placeholder',
                   'type' => 'String',
                 ],
                 5 => [
+                  'name' => 'Location',
                   'label' => 'Location',
                   'value' => NULL,
                   'type' => 'String',
                 ],
                 6 => [
+                  'name' => 'Date and Time',
                   'label' => 'Date and Time',
                   'value' => '2019-11-15 00:00:00',
                   'type' => 'Date',
                 ],
                 7 => [
+                  'name' => 'Details',
                   'label' => 'Details',
                   'value' => NULL,
                   'type' => 'Memo',
                 ],
                 8 => [
+                  'name' => 'Status',
                   'label' => 'Status',
                   'value' => 'Scheduled',
                   'type' => 'String',
                 ],
                 9 => [
+                  'name' => 'Priority',
                   'label' => 'Priority',
                   'value' => 'Normal',
                   'type' => 'String',
@@ -355,53 +454,63 @@ class CRM_Case_XMLProcessor_ReportTest extends CiviCaseTestCase {
             2 => [
               'fields' => [
                 0 => [
+                  'name' => 'Client',
                   'label' => 'Client',
                   'value' => 'Casey Reportee',
                   'type' => 'String',
                 ],
                 1 => [
+                  'name' => 'Activity Type',
                   'label' => 'Activity Type',
                   'value' => 'Meeting',
                   'type' => 'String',
                 ],
                 2 => [
+                  'name' => 'Subject',
                   'label' => 'Subject',
                   'value' => 'Test Meeting',
                   'type' => 'Memo',
                 ],
                 3 => [
+                  'name' => 'Created By',
                   'label' => 'Created By',
                   // see above - need to update this later
                   'value' => 'placeholder',
                   'type' => 'String',
                 ],
                 4 => [
+                  'name' => 'Reported By',
                   'label' => 'Reported By',
                   // see above - need to update this later
                   'value' => 'placeholder',
                   'type' => 'String',
                 ],
                 5 => [
+                  'name' => 'Location',
                   'label' => 'Location',
                   'value' => NULL,
                   'type' => 'String',
                 ],
                 6 => [
+                  'name' => 'Date and Time',
                   'label' => 'Date and Time',
                   'value' => '2019-11-14 12:34:56',
                   'type' => 'Date',
                 ],
                 7 => [
+                  'name' => 'Details',
                   'label' => 'Details',
                   'value' => NULL,
                   'type' => 'Memo',
                 ],
                 8 => [
+                  'name' => 'Status',
                   'label' => 'Status',
                   'value' => 'Completed',
                   'type' => 'String',
                 ],
                 9 => [
+                  'name' => 'Priority',
                   'label' => 'Priority',
                   'value' => 'Normal',
                   'type' => 'String',
@@ -481,4 +590,20 @@ class CRM_Case_XMLProcessor_ReportTest extends CiviCaseTestCase {
     $this->callAPISuccess('CaseType', 'create', $caseType);
   }
 
+  /**
+   * Add Meeting to the standard timeline.
+   */
+  private function addMeetingToTimeline() {
+    $caseType = $this->callAPISuccess('CaseType', 'getsingle', ['id' => $this->caseTypeId]);
+    $activityTypes = $caseType['definition']['activitySets'][0]['activityTypes'];
+    // Make a copy of the second activity type and change the type.
+    $activityType = $activityTypes[1];
+    $activityType['name'] = 'Meeting';
+    $activityType['label'] = 'Meeting';
+
+    $activityTypes[] = $activityType;
+    $caseType['definition']['activitySets'][0]['activityTypes'] = $activityTypes;
+    $this->callAPISuccess('CaseType', 'create', $caseType);
+  }
+
 }