Merge pull request #8012 from agh1/multi-paypal-ipn-47
[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
acb109b7 10 * @group headless
7fe37828 11 */
b019b130
TO
12class 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}