Merge pull request #15435 from MegaphoneJon/reporting-21
[civicrm-core.git] / tests / phpunit / CRM / Case / XMLRepositoryTest.php
1 <?php
2
3 /**
4 * Class CRM_Case_XMLRepositoryTest
5 * @group headless
6 */
7 class CRM_Case_XMLRepositoryTest extends CiviUnitTestCase {
8 protected $fixtures = [];
9
10 protected function setUp() {
11 parent::setUp();
12 $this->fixtures['CaseTypeWithSingleActivityType'] = '
13 <CaseType>
14 <name>CaseTypeWithSingleActivityType</name>
15 <ActivityTypes>
16 <ActivityType>
17 <name>Single Activity Type</name>
18 <max_instances>1</max_instances>
19 </ActivityType>
20 </ActivityTypes>
21 </CaseType>
22 ';
23 $this->fixtures['CaseTypeWithTwoActivityTypes'] = '
24 <CaseType>
25 <name>CaseTypeWithTwoActivityTypes</name>
26 <ActivityTypes>
27 <ActivityType>
28 <name>First Activity Type</name>
29 <max_instances>1</max_instances>
30 </ActivityType>
31 <ActivityType>
32 <name>Second Activity Type</name>
33 </ActivityType>
34 </ActivityTypes>
35 </CaseType>
36 ';
37 $this->fixtures['CaseTypeWithThreeActivityTypes'] = '
38 <CaseType>
39 <name>CaseTypeWithThreeActivityTypes</name>
40 <ActivityTypes>
41 <ActivityType>
42 <name>First Activity Type</name>
43 <max_instances>1</max_instances>
44 </ActivityType>
45 <ActivityType>
46 <name>Second Activity Type</name>
47 </ActivityType>
48 <ActivityType>
49 <name>Third Activity Type</name>
50 </ActivityType>
51 </ActivityTypes>
52 </CaseType>
53 ';
54 $this->fixtures['CaseTypeWithSingleRole'] = '
55 <CaseType>
56 <name>CaseTypeWithSingleRole</name>
57 <CaseRoles>
58 <RelationshipType>
59 <name>Single Role</name>
60 <creator>1</creator>
61 </RelationshipType>
62 </CaseRoles>
63 </CaseType>
64 ';
65 $this->fixtures['CaseTypeWithTwoRoles'] = '
66 <CaseType>
67 <name>CaseTypeWithTwoRoles</name>
68 <CaseRoles>
69 <RelationshipType>
70 <name>First Role</name>
71 <creator>1</creator>
72 </RelationshipType>
73 <RelationshipType>
74 <name>Second Role</name>
75 </RelationshipType>
76 </CaseRoles>
77 </CaseType>
78 ';
79 $this->fixtures['CaseTypeWithThreeRoles'] = '
80 <CaseType>
81 <name>CaseTypeWithThreeRoles</name>
82 <CaseRoles>
83 <RelationshipType>
84 <name>First Role</name>
85 <creator>1</creator>
86 </RelationshipType>
87 <RelationshipType>
88 <name>Second Role</name>
89 </RelationshipType>
90 <RelationshipType>
91 <name>Third Role</name>
92 </RelationshipType>
93 </CaseRoles>
94 </CaseType>
95 ';
96
97 }
98
99 public function testGetAllDeclaredActivityTypes() {
100 $repo = new CRM_Case_XMLRepository(
101 ['CaseTypeWithTwoActivityTypes', 'CaseTypeWithThreeActivityTypes'],
102 [
103 'CaseTypeWithTwoActivityTypes' => new SimpleXMLElement($this->fixtures['CaseTypeWithTwoActivityTypes']),
104 'CaseTypeWithThreeActivityTypes' => new SimpleXMLElement($this->fixtures['CaseTypeWithThreeActivityTypes']),
105 /* healthful noise: */
106 'CaseTypeWithSingleRole' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleRole']),
107 ]
108 );
109
110 // omitted: 'Single Activity Type'
111 $expected = ['First Activity Type', 'Second Activity Type', 'Third Activity Type'];
112 $actual = $repo->getAllDeclaredActivityTypes();
113 $this->assertEquals($expected, $actual);
114 }
115
116 public function testGetAllDeclaredRelationshipTypes() {
117 $repo = new CRM_Case_XMLRepository(
118 ['CaseTypeWithTwoRoles', 'CaseTypeWithThreeRoles', 'CaseTypeWithSingleActivityType'],
119 [
120 'CaseTypeWithTwoRoles' => new SimpleXMLElement($this->fixtures['CaseTypeWithTwoRoles']),
121 'CaseTypeWithThreeRoles' => new SimpleXMLElement($this->fixtures['CaseTypeWithThreeRoles']),
122 /* healthful noise: */
123 'CaseTypeWithSingleActivityType' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleActivityType']),
124 ]
125 );
126 // omitted: 'Single Role'
127 $expected = ['First Role', 'Second Role', 'Third Role'];
128 $actual = $repo->getAllDeclaredRelationshipTypes();
129 $this->assertEquals($expected, $actual);
130 }
131
132 public function testGetActivityReferenceCount_1() {
133 $repo = new CRM_Case_XMLRepository(
134 ['CaseTypeWithSingleActivityType'],
135 [
136 'CaseTypeWithSingleActivityType' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleActivityType']),
137 /* healthful noise: */
138 'CaseTypeWithSingleRole' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleRole']),
139 ]
140 );
141
142 $this->assertEquals(1, $repo->getActivityReferenceCount('Single Activity Type'));
143 $this->assertEquals(0, $repo->getActivityReferenceCount('First Activity Type'));
144 $this->assertEquals(0, $repo->getActivityReferenceCount('Second Activity Type'));
145 $this->assertEquals(0, $repo->getActivityReferenceCount('Third Activity Type'));
146 }
147
148 public function testGetActivityReferenceCount_23() {
149 $repo = new CRM_Case_XMLRepository(
150 ['CaseTypeWithTwoActivityTypes', 'CaseTypeWithThreeActivityTypes'],
151 [
152 'CaseTypeWithTwoActivityTypes' => new SimpleXMLElement($this->fixtures['CaseTypeWithTwoActivityTypes']),
153 'CaseTypeWithThreeActivityTypes' => new SimpleXMLElement($this->fixtures['CaseTypeWithThreeActivityTypes']),
154 /* noise: */
155 'CaseTypeWithSingleRole' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleRole']),
156 ]
157 );
158
159 $this->assertEquals(0, $repo->getActivityReferenceCount('Single Activity Type'));
160 $this->assertEquals(2, $repo->getActivityReferenceCount('First Activity Type'));
161 $this->assertEquals(2, $repo->getActivityReferenceCount('Second Activity Type'));
162 $this->assertEquals(1, $repo->getActivityReferenceCount('Third Activity Type'));
163 }
164
165 public function testGetRoleReferenceCount_1() {
166 $repo = new CRM_Case_XMLRepository(
167 ['CaseTypeWithSingleRole', 'CaseTypeWithSingleActivityType'],
168 [
169 'CaseTypeWithSingleRole' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleRole']),
170 /* healthful noise: */
171 'CaseTypeWithSingleActivityType' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleActivityType']),
172 ]
173 );
174
175 $this->assertEquals(1, $repo->getRelationshipReferenceCount('Single Role'));
176 $this->assertEquals(0, $repo->getRelationshipReferenceCount('First Role'));
177 $this->assertEquals(0, $repo->getRelationshipReferenceCount('Second Role'));
178 $this->assertEquals(0, $repo->getRelationshipReferenceCount('Third Role'));
179 }
180
181 public function testGetRoleReferenceCount_23() {
182 $repo = new CRM_Case_XMLRepository(
183 ['CaseTypeWithTwoRoles', 'CaseTypeWithThreeRoles', 'CaseTypeWithSingleActivityType'],
184 [
185 'CaseTypeWithTwoRoles' => new SimpleXMLElement($this->fixtures['CaseTypeWithTwoRoles']),
186 'CaseTypeWithThreeRoles' => new SimpleXMLElement($this->fixtures['CaseTypeWithThreeRoles']),
187 /* healthful noise: */
188 'CaseTypeWithSingleActivityType' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleActivityType']),
189 ]
190 );
191
192 $this->assertEquals(0, $repo->getRelationshipReferenceCount('Single Role'));
193 $this->assertEquals(2, $repo->getRelationshipReferenceCount('First Role'));
194 $this->assertEquals(2, $repo->getRelationshipReferenceCount('Second Role'));
195 $this->assertEquals(1, $repo->getRelationshipReferenceCount('Third Role'));
196 }
197
198 }