Ian province abbreviation patch - issue 724
[civicrm-core.git] / tests / phpunit / Civi / CCase / SequenceListenerTest.php
CommitLineData
b019b130
TO
1<?php
2namespace Civi\CCase;
3
4require_once 'CiviTest/CiviCaseTestCase.php';
5
7fe37828
EM
6/**
7 * Class SequenceListenerTest
8 *
9 * @package Civi\CCase
10 */
b019b130
TO
11class 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}