0010046: config for disabling external imip
[tine20] / tests / tine20 / TestCase.php
1 <?php
2 /**
3  * Tine 2.0 - http://www.tine20.org
4  * 
5  * @package     Tests
6  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
7  * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
8  * @author      Philipp Schüle <p.schuele@metaways.de>
9  */
10
11 /**
12  * Test helper
13  */
14 require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'TestHelper.php';
15
16 /**
17  * Test class for Calendar_Backend_Sql
18  * 
19  * @package     Tests
20  */
21 abstract class TestCase extends PHPUnit_Framework_TestCase
22 {
23     /**
24      * transaction id if test is wrapped in an transaction
25      * 
26      * @var string
27      */
28     protected $_transactionId = null;
29     
30     /**
31      * usernames to be deleted (in sync backend)
32      * 
33      * @var string
34      */
35     protected $_usernamesToDelete = array();
36     
37     /**
38      * groups (ID) to be deleted (in sync backend)
39      * 
40      * @var array
41      */
42     protected $_groupIdsToDelete = array();
43     
44     /**
45      * remove group members, too when deleting groups
46      * 
47      * @var boolean
48      */
49     protected $_removeGroupMembers = true;
50     
51     /**
52      * test personas
53      * 
54      * @var array
55      */
56     protected $_personas = array();
57     
58     /**
59      * unit in test
60      *
61      * @var Object
62      */
63     protected $_uit = null;
64     
65     /**
66      * the test user
67      *
68      * @var Tinebase_Model_FullUser
69      */
70     protected $_originalTestUser;
71     
72     /**
73      * the mailer
74      * 
75      * @var Zend_Mail_Transport_Array
76      */
77     protected static $_mailer = null;
78     
79     /**
80      * set up tests
81      */
82     protected function setUp()
83     {
84         $this->_transactionId = Tinebase_TransactionManager::getInstance()->startTransaction(Tinebase_Core::getDb());
85         
86         Addressbook_Controller_Contact::getInstance()->setGeoDataForContacts(false);
87         
88         $this->_personas = Zend_Registry::get('personas');
89         
90         $this->_originalTestUser = Tinebase_Core::getUser();
91     }
92     
93     /**
94      * tear down tests
95      */
96     protected function tearDown()
97     {
98         if (Tinebase_User::getConfiguredBackend() === Tinebase_User::LDAP) {
99             $this->_deleteUsers();
100             $this->_deleteGroups();
101         }
102         if ($this->_transactionId) {
103             Tinebase_TransactionManager::getInstance()->rollBack();
104         }
105         
106         Addressbook_Controller_Contact::getInstance()->setGeoDataForContacts(true);
107         
108         Tinebase_Core::set(Tinebase_Core::USER, $this->_originalTestUser);
109     }
110     
111     /**
112      * test needs transaction
113      */
114     protected function _testNeedsTransaction()
115     {
116         if ($this->_transactionId) {
117             Tinebase_TransactionManager::getInstance()->commitTransaction($this->_transactionId);
118             $this->_transactionId = null;
119         }
120     }
121     
122     /**
123      * delete groups and their members
124      * 
125      * - also deletes groups and users in sync backends
126      */
127     protected function _deleteGroups()
128     {
129         foreach ($this->_groupIdsToDelete as $groupId) {
130             if ($this->_removeGroupMembers) {
131                 foreach (Tinebase_Group::getInstance()->getGroupMembers($groupId) as $userId) {
132                     try {
133                         Tinebase_User::getInstance()->deleteUser($userId);
134                     } catch (Exception $e) {
135                         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__
136                             . ' error while deleting user: ' . $e->getMessage());
137                     }
138                 }
139             }
140             try {
141                 Tinebase_Group::getInstance()->deleteGroups($groupId);
142             } catch (Exception $e) {
143                 if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__
144                     . ' error while deleting group: ' . $e->getMessage());
145             }
146         }
147     }
148     
149     /**
150      * delete users
151      */
152     protected function _deleteUsers()
153     {
154         foreach ($this->_usernamesToDelete as $username) {
155             try {
156                 Tinebase_User::getInstance()->deleteUser(Tinebase_User::getInstance()->getUserByLoginName($username));
157             } catch (Exception $e) {
158                 if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__
159                     . ' error while deleting user: ' . $e->getMessage());
160             }
161         }
162     }
163
164     /**
165      * get personal container
166      * 
167      * @param string $applicationName
168      * @param Tinebase_Model_User $user
169      * @return Tinebase_Model_Container
170      */
171     protected function _getPersonalContainer($applicationName, $user = null)
172     {
173         if ($user === null) {
174             $user = Tinebase_Core::getUser();
175         }
176         
177         return Tinebase_Container::getInstance()->getPersonalContainer(
178             $user,
179             $applicationName, 
180             $user,
181             Tinebase_Model_Grants::GRANT_EDIT
182         )->getFirstRecord();
183     }
184
185     /**
186      * get test mail domain
187      * 
188      * @return string
189      */
190     protected function _getMailDomain()
191     {
192         $testconfig = Zend_Registry::get('testConfig');
193         return ($testconfig && isset($testconfig->maildomain)) ? $testconfig->maildomain : 'tine20.org';
194     }
195     
196     /**
197      * get test user email address
198      * 
199      * @return test user email address
200      */
201     protected function _getEmailAddress()
202     {
203         $testConfig = Zend_Registry::get('testConfig');
204         return ($testConfig->email) ? $testConfig->email : Tinebase_Core::getUser()->accountEmailAddress;
205     }
206     
207     /**
208      * lazy init of uit
209      * 
210      * @return Object
211      * 
212      * @todo fix ide object class detection for completions
213      */
214     protected function _getUit()
215     {
216         if ($this->_uit === null) {
217             $uitClass = preg_replace('/Tests{0,1}$/', '', get_class($this));
218             if (@method_exists($uitClass, 'getInstance')) {
219                 $this->_uit = call_user_func($uitClass . '::getInstance');
220             } else if (@class_exists($uitClass)) {
221                 $this->_uit = new $uitClass();
222             } else {
223                 throw new Exception('could not find class ' . $uitClass);
224             }
225         }
226         
227         return $this->_uit;
228     }
229     
230     /**
231      * get messages
232      * 
233      * @return array
234      */
235     public static function getMessages()
236     {
237         // make sure messages are sent if queue is activated
238         if (isset(Tinebase_Core::getConfig()->actionqueue)) {
239             Tinebase_ActionQueue::getInstance()->processQueue(100);
240         }
241         
242         return self::getMailer()->getMessages();
243     }
244     
245     /**
246      * get mailer
247      * 
248      * @return Zend_Mail_Transport_Abstract
249      */
250     public static function getMailer()
251     {
252         if (! self::$_mailer) {
253             self::$_mailer = Tinebase_Smtp::getDefaultTransport();
254         }
255         
256         return self::$_mailer;
257     }
258     
259     /**
260      * flush mailer (send all remaining mails first)
261      */
262     public static function flushMailer()
263     {
264         // make sure all messages are sent if queue is activated
265         if (isset(Tinebase_Core::getConfig()->actionqueue)) {
266             Tinebase_ActionQueue::getInstance()->processQueue(10000);
267         }
268         
269         self::getMailer()->flush();
270     }
271     
272     /**
273      * returns the content.xml of an ods document
274      * 
275      * @param string $filename
276      * @return SimpleXMLElement
277      */
278     protected function _getContentXML($filename)
279     {
280         $zipHandler = zip_open($filename);
281         
282         do {
283             $entry = zip_read($zipHandler);
284         } while ($entry && zip_entry_name($entry) != "content.xml");
285         
286         // open entry
287         zip_entry_open($zipHandler, $entry, "r");
288         
289         // read entry
290         $entryContent = zip_entry_read($entry, zip_entry_filesize($entry));
291         
292         $xml = simplexml_load_string($entryContent);
293         zip_close($zipHandler);
294         
295         return $xml;
296     }
297 }