}
/**
- * Process the form submission.
+ * Wrapper for unit testing the post process submit function.
+ *
+ * @param $params
+ * @param $activityTypeFile
+ * @param $contactId
+ * @param $context
+ * @return CRM_Case_BAO_Case
*/
- public function postProcess() {
- $transaction = new CRM_Core_Transaction();
+ public function testSubmit($params, $activityTypeFile, $contactId, $context = "case") {
+ $this->controller = new CRM_Core_Controller();
- // check if dedupe button, if so return.
- $buttonName = $this->controller->getButtonName();
- if (isset($this->_dedupeButtonName) && $buttonName == $this->_dedupeButtonName) {
- return;
- }
+ $this->_activityTypeFile = $activityTypeFile;
+ $this->_currentUserId = $contactId;
+ $this->_context = $context;
- if ($this->_action & CRM_Core_Action::DELETE) {
- $caseDelete = CRM_Case_BAO_Case::deleteCase($this->_caseId, TRUE);
- if ($caseDelete) {
- CRM_Core_Session::setStatus(ts('You can view and / or restore deleted cases by checking the "Deleted Cases" option under Find Cases.'), ts('Case Deleted'), 'success');
- }
- return;
- }
+ return $this->submit($params);
+ }
- if ($this->_action & CRM_Core_Action::RENEW) {
- $caseRestore = CRM_Case_BAO_Case::restoreCase($this->_caseId);
- if ($caseRestore) {
- CRM_Core_Session::setStatus(ts('The selected case has been restored.'), ts('Restored'), 'success');
- }
- return;
- }
- // store the submitted values in an array
- $params = $this->controller->exportValues($this->_name);
+ /**
+ * Submit the form with given params.
+ *
+ * @param $params
+ */
+ public function submit(&$params) {
$params['now'] = date("Ymd");
// 1. call begin post process
$className::endPostProcess($this, $params);
}
+ return $caseObj;
+ }
+
+ /**
+ * Process the form submission.
+ */
+ public function postProcess() {
+ $transaction = new CRM_Core_Transaction();
+
+ // check if dedupe button, if so return.
+ $buttonName = $this->controller->getButtonName();
+ if (isset($this->_dedupeButtonName) && $buttonName == $this->_dedupeButtonName) {
+ return;
+ }
+
+ if ($this->_action & CRM_Core_Action::DELETE) {
+ $caseDelete = CRM_Case_BAO_Case::deleteCase($this->_caseId, TRUE);
+ if ($caseDelete) {
+ CRM_Core_Session::setStatus(ts('You can view and / or restore deleted cases by checking the "Deleted Cases" option under Find Cases.'), ts('Case Deleted'), 'success');
+ }
+ return;
+ }
+
+ if ($this->_action & CRM_Core_Action::RENEW) {
+ $caseRestore = CRM_Case_BAO_Case::restoreCase($this->_caseId);
+ if ($caseRestore) {
+ CRM_Core_Session::setStatus(ts('The selected case has been restored.'), ts('Restored'), 'success');
+ }
+ return;
+ }
+ // store the submitted values in an array
+ $params = $this->controller->exportValues($this->_name);
+ $this->submit($params);
+
CRM_Core_Session::setStatus($params['statusMsg'], ts('Saved'), 'success');
+
}
}
$this->assertEquals('Test Contact - Housing Support', $recent[0]['title']);
}
+ /**
+ * Create and return case object of given Client ID.
+ * @param $clientId
+ * @return CRM_Case_BAO_Case
+ */
+ private function createCase($clientId) {
+ $caseParams = array(
+ 'activity_subject' => 'Case Subject',
+ 'client_id' => $clientId,
+ 'case_type_id' => 1,
+ 'status_id' => 1,
+ 'case_type' => 'housing_support',
+ 'subject' => 'Case Subject',
+ 'start_date' => date("Y-m-d"),
+ 'start_date_time' => date("YmdHis"),
+ 'medium_id' => 2,
+ 'activity_details' => '',
+ );
+ $form = new CRM_Case_Form_Case();
+ $caseObj = $form->testSubmit($caseParams, "OpenCase", $clientId, "standalone");
+ return $caseObj;
+ }
+
+ /**
+ * Create case role relationship between given contacts for provided case ID.
+ *
+ * @param $contactIdA
+ * @param $contactIdB
+ * @param $caseId
+ * @param bool $isActive
+ */
+ private function createCaseRoleRelationship($contactIdA, $contactIdB, $caseId, $isActive = TRUE) {
+ $relationshipType = $this->relationshipTypeCreate([
+ 'contact_type_b' => 'Individual',
+ ]);
+
+ $this->callAPISuccess('Relationship', 'create', array(
+ 'contact_id_a' => $contactIdA,
+ 'contact_id_b' => $contactIdB,
+ 'relationship_type_id' => $relationshipType,
+ 'case_id' => $caseId,
+ 'is_active' => $isActive,
+ ));
+ }
+
+ /**
+ * Asserts number of cases for given logged in user.
+ *
+ * @param $loggedInUser
+ * @param $caseId
+ * @param $caseCount
+ */
+ private function assertCasesOfUser($loggedInUser, $caseId, $caseCount) {
+ $summary = CRM_Case_BAO_Case::getCasesSummary(FALSE);
+ $upcomingCases = CRM_Case_BAO_Case::getCases(FALSE, array(), 'dashboard', TRUE);
+ $caseRoles = CRM_Case_BAO_Case::getCaseRoles($loggedInUser, $caseId);
+
+ $this->assertEquals($caseCount, $upcomingCases, 'Upcoming case count must be ' . $caseCount);
+ $this->assertEquals($caseCount, $summary['rows']['Housing Support']['Ongoing']['count'], 'Housing Support Ongoing case summary must be ' . $caseCount);
+ $this->assertEquals($caseCount, count($caseRoles), 'Total case roles for logged in users must be ' . $caseCount);
+ }
+
+ /**
+ * Test that Case count is exactly one for logged in user for user's active role.
+ */
+ public function testActiveCaseRole() {
+ $individual = $this->individualCreate();
+ $caseObj = $this->createCase($individual);
+ $caseId = $caseObj->id;
+ $loggedInUser = $this->createLoggedInUser();
+ $this->createCaseRoleRelationship($individual, $loggedInUser, $caseId);
+ $this->assertCasesOfUser($loggedInUser, $caseId, 1);
+ }
+
+ /**
+ * Test that case count is zero for logged in user for user's inactive role.
+ */
+ public function testInactiveCaseRole() {
+ $individual = $this->individualCreate();
+ $caseObj = $this->createCase($individual);
+ $caseId = $caseObj->id;
+ $loggedInUser = $this->createLoggedInUser();
+ $this->createCaseRoleRelationship($individual, $loggedInUser, $caseId, FALSE);
+ $this->assertCasesOfUser($loggedInUser, $caseId, 0);
+ }
+
public function testGetCaseType() {
$caseTypeLabel = CRM_Case_BAO_Case::getCaseType(1);
$this->assertEquals('Housing Support', $caseTypeLabel);