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