deactivated conf.d test
[tine20] / tests / tine20 / Tinebase / ConfigTest.php
1 <?php
2 /**
3  * Tine 2.0 - http://www.tine20.org
4  * 
5  * @package     Tinebase
6  * @license     http://www.gnu.org/licenses/agpl.html
7  * @copyright   Copyright (c) 2008-2015 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(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'TestHelper.php';
15
16 /**
17  * Test class for Tinebase_Config
18  */
19 class Tinebase_ConfigTest extends PHPUnit_Framework_TestCase
20 {
21     /**
22      * unit under test (UIT)
23      *
24      * @var Tinebase_Config
25      */
26     protected $_instance;
27
28     /**
29      * @var array test objects
30      */
31     protected $objects = array();
32
33     protected $_filenamesToDelete = array();
34
35     /**
36      * Sets up the fixture.
37      * This method is called before a test is executed.
38      *
39      * @access protected
40      */
41     protected function setUp()
42     {
43         $this->_instance = Tinebase_Config::getInstance();
44     }
45
46     /**
47      * Tears down the fixture
48      * This method is called after a test is executed.
49      *
50      * @access protected
51      */
52     protected function tearDown()
53     {
54         foreach ($this->_filenamesToDelete as $filename) {
55             unlink($filename);
56         }
57
58         Tinebase_Config::getInstance()->clearCache();
59     }
60
61     /**
62      * test instance retrival
63      *
64      */
65     public function testConfigInstance()
66     {
67         $this->assertTrue($this->_instance === Tinebase_Core::getConfig(), 'Tinebase_Core::getConfig() is wrong instance');
68     }
69
70     /**
71      * test basic config getting/setting/deleting cycle
72      */
73     public function testSetDeleteConfig()
74     {
75         $this->_instance->set(Tinebase_Config::PAGETITLEPOSTFIX, 'phpunit');
76         $this->assertEquals('phpunit', $this->_instance->{Tinebase_Config::PAGETITLEPOSTFIX}, 'could not set config');
77
78         $this->_instance->delete(Tinebase_Config::PAGETITLEPOSTFIX, 'phpunit');
79
80         $this->assertEquals('###PHPUNIT-NOTSET###', $this->_instance->get(Tinebase_Config::PAGETITLEPOSTFIX, '###PHPUNIT-NOTSET###'), 'config got not deleted');
81
82         $this->assertFalse(isset($this->_instance->{Tinebase_Config::PAGETITLEPOSTFIX}), '__isset not working');
83     }
84
85     /**
86      * test if config from config.inc.php overwrites config in db
87      *
88      */
89     public function testConfigFromFileOverwrites()
90     {
91         $configData = include('config.inc.php');
92
93         if (!(isset($configData['Overwrite Test']) || array_key_exists('Overwrite Test', $configData))) {
94             $this->markTestSkipped('config.inc.php has no test key "Overwrite Test"');
95             return;
96         }
97
98         $overwrittenValue = Tinebase_Record_Abstract::generateUID();
99         $this->_instance->{'Overwrite Test'} = $overwrittenValue;
100
101         $this->assertEquals($configData['Overwrite Test'], $this->_instance->{'Overwrite Test'});
102
103         $this->_instance->delete('Overwrite Test');
104     }
105
106     /**
107      * test get config from config.inc.php
108      *
109      */
110     public function testGetConfigFromFile()
111     {
112         $dbConfig = $this->_instance->database;
113
114         $this->assertGreaterThan(0, count($dbConfig), 'could not get db config');
115         $this->assertTrue($dbConfig['dbname'] != '', 'could not get dbname');
116     }
117
118     /**
119      * test config value is a struct
120      *
121      */
122     public function testConfigTypeStruct()
123     {
124         $dbConfig = $this->_instance->database;
125
126         $this->assertTrue($dbConfig instanceof Tinebase_Config_Struct, 'db config is not a struct');
127         $this->assertTrue($dbConfig['dbname'] != '', 'could not get dbname via arrayAccess');
128         $this->assertTrue($dbConfig->dbname != '', 'could not get dbname via objectAccess');
129     }
130
131     /**
132      * test client config retrival
133      *
134      */
135     public function testGetClientRegistryConfig()
136     {
137         $clientConfig = $this->_instance->getClientRegistryConfig();
138         $this->assertTrue($clientConfig instanceof Tinebase_Config_Struct, 'clientconfig is not a struct');
139         $this->assertTrue($clientConfig->Calendar instanceof Tinebase_Config_Struct, 'calendar clientconfig is not a struct');
140         $this->assertEquals(Calendar_Config::getInstance()->fixedCalendars, $clientConfig->Calendar->fixedCalendars->value, 'fixed calendar config not correct');
141
142         $this->assertFalse((isset($clientConfig->Tinebase['SMTP']) || array_key_exists('SMTP', $clientConfig->Tinebase)), 'SMTP is not a client config');
143     }
144
145     /**
146      * test if config returns empty array if it's empty
147      */
148     public function testReturnEmptyValue()
149     {
150         // Hold original value for further tests of sieve.
151         $keepOriginalValue = $this->_instance->get("sieve");
152
153         // Ensure  sieve key is null
154         $this->_instance->set("sieve", null);
155
156         // If key is null it throws an exception, so return empty array if it's null.
157         $this->assertTrue($this->_instance->get("sieve") instanceof Tinebase_Config_Struct);
158
159         // Check common function of the getFunction
160         $this->assertTrue(is_numeric($this->_instance->get("acceptedTermsVersion")));
161
162         // restore value
163         $this->_instance->set("sieve", $keepOriginalValue);
164     }
165
166     /**
167      * testApplicationDefaultConfig
168      */
169     public function testApplicationDefaultConfig()
170     {
171         $defaultConfigFile = $this->_getSalesCustomDefaultConfig();
172
173         if (file_exists($defaultConfigFile)) {
174             $this->markTestSkipped('ignore test because Sales default config exists');
175         }
176
177         $ignoreBillablesConfig = Sales_Config::getInstance()->get(Sales_Config::IGNORE_BILLABLES_BEFORE);
178         $this->assertEquals('2000-01-01 22:00:00', $ignoreBillablesConfig);
179
180         copy(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR . 'configtest.inc.php', $defaultConfigFile);
181         $this->_filenamesToDelete[] = $defaultConfigFile;
182
183         Sales_Config::getInstance()->clearCache();
184
185         $ignoreBillablesConfigAppDefault = Sales_Config::getInstance()->get(Sales_Config::IGNORE_BILLABLES_BEFORE);
186         $this->assertEquals('1999-10-01 22:00:00', $ignoreBillablesConfigAppDefault);
187     }
188
189     protected function _getSalesCustomDefaultConfig()
190     {
191         return dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR . 'tine20'
192         . DIRECTORY_SEPARATOR . 'Sales' . DIRECTORY_SEPARATOR . 'config.inc.php';
193     }
194
195     /**
196      * testFeatureEnabled
197      *
198      * @see 0010756: add feature switches for easy enabling/disabling of features
199      */
200     public function testFeatureEnabled()
201     {
202         $customConfigFilename = $this->_getSalesCustomDefaultConfig();
203         if (file_exists($customConfigFilename)) {
204             $this->markTestSkipped('do not test with existing custom config');
205         }
206
207         $invoicesFeatureEnabled = Sales_Config::getInstance()->featureEnabled(Sales_Config::FEATURE_INVOICES_MODULE);
208
209         $this->assertTrue($invoicesFeatureEnabled);
210     }
211
212     /**
213      * testComposeConfigDir
214      *
215      * @see 0010988: load additional config from conf.d
216      */
217     public function testComposeConfigDir()
218     {
219         $this->markTestSkipped('FIXME: should be reactivated');
220
221         $confdfolder = Tinebase_Config::getInstance()->get(Tinebase_Config::CONFD_FOLDER);
222         if (empty($confdfolder) || !is_readable($confdfolder)) {
223             $this->markTestSkipped('no confdfolder configured/readable');
224         }
225
226         $configValues = array('config1' => 'value1', 'config2' => 'value2');
227         foreach ($configValues as $configName => $expectedValue) {
228             $configValue = Tinebase_Config::getInstance()->get($configName);
229             $this->assertEquals($expectedValue, $configValue);
230         }
231
232         $cachedConfigFilename = Tinebase_Core::guessTempDir() . DIRECTORY_SEPARATOR . 'cachedConfig.inc.php';
233         $this->assertTrue(file_exists($cachedConfigFilename), 'cached config file does not exist: ' . $cachedConfigFilename);
234     }
235
236     /**
237      * @see 0011456: unable to add new activesync-devices in tine20
238      */
239     public function testDefaultNull()
240     {
241         // TODO maybe we need to remove the current config if is set
242         $defaultPolicy = ActiveSync_Config::getInstance()->get(ActiveSync_Config::DEFAULT_POLICY, null);
243         $this->assertTrue(is_null($defaultPolicy), 'config should be null: ' . var_export($defaultPolicy, true));
244     }
245
246     /**
247      * set + get bool config
248      */
249     public function testBoolConfig()
250     {
251         Tinebase_Config::getInstance()->set(Tinebase_Config::USE_LOGINNAME_AS_FOLDERNAME, true);
252
253         $this->assertEquals(true, Tinebase_Config::getInstance()->get(Tinebase_Config::USE_LOGINNAME_AS_FOLDERNAME));
254     }
255 }