Merge pull request #16790 from eileenmcnaughton/pcp
[civicrm-core.git] / tests / phpunit / CRM / Member / BAO / MembershipTypeTest.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
10 */
11
12 /**
13 * Class CRM_Member_BAO_MembershipTypeTest
14 * @group headless
15 */
16 class CRM_Member_BAO_MembershipTypeTest extends CiviUnitTestCase {
17
18 public function setUp() {
19 parent::setUp();
20
21 //create relationship
22 $params = [
23 'name_a_b' => 'Relation 1',
24 'name_b_a' => 'Relation 2',
25 'contact_type_a' => 'Individual',
26 'contact_type_b' => 'Organization',
27 'is_reserved' => 1,
28 'is_active' => 1,
29 ];
30 $this->_relationshipTypeId = $this->relationshipTypeCreate($params);
31 $this->_orgContactID = $this->organizationCreate();
32 $this->_indiviContactID = $this->individualCreate();
33 $this->_financialTypeId = 1;
34 $this->_membershipStatusID = $this->membershipStatusCreate('test status');
35 }
36
37 /**
38 * Tears down the fixture, for example, closes a network connection.
39 * This method is called after a test is executed.
40 */
41 public function tearDown() {
42 $this->relationshipTypeDelete($this->_relationshipTypeId);
43 $this->membershipStatusDelete($this->_membershipStatusID);
44 $this->contactDelete($this->_orgContactID);
45 $this->contactDelete($this->_indiviContactID);
46 }
47
48 /**
49 * check function add()
50 *
51 */
52 public function testAdd() {
53 $ids = [];
54 $params = [
55 'name' => 'test type',
56 'domain_id' => 1,
57 'description' => NULL,
58 'minimum_fee' => 10,
59 'duration_unit' => 'year',
60 'member_of_contact_id' => $this->_orgContactID,
61 'period_type' => 'fixed',
62 'duration_interval' => 1,
63 'financial_type_id' => $this->_financialTypeId,
64 'relationship_type_id' => $this->_relationshipTypeId,
65 'visibility' => 'Public',
66 ];
67
68 $membershipType = CRM_Member_BAO_MembershipType::add($params, $ids);
69
70 $membership = $this->assertDBNotNull('CRM_Member_BAO_MembershipType', $this->_orgContactID,
71 'name', 'member_of_contact_id',
72 'Database check on updated membership record.'
73 );
74
75 $this->assertEquals($membership, 'test type', 'Verify membership type name.');
76 $this->membershipTypeDelete(['id' => $membershipType->id]);
77 }
78
79 /**
80 * check function retrive()
81 *
82 */
83 public function testRetrieve() {
84 $ids = [];
85 $params = [
86 'name' => 'General',
87 'description' => NULL,
88 'domain_id' => 1,
89 'minimum_fee' => 100,
90 'duration_unit' => 'year',
91 'period_type' => 'fixed',
92 'member_of_contact_id' => $this->_orgContactID,
93 'duration_interval' => 1,
94 'financial_type_id' => $this->_financialTypeId,
95 'relationship_type_id' => $this->_relationshipTypeId,
96 'visibility' => 'Public',
97 ];
98 $membershipType = CRM_Member_BAO_MembershipType::add($params, $ids);
99
100 $params = ['name' => 'General'];
101 $default = [];
102 $result = CRM_Member_BAO_MembershipType::retrieve($params, $default);
103 $this->assertEquals($result->name, 'General', 'Verify membership type name.');
104 $this->membershipTypeDelete(['id' => $membershipType->id]);
105 }
106
107 /**
108 * check function isActive()
109 *
110 */
111 public function testSetIsActive() {
112 $ids = [];
113 $params = [
114 'name' => 'General',
115 'description' => NULL,
116 'domain_id' => 1,
117 'minimum_fee' => 100,
118 'duration_unit' => 'year',
119 'period_type' => 'fixed',
120 'duration_interval' => 1,
121 'member_of_contact_id' => $this->_orgContactID,
122 'financial_type_id' => $this->_financialTypeId,
123 'relationship_type_id' => $this->_relationshipTypeId,
124 'visibility' => 'Public',
125 'is_active' => 1,
126 ];
127 $membership = CRM_Member_BAO_MembershipType::add($params, $ids);
128
129 CRM_Member_BAO_MembershipType::setIsActive($membership->id, 0);
130
131 $isActive = $this->assertDBNotNull('CRM_Member_BAO_MembershipType', $membership->id,
132 'is_active', 'id',
133 'Database check on membership type status.'
134 );
135
136 $this->assertEquals($isActive, 0, 'Verify membership type status.');
137 $this->membershipTypeDelete(['id' => $membership->id]);
138 }
139
140 /**
141 * check function del()
142 *
143 */
144 public function testdel() {
145 $ids = [];
146 $params = [
147 'name' => 'General',
148 'description' => NULL,
149 'minimum_fee' => 100,
150 'domain_id' => 1,
151 'duration_unit' => 'year',
152 'period_type' => 'fixed',
153 'member_of_contact_id' => $this->_orgContactID,
154 'duration_interval' => 1,
155 'financial_type_id' => $this->_financialTypeId,
156 'relationship_type_id' => $this->_relationshipTypeId,
157 'visibility' => 'Public',
158 'is_active' => 1,
159 ];
160 $membership = CRM_Member_BAO_MembershipType::add($params, $ids);
161
162 $result = CRM_Member_BAO_MembershipType::del($membership->id);
163
164 $this->assertEquals($result, TRUE, 'Verify membership deleted.');
165 }
166
167 /**
168 * check function convertDayFormat( )
169 *
170 */
171 public function testConvertDayFormat() {
172 $ids = [];
173 $params = [
174 'name' => 'General',
175 'description' => NULL,
176 'minimum_fee' => 100,
177 'domain_id' => 1,
178 'duration_unit' => 'year',
179 'period_type' => 'fixed',
180 'member_of_contact_id' => $this->_orgContactID,
181 'fixed_period_start_day' => 1213,
182 'fixed_period_rollover_day' => 1214,
183 'duration_interval' => 1,
184 'financial_type_id' => $this->_financialTypeId,
185 'relationship_type_id' => $this->_relationshipTypeId,
186 'visibility' => 'Public',
187 'is_active' => 1,
188 ];
189 $membership = CRM_Member_BAO_MembershipType::add($params, $ids);
190 $membershipType[$membership->id] = $params;
191
192 CRM_Member_BAO_MembershipType::convertDayFormat($membershipType);
193
194 $this->assertEquals($membershipType[$membership->id]['fixed_period_rollover_day'], 'Dec 14', 'Verify memberFixed Period Rollover Day.');
195 $this->membershipTypeDelete(['id' => $membership->id]);
196 }
197
198 /**
199 * check function getMembershipTypes( )
200 *
201 */
202 public function testGetMembershipTypes() {
203 $ids = [];
204 $params = [
205 'name' => 'General',
206 'description' => NULL,
207 'minimum_fee' => 100,
208 'domain_id' => 1,
209 'duration_unit' => 'year',
210 'member_of_contact_id' => $this->_orgContactID,
211 'period_type' => 'fixed',
212 'duration_interval' => 1,
213 'financial_type_id' => $this->_financialTypeId,
214 'relationship_type_id' => $this->_relationshipTypeId,
215 'visibility' => 'Public',
216 'is_active' => 1,
217 ];
218 $membership = CRM_Member_BAO_MembershipType::add($params, $ids);
219 $result = CRM_Member_BAO_MembershipType::getMembershipTypes();
220 $this->assertEquals($result[$membership->id], 'General', 'Verify membership types.');
221 $this->membershipTypeDelete(['id' => $membership->id]);
222 }
223
224 /**
225 * check function getMembershipTypeDetails( )
226 *
227 */
228 public function testGetMembershipTypeDetails() {
229 $ids = [];
230 $params = [
231 'name' => 'General',
232 'description' => NULL,
233 'minimum_fee' => 100,
234 'domain_id' => 1,
235 'duration_unit' => 'year',
236 'period_type' => 'fixed',
237 'member_of_contact_id' => $this->_orgContactID,
238 'duration_interval' => 1,
239 'financial_type_id' => $this->_financialTypeId,
240 'relationship_type_id' => $this->_relationshipTypeId,
241 'visibility' => 'Public',
242 'is_active' => 1,
243 ];
244 $membership = CRM_Member_BAO_MembershipType::add($params, $ids);
245 $result = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($membership->id);
246
247 $this->assertEquals($result['name'], 'General', 'Verify membership type details.');
248 $this->assertEquals($result['duration_unit'], 'year', 'Verify membership types details.');
249 $this->membershipTypeDelete(['id' => $membership->id]);
250 }
251
252 /**
253 * check function getDatesForMembershipType( )
254 *
255 */
256 public function testGetDatesForMembershipType() {
257 $ids = [];
258 $params = [
259 'name' => 'General',
260 'description' => NULL,
261 'minimum_fee' => 100,
262 'domain_id' => 1,
263 'duration_unit' => 'year',
264 'member_of_contact_id' => $this->_orgContactID,
265 'period_type' => 'rolling',
266 'duration_interval' => 1,
267 'financial_type_id' => $this->_financialTypeId,
268 'relationship_type_id' => $this->_relationshipTypeId,
269 'visibility' => 'Public',
270 'is_active' => 1,
271 ];
272 $membership = CRM_Member_BAO_MembershipType::add($params, $ids);
273
274 $membershipDates = CRM_Member_BAO_MembershipType::getDatesForMembershipType($membership->id);
275 $this->assertEquals($membershipDates['start_date'], date('Ymd'), 'Verify membership types details.');
276 $this->membershipTypeDelete(['id' => $membership->id]);
277 }
278
279 /**
280 * check function getRenewalDatesForMembershipType( )
281 *
282 */
283 public function testGetRenewalDatesForMembershipType() {
284 $ids = [];
285 $params = [
286 'name' => 'General',
287 'domain_id' => 1,
288 'description' => NULL,
289 'minimum_fee' => 100,
290 'duration_unit' => 'year',
291 'member_of_contact_id' => $this->_orgContactID,
292 'period_type' => 'rolling',
293 'duration_interval' => 1,
294 'financial_type_id' => $this->_financialTypeId,
295 'relationship_type_id' => $this->_relationshipTypeId,
296 'visibility' => 'Public',
297 'is_active' => 1,
298 ];
299 $membershipType = CRM_Member_BAO_MembershipType::add($params, $ids);
300
301 $params = [
302 'contact_id' => $this->_indiviContactID,
303 'membership_type_id' => $membershipType->id,
304 'join_date' => '20060121000000',
305 'start_date' => '20060121000000',
306 'end_date' => '20070120000000',
307 'source' => 'Payment',
308 'is_override' => 1,
309 'status_id' => $this->_membershipStatusID,
310 ];
311 $ids = [];
312 $membership = CRM_Member_BAO_Membership::create($params, $ids);
313
314 $membershipRenewDates = CRM_Member_BAO_MembershipType::getRenewalDatesForMembershipType($membership->id);
315
316 $this->assertEquals($membershipRenewDates['start_date'], '20060121', 'Verify membership renewal start date.');
317 $this->assertEquals($membershipRenewDates['end_date'], '20080120', 'Verify membership renewal end date.');
318
319 $this->membershipDelete($membership->id);
320 $this->membershipTypeDelete(['id' => $membershipType->id]);
321 }
322
323 /**
324 * check function getMembershipTypesByOrg( )
325 *
326 */
327 public function testGetMembershipTypesByOrg() {
328 $ids = [];
329 $params = [
330 'name' => 'General',
331 'description' => NULL,
332 'domain_id' => 1,
333 'minimum_fee' => 100,
334 'duration_unit' => 'year',
335 'member_of_contact_id' => $this->_orgContactID,
336 'period_type' => 'rolling',
337 'duration_interval' => 1,
338 'financial_type_id' => $this->_financialTypeId,
339 'relationship_type_id' => $this->_relationshipTypeId,
340 'visibility' => 'Public',
341 'is_active' => 1,
342 ];
343 $membershipType = CRM_Member_BAO_MembershipType::add($params, $ids);
344
345 $membershipTypesResult = civicrm_api3('MembershipType', 'get', [
346 'member_of_contact_id' => $this->_orgContactID,
347 'options' => [
348 'limit' => 0,
349 ],
350 ]);
351 $result = $membershipTypesResult['values'] ?? NULL;
352 $this->assertEquals(empty($result), FALSE, 'Verify membership types for organization.');
353
354 $membershipTypesResult = civicrm_api3('MembershipType', 'get', [
355 'member_of_contact_id' => 501,
356 'options' => [
357 'limit' => 0,
358 ],
359 ]);
360 $result = $membershipTypesResult['values'] ?? NULL;
361 $this->assertEquals(empty($result), TRUE, 'Verify membership types for organization.');
362
363 $this->membershipTypeDelete(['id' => $membershipType->id]);
364 }
365
366 }