1<?php 2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project 3// 4// All Rights Reserved. See copyright.txt for details and a complete list of authors. 5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. 6// $Id$ 7/** 8 * @group integration 9 */ 10class MembershipTest extends TikiTestCase 11{ 12 13 protected $userlib; 14 15 function setUp() 16 { 17 parent::setUp(); 18 $cachelib = TikiLib::lib('cache'); 19 20 $this->userlib = new UsersLib(); 21 22 $cachelib->invalidate('grouplist'); 23 24 $this->userlib->remove_user('membershiptest_a'); 25 $this->userlib->remove_user('membershiptest_b'); 26 $this->userlib->remove_user('membershiptest_c'); 27 $this->userlib->remove_group('MembershipTest'); 28 29 $cachelib->invalidate('grouplist'); 30 31 $this->userlib->add_group('MembershipTest', '', '', 0, 0, '', '', 0, '', 0, 0, 'n', 45); 32 33 global $user_preferences; 34 $user_preferences = []; 35 36 $this->userlib->add_user('membershiptest_a', 'abc', 'a@example.com'); 37 $this->userlib->add_user('membershiptest_b', 'abc', 'a@example.com'); 38 $this->userlib->add_user('membershiptest_c', 'abc', 'a@example.com'); 39 40 $this->userlib->assign_user_to_group('membershiptest_a', 'MembershipTest'); 41 $this->userlib->assign_user_to_group('membershiptest_b', 'MembershipTest'); 42 } 43 44 function tearDown() 45 { 46 parent::tearDown(); 47 $this->userlib->remove_user('membershiptest_a'); 48 $this->userlib->remove_user('membershiptest_b'); 49 $this->userlib->remove_user('membershiptest_c'); 50 $this->userlib->remove_group('MembershipTest'); 51 } 52 53 function testExtendMembership() 54 { 55 //$this->markTestIncomplete('Marking this test as incomplete since it is failing and the problem is the test itself and not the code that is being tested. If you are familiar with these test please fix it.'); 56 $id = $this->userlib->get_user_id('membershiptest_a'); 57 58 $expires = $this->userlib->getOne( 59 'SELECT `expire` FROM `users_usergroups` WHERE `userId` = ? AND `groupName` = "MembershipTest"', 60 [$id] 61 ); 62 63 //convert start date to object 64 $rawstartutc = new DateTimeImmutable('@' . $expires); 65 global $prefs; 66 $tz = TikiDate::TimezoneIsValidId($prefs['server_timezone']) ? $prefs['server_timezone'] : 'UTC'; 67 $timezone = new DateTimeZone($tz); 68 $startlocal = $rawstartutc->setTimezone($timezone); 69 70 $extendto = $startlocal->modify('+' . 45 * 3 . ' days'); 71 $expect = $extendto->getTimestamp(); 72 73 $this->userlib->extend_membership('membershiptest_a', 'MembershipTest', 3); 74 75 76 $this->assertEquals( 77 $expect, 78 $this->userlib->getOne( 79 'SELECT `expire` FROM `users_usergroups` WHERE `userId` = ? AND `groupName` = "MembershipTest"', 80 [$id] 81 ) 82 ); 83 $this->assertEquals( 84 $expires, 85 $this->userlib->getOne( 86 'SELECT `expire` FROM `users_usergroups` WHERE `userId` = ? AND `groupName` = "MembershipTest"', 87 [$this->userlib->get_user_id('membershiptest_b')] 88 ) 89 ); 90 } 91 92 function testExtendExpiredMembership() 93 { 94 $id = $this->userlib->get_user_id('membershiptest_b'); 95 96 $expires = $this->userlib->getOne( 97 'SELECT `created` FROM `users_usergroups` WHERE `userId` = ? AND `groupName` = "MembershipTest"', 98 [$id] 99 ); 100 101 //convert start date to object 102 $rawstartutc = new DateTimeImmutable('@' . $expires); 103 global $prefs; 104 $tz = TikiDate::TimezoneIsValidId($prefs['server_timezone']) ? $prefs['server_timezone'] : 'UTC'; 105 $timezone = new DateTimeZone($tz); 106 $startlocal = $rawstartutc->setTimezone($timezone); 107 108 $extendto = $startlocal->modify('+' . 45 * 2 . ' days'); 109 $expect = $extendto->getTimestamp(); 110 111 $this->userlib->query('UPDATE `users_usergroups` SET `expire` = `expire` - 12*3600 - 45*24*3600 WHERE `userId` = ?', [$id]); 112 113 $this->userlib->extend_membership('membershiptest_b', 'MembershipTest', 2); 114 115 $this->assertEquals( 116 $expect, 117 $this->userlib->getOne( 118 'SELECT `expire` FROM `users_usergroups` WHERE `userId` = ? AND `groupName` = "MembershipTest"', 119 [$id] 120 ) 121 ); 122 } 123} 124