Commit | Line | Data |
---|---|---|
b019b130 TO |
1 | <?php |
2 | namespace Civi\CCase; | |
3 | ||
4 | require_once 'CiviTest/CiviCaseTestCase.php'; | |
5 | ||
7fe37828 EM |
6 | /** |
7 | * Class SequenceListenerTest | |
8 | * | |
9 | * @package Civi\CCase | |
10 | */ | |
b019b130 TO |
11 | class SequenceListenerTest extends \CiviCaseTestCase { |
12 | ||
13 | public function setUp() { | |
14 | parent::setUp(); | |
15 | $this->_params = array( | |
82de141d | 16 | 'case_type' => $this->caseType, |
b019b130 TO |
17 | 'subject' => 'Test case', |
18 | 'contact_id' => 17, | |
19 | ); | |
20 | } | |
21 | ||
22 | public function testSequence() { | |
23 | $actStatuses = array_flip(\CRM_Core_PseudoConstant::activityStatus('name')); | |
24 | $caseStatuses = array_flip(\CRM_Case_PseudoConstant::caseStatus('name')); | |
25 | ||
26 | // Create case; schedule first activity | |
27 | \CRM_Utils_Time::setTime('2013-11-30 01:00:00'); | |
28 | $case = $this->callAPISuccess('case', 'create', $this->_params); | |
29 | ||
30 | $analyzer = new \Civi\CCase\Analyzer($case['id']); | |
c794d82e TO |
31 | $this->assertEquals($caseStatuses['Open'], self::ag($analyzer->getCase(), 'status_id')); |
32 | $this->assertApproxTime('2013-11-30 01:00:00', self::ag($analyzer->getSingleActivity('Medical evaluation'), 'activity_date_time')); | |
33 | $this->assertEquals($actStatuses['Scheduled'], self::ag($analyzer->getSingleActivity('Medical evaluation'), 'status_id')); | |
936055db TO |
34 | $this->assertFalse($analyzer->hasActivity('Mental health evaluation')); |
35 | $this->assertFalse($analyzer->hasActivity('Secure temporary housing')); | |
36 | ||
37 | // Edit details of first activity -- but don't finish it yet! | |
38 | \CRM_Utils_Time::setTime('2013-11-30 01:30:00'); | |
39 | $this->callApiSuccess('Activity', 'create', array( | |
c794d82e | 40 | 'id' => self::ag($analyzer->getSingleActivity('Medical evaluation'), 'id'), |
936055db TO |
41 | 'subject' => 'This is the new subject', |
42 | )); | |
43 | ||
44 | $analyzer = new \Civi\CCase\Analyzer($case['id']); | |
c794d82e TO |
45 | $this->assertEquals($caseStatuses['Open'], self::ag($analyzer->getCase(), 'status_id')); |
46 | $this->assertApproxTime('2013-11-30 01:00:00', self::ag($analyzer->getSingleActivity('Medical evaluation'), 'activity_date_time')); | |
47 | $this->assertEquals($actStatuses['Scheduled'], self::ag($analyzer->getSingleActivity('Medical evaluation'), 'status_id')); | |
b019b130 TO |
48 | $this->assertFalse($analyzer->hasActivity('Mental health evaluation')); |
49 | $this->assertFalse($analyzer->hasActivity('Secure temporary housing')); | |
50 | ||
51 | // Complete first activity; schedule second | |
52 | \CRM_Utils_Time::setTime('2013-11-30 02:00:00'); | |
53 | $this->callApiSuccess('Activity', 'create', array( | |
c794d82e | 54 | 'id' => self::ag($analyzer->getSingleActivity('Medical evaluation'), 'id'), |
b019b130 TO |
55 | 'status_id' => $actStatuses['Completed'], |
56 | )); | |
57 | $analyzer->flush(); | |
c794d82e TO |
58 | $this->assertEquals($caseStatuses['Open'], self::ag($analyzer->getCase(), 'status_id')); |
59 | $this->assertApproxTime('2013-11-30 01:00:00', self::ag($analyzer->getSingleActivity('Medical evaluation'), 'activity_date_time')); | |
60 | $this->assertEquals($actStatuses['Completed'], self::ag($analyzer->getSingleActivity('Medical evaluation'), 'status_id')); | |
61 | $this->assertApproxTime('2013-11-30 02:00:00', self::ag($analyzer->getSingleActivity('Mental health evaluation'), 'activity_date_time')); | |
62 | $this->assertEquals($actStatuses['Scheduled'], self::ag($analyzer->getSingleActivity('Mental health evaluation'), 'status_id')); | |
b019b130 TO |
63 | $this->assertFalse($analyzer->hasActivity('Secure temporary housing')); |
64 | ||
65 | // Complete second activity; schedule third | |
66 | \CRM_Utils_Time::setTime('2013-11-30 03:00:00'); | |
67 | $this->callApiSuccess('Activity', 'create', array( | |
c794d82e | 68 | 'id' => self::ag($analyzer->getSingleActivity('Mental health evaluation'), 'id'), |
b019b130 TO |
69 | 'status_id' => $actStatuses['Completed'], |
70 | )); | |
71 | $analyzer->flush(); | |
c794d82e TO |
72 | $this->assertEquals($caseStatuses['Open'], self::ag($analyzer->getCase(), 'status_id')); |
73 | $this->assertApproxTime('2013-11-30 01:00:00', self::ag($analyzer->getSingleActivity('Medical evaluation'), 'activity_date_time')); | |
74 | $this->assertEquals($actStatuses['Completed'], self::ag($analyzer->getSingleActivity('Medical evaluation'), 'status_id')); | |
75 | $this->assertApproxTime('2013-11-30 02:00:00', self::ag($analyzer->getSingleActivity('Mental health evaluation'), 'activity_date_time')); | |
76 | $this->assertEquals($actStatuses['Completed'], self::ag($analyzer->getSingleActivity('Mental health evaluation'), 'status_id')); | |
77 | $this->assertApproxTime('2013-11-30 03:00:00', self::ag($analyzer->getSingleActivity('Secure temporary housing'), 'activity_date_time')); | |
78 | $this->assertEquals($actStatuses['Scheduled'], self::ag($analyzer->getSingleActivity('Secure temporary housing'), 'status_id')); | |
b019b130 TO |
79 | |
80 | // Complete third activity; close case | |
81 | \CRM_Utils_Time::setTime('2013-11-30 04:00:00'); | |
82 | $this->callApiSuccess('Activity', 'create', array( | |
c794d82e | 83 | 'id' => self::ag($analyzer->getSingleActivity('Secure temporary housing'), 'id'), |
b019b130 TO |
84 | 'status_id' => $actStatuses['Completed'], |
85 | )); | |
86 | $analyzer->flush(); | |
c794d82e TO |
87 | $this->assertApproxTime('2013-11-30 01:00:00', self::ag($analyzer->getSingleActivity('Medical evaluation'), 'activity_date_time')); |
88 | $this->assertEquals($actStatuses['Completed'], self::ag($analyzer->getSingleActivity('Medical evaluation'), 'status_id')); | |
89 | $this->assertApproxTime('2013-11-30 02:00:00', self::ag($analyzer->getSingleActivity('Mental health evaluation'), 'activity_date_time')); | |
90 | $this->assertEquals($actStatuses['Completed'], self::ag($analyzer->getSingleActivity('Mental health evaluation'), 'status_id')); | |
91 | $this->assertApproxTime('2013-11-30 03:00:00', self::ag($analyzer->getSingleActivity('Secure temporary housing'), 'activity_date_time')); | |
92 | $this->assertEquals($actStatuses['Completed'], self::ag($analyzer->getSingleActivity('Secure temporary housing'), 'status_id')); | |
93 | $this->assertEquals($caseStatuses['Closed'], self::ag($analyzer->getCase(), 'status_id')); | |
94 | // */ | |
b019b130 TO |
95 | } |
96 | ||
97 | /** | |
98 | * @param $caseTypes | |
99 | * @see \CRM_Utils_Hook::caseTypes | |
100 | */ | |
00be9182 | 101 | public function hook_caseTypes(&$caseTypes) { |
b019b130 TO |
102 | $caseTypes[$this->caseType] = array( |
103 | 'module' => 'org.civicrm.hrcase', | |
104 | 'name' => $this->caseType, | |
105 | 'file' => __DIR__ . '/HousingSupportWithSequence.xml', | |
106 | ); | |
107 | } | |
108 | ||
7fe37828 EM |
109 | /** |
110 | * @param $expected | |
111 | * @param $actual | |
112 | * @param int $tolerance | |
113 | */ | |
00be9182 | 114 | public function assertApproxTime($expected, $actual, $tolerance = 1) { |
b019b130 TO |
115 | $diff = abs(strtotime($expected) - strtotime($actual)); |
116 | $this->assertTrue($diff <= $tolerance, sprintf("Check approx time equality. expected=[%s] actual=[%s] tolerance=[%s]", | |
117 | $expected, $actual, $tolerance | |
118 | )); | |
119 | } | |
c794d82e TO |
120 | |
121 | /** | |
122 | * Get a value from an array. This is syntactic-sugar to work-around PHP 5.3's limited syntax. | |
123 | * | |
124 | * @param $array | |
125 | * @param $key | |
126 | * @return mixed | |
127 | */ | |
00be9182 | 128 | public static function ag($array, $key) { |
c794d82e TO |
129 | return $array[$key]; |
130 | } | |
96025800 | 131 | |
ef10e0b5 | 132 | } |