add test
authordemeritcowboy <demeritcowboy@hotmail.com>
Sat, 29 Apr 2023 17:31:19 +0000 (13:31 -0400)
committerdemeritcowboy <demeritcowboy@hotmail.com>
Sun, 30 Apr 2023 16:04:33 +0000 (12:04 -0400)
tests/phpunit/CRM/Activity/Page/AJAXTest.php

index 6e543dc03377c31b5e681b8195ae1dd7fcf412ea..d4d30f66a817bf74d264cb775768c406ed482153 100644 (file)
@@ -68,6 +68,114 @@ class CRM_Activity_Page_AJAXTest extends CiviUnitTestCase {
     $this->assertNotEquals($activity['id'], $caseActivities[$newActivityId]['id']);
   }
 
+  /**
+   * Similar to testConvertToCaseActivity above but for copy-to-case.
+   */
+  public function testCopyToCase() {
+    $case1 = $this->callAPISuccess('Case', 'create', [
+      'contact_id' => $this->target,
+      'case_type_id' => 'housing_support',
+      'subject' => 'Needs housing',
+    ]);
+    $contact2 = $this->individualCreate([], 1, TRUE);
+    $case2 = $this->callAPISuccess('Case', 'create', [
+      'contact_id' => $contact2,
+      'case_type_id' => 'housing_support',
+      'subject' => 'Also needs housing',
+    ]);
+
+    $activity = $this->callAPISuccess('Activity', 'create', [
+      'source_contact_id' => $this->loggedInUser,
+      'activity_type_id' => 'Meeting',
+      'subject' => 'To be copied to case',
+      'status_id' => 'Completed',
+      'target_id' => $this->target,
+      'case_id' => $case1['id'],
+    ]);
+
+    $params = [
+      'activityID' => $activity['id'],
+      'caseID' => $case2['id'],
+      'mode' => 'copy',
+      'targetContactIds' => $contact2,
+    ];
+    $result = CRM_Activity_Page_AJAX::_convertToCaseActivity($params);
+
+    $this->assertEmpty($result['error_msg']);
+    $newActivityId = $result['newId'];
+
+    $caseActivities = $this->callAPISuccess('Activity', 'get', [
+      'case_id' => $case2['id'],
+      'return' => ['id', 'subject', 'target_contact_id'],
+    ])['values'];
+    $this->assertEquals('To be copied to case', $caseActivities[$newActivityId]['subject']);
+    $this->assertEquals($contact2, $caseActivities[$newActivityId]['target_contact_id'][0]);
+    // This should be a different physical activity, not the same db record as the original.
+    $this->assertNotEquals($activity['id'], $caseActivities[$newActivityId]['id']);
+
+    // original should still be on old case
+    $originalActivity = $this->callAPISuccess('Activity', 'getsingle', [
+      'id' => $activity['id'],
+      'return' => ['is_deleted', 'case_id'],
+    ]);
+    $this->assertEquals(0, $originalActivity['is_deleted']);
+    $this->assertEquals($case1['id'], $originalActivity['case_id'][0]);
+  }
+
+  /**
+   * Similar to testCopyToCase above but for move-to-case.
+   */
+  public function testMoveToCase() {
+    $case1 = $this->callAPISuccess('Case', 'create', [
+      'contact_id' => $this->target,
+      'case_type_id' => 'housing_support',
+      'subject' => 'Needs housing',
+    ]);
+    $contact2 = $this->individualCreate([], 1, TRUE);
+    $case2 = $this->callAPISuccess('Case', 'create', [
+      'contact_id' => $contact2,
+      'case_type_id' => 'housing_support',
+      'subject' => 'Also needs housing',
+    ]);
+
+    $activity = $this->callAPISuccess('Activity', 'create', [
+      'source_contact_id' => $this->loggedInUser,
+      'activity_type_id' => 'Meeting',
+      'subject' => 'To be moved to case',
+      'status_id' => 'Completed',
+      'target_id' => $this->target,
+      'case_id' => $case1['id'],
+    ]);
+
+    $params = [
+      'activityID' => $activity['id'],
+      'caseID' => $case2['id'],
+      'mode' => 'move',
+      'targetContactIds' => $contact2,
+    ];
+    $result = CRM_Activity_Page_AJAX::_convertToCaseActivity($params);
+
+    $this->assertEmpty($result['error_msg']);
+    $newActivityId = $result['newId'];
+
+    $caseActivities = $this->callAPISuccess('Activity', 'get', [
+      'case_id' => $case2['id'],
+      'return' => ['id', 'subject', 'target_contact_id'],
+    ])['values'];
+    $this->assertEquals('To be moved to case', $caseActivities[$newActivityId]['subject']);
+    $this->assertEquals($contact2, $caseActivities[$newActivityId]['target_contact_id'][0]);
+    // This should be a different physical activity, not the same db record as the original.
+    $this->assertNotEquals($activity['id'], $caseActivities[$newActivityId]['id']);
+
+    // original should be marked deleted
+    $originalActivity = $this->callAPISuccess('Activity', 'getsingle', [
+      'id' => $activity['id'],
+      'return' => ['is_deleted', 'case_id'],
+    ]);
+    $this->assertEquals(1, $originalActivity['is_deleted']);
+    $this->assertEquals($case1['id'], $originalActivity['case_id'][0]);
+  }
+
   /**
    * Check if the selected filters are saved.
    */