Merge pull request #3368 from totten/master-case-sequence
[civicrm-core.git] / tests / phpunit / Civi / CCase / SequenceListenerTest.php
CommitLineData
b019b130
TO
1<?php
2namespace Civi\CCase;
3
4require_once 'CiviTest/CiviCaseTestCase.php';
5
6class SequenceListenerTest extends \CiviCaseTestCase {
7
8 public function setUp() {
9 parent::setUp();
10 $this->_params = array(
11 'case_type' => 'Housing Support', // FIXME: $this->caseType,
12 'subject' => 'Test case',
13 'contact_id' => 17,
14 );
15 }
16
17 public function testSequence() {
18 $actStatuses = array_flip(\CRM_Core_PseudoConstant::activityStatus('name'));
19 $caseStatuses = array_flip(\CRM_Case_PseudoConstant::caseStatus('name'));
20
21 // Create case; schedule first activity
22 \CRM_Utils_Time::setTime('2013-11-30 01:00:00');
23 $case = $this->callAPISuccess('case', 'create', $this->_params);
24
25 $analyzer = new \Civi\CCase\Analyzer($case['id']);
26 $this->assertEquals($caseStatuses['Open'], $analyzer->getCase()['status_id']);
27 $this->assertEquals('2013-11-30 01:00:00', $analyzer->getSingleActivity('Medical evaluation')['activity_date_time']);
28 $this->assertEquals($actStatuses['Scheduled'], $analyzer->getSingleActivity('Medical evaluation')['status_id']);
29 $this->assertFalse($analyzer->hasActivity('Mental health evaluation'));
30 $this->assertFalse($analyzer->hasActivity('Secure temporary housing'));
31
32 // Complete first activity; schedule second
33 \CRM_Utils_Time::setTime('2013-11-30 02:00:00');
34 $this->callApiSuccess('Activity', 'create', array(
35 'id' => $analyzer->getSingleActivity('Medical evaluation')['id'],
36 'status_id' => $actStatuses['Completed'],
37 ));
38 $analyzer->flush();
39 $this->assertEquals($caseStatuses['Open'], $analyzer->getCase()['status_id']);
40 $this->assertEquals('2013-11-30 01:00:00', $analyzer->getSingleActivity('Medical evaluation')['activity_date_time']);
41 $this->assertEquals($actStatuses['Completed'], $analyzer->getSingleActivity('Medical evaluation')['status_id']);
42 $this->assertEquals('2013-11-30 02:00:00', $analyzer->getSingleActivity('Mental health evaluation')['activity_date_time']);
43 $this->assertEquals($actStatuses['Scheduled'], $analyzer->getSingleActivity('Mental health evaluation')['status_id']);
44 $this->assertFalse($analyzer->hasActivity('Secure temporary housing'));
45
46 // Complete second activity; schedule third
47 \CRM_Utils_Time::setTime('2013-11-30 03:00:00');
48 $this->callApiSuccess('Activity', 'create', array(
49 'id' => $analyzer->getSingleActivity('Mental health evaluation')['id'],
50 'status_id' => $actStatuses['Completed'],
51 ));
52 $analyzer->flush();
53 $this->assertEquals($caseStatuses['Open'], $analyzer->getCase()['status_id']);
54 $this->assertEquals('2013-11-30 01:00:00', $analyzer->getSingleActivity('Medical evaluation')['activity_date_time']);
55 $this->assertEquals($actStatuses['Completed'], $analyzer->getSingleActivity('Medical evaluation')['status_id']);
56 $this->assertEquals('2013-11-30 02:00:00', $analyzer->getSingleActivity('Mental health evaluation')['activity_date_time']);
57 $this->assertEquals($actStatuses['Completed'], $analyzer->getSingleActivity('Mental health evaluation')['status_id']);
58 $this->assertEquals('2013-11-30 03:00:00', $analyzer->getSingleActivity('Secure temporary housing')['activity_date_time']);
59 $this->assertEquals($actStatuses['Scheduled'], $analyzer->getSingleActivity('Secure temporary housing')['status_id']);
60
61 // Complete third activity; close case
62 \CRM_Utils_Time::setTime('2013-11-30 04:00:00');
63 $this->callApiSuccess('Activity', 'create', array(
64 'id' => $analyzer->getSingleActivity('Secure temporary housing')['id'],
65 'status_id' => $actStatuses['Completed'],
66 ));
67 $analyzer->flush();
68 $this->assertEquals('2013-11-30 01:00:00', $analyzer->getSingleActivity('Medical evaluation')['activity_date_time']);
69 $this->assertEquals($actStatuses['Completed'], $analyzer->getSingleActivity('Medical evaluation')['status_id']);
70 $this->assertEquals('2013-11-30 02:00:00', $analyzer->getSingleActivity('Mental health evaluation')['activity_date_time']);
71 $this->assertEquals($actStatuses['Completed'], $analyzer->getSingleActivity('Mental health evaluation')['status_id']);
72 $this->assertEquals('2013-11-30 03:00:00', $analyzer->getSingleActivity('Secure temporary housing')['activity_date_time']);
73 $this->assertEquals($actStatuses['Completed'], $analyzer->getSingleActivity('Secure temporary housing')['status_id']);
74 $this->assertEquals($caseStatuses['Closed'], $analyzer->getCase()['status_id']);
75 }
76
77 /**
78 * @param $caseTypes
79 * @see \CRM_Utils_Hook::caseTypes
80 */
81 function hook_caseTypes(&$caseTypes) {
82 $caseTypes[$this->caseType] = array(
83 'module' => 'org.civicrm.hrcase',
84 'name' => $this->caseType,
85 'file' => __DIR__ . '/HousingSupportWithSequence.xml',
86 );
87 }
88
89 function assertApproxTime($expected, $actual, $tolerance = 1) {
90 $diff = abs(strtotime($expected) - strtotime($actual));
91 $this->assertTrue($diff <= $tolerance, sprintf("Check approx time equality. expected=[%s] actual=[%s] tolerance=[%s]",
92 $expected, $actual, $tolerance
93 ));
94 }
95}