Commit | Line | Data |
---|---|---|
b019b130 TO |
1 | <?php |
2 | namespace Civi\CCase; | |
3 | ||
4 | require_once 'CiviTest/CiviCaseTestCase.php'; | |
5 | ||
6 | class SequenceListenerTest extends \CiviCaseTestCase { | |
7 | ||
8 | public function setUp() { | |
9 | parent::setUp(); | |
10 | $this->_params = array( | |
82de141d | 11 | 'case_type' => $this->caseType, |
b019b130 TO |
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']); | |
936055db TO |
29 | $this->assertFalse($analyzer->hasActivity('Mental health evaluation')); |
30 | $this->assertFalse($analyzer->hasActivity('Secure temporary housing')); | |
31 | ||
32 | // Edit details of first activity -- but don't finish it yet! | |
33 | \CRM_Utils_Time::setTime('2013-11-30 01:30:00'); | |
34 | $this->callApiSuccess('Activity', 'create', array( | |
35 | 'id' => $analyzer->getSingleActivity('Medical evaluation')['id'], | |
36 | 'subject' => 'This is the new subject', | |
37 | )); | |
38 | ||
39 | $analyzer = new \Civi\CCase\Analyzer($case['id']); | |
40 | $this->assertEquals($caseStatuses['Open'], $analyzer->getCase()['status_id']); | |
41 | $this->assertEquals('2013-11-30 01:00:00', $analyzer->getSingleActivity('Medical evaluation')['activity_date_time']); | |
42 | $this->assertEquals($actStatuses['Scheduled'], $analyzer->getSingleActivity('Medical evaluation')['status_id']); | |
b019b130 TO |
43 | $this->assertFalse($analyzer->hasActivity('Mental health evaluation')); |
44 | $this->assertFalse($analyzer->hasActivity('Secure temporary housing')); | |
45 | ||
46 | // Complete first activity; schedule second | |
47 | \CRM_Utils_Time::setTime('2013-11-30 02:00:00'); | |
48 | $this->callApiSuccess('Activity', 'create', array( | |
49 | 'id' => $analyzer->getSingleActivity('Medical 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['Scheduled'], $analyzer->getSingleActivity('Mental health evaluation')['status_id']); | |
58 | $this->assertFalse($analyzer->hasActivity('Secure temporary housing')); | |
59 | ||
60 | // Complete second activity; schedule third | |
61 | \CRM_Utils_Time::setTime('2013-11-30 03:00:00'); | |
62 | $this->callApiSuccess('Activity', 'create', array( | |
63 | 'id' => $analyzer->getSingleActivity('Mental health evaluation')['id'], | |
64 | 'status_id' => $actStatuses['Completed'], | |
65 | )); | |
66 | $analyzer->flush(); | |
67 | $this->assertEquals($caseStatuses['Open'], $analyzer->getCase()['status_id']); | |
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['Scheduled'], $analyzer->getSingleActivity('Secure temporary housing')['status_id']); | |
74 | ||
75 | // Complete third activity; close case | |
76 | \CRM_Utils_Time::setTime('2013-11-30 04:00:00'); | |
77 | $this->callApiSuccess('Activity', 'create', array( | |
78 | 'id' => $analyzer->getSingleActivity('Secure temporary housing')['id'], | |
79 | 'status_id' => $actStatuses['Completed'], | |
80 | )); | |
81 | $analyzer->flush(); | |
82 | $this->assertEquals('2013-11-30 01:00:00', $analyzer->getSingleActivity('Medical evaluation')['activity_date_time']); | |
83 | $this->assertEquals($actStatuses['Completed'], $analyzer->getSingleActivity('Medical evaluation')['status_id']); | |
84 | $this->assertEquals('2013-11-30 02:00:00', $analyzer->getSingleActivity('Mental health evaluation')['activity_date_time']); | |
85 | $this->assertEquals($actStatuses['Completed'], $analyzer->getSingleActivity('Mental health evaluation')['status_id']); | |
86 | $this->assertEquals('2013-11-30 03:00:00', $analyzer->getSingleActivity('Secure temporary housing')['activity_date_time']); | |
87 | $this->assertEquals($actStatuses['Completed'], $analyzer->getSingleActivity('Secure temporary housing')['status_id']); | |
88 | $this->assertEquals($caseStatuses['Closed'], $analyzer->getCase()['status_id']); | |
89 | } | |
90 | ||
91 | /** | |
92 | * @param $caseTypes | |
93 | * @see \CRM_Utils_Hook::caseTypes | |
94 | */ | |
95 | function hook_caseTypes(&$caseTypes) { | |
96 | $caseTypes[$this->caseType] = array( | |
97 | 'module' => 'org.civicrm.hrcase', | |
98 | 'name' => $this->caseType, | |
99 | 'file' => __DIR__ . '/HousingSupportWithSequence.xml', | |
100 | ); | |
101 | } | |
102 | ||
103 | function assertApproxTime($expected, $actual, $tolerance = 1) { | |
104 | $diff = abs(strtotime($expected) - strtotime($actual)); | |
105 | $this->assertTrue($diff <= $tolerance, sprintf("Check approx time equality. expected=[%s] actual=[%s] tolerance=[%s]", | |
106 | $expected, $actual, $tolerance | |
107 | )); | |
108 | } | |
109 | } |