3 * Tine 2.0 - http://www.tine20.org
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>
14 require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'TestHelper.php';
17 * Test class for Tinebase_Config
19 class Tinebase_ConfigTest extends PHPUnit_Framework_TestCase
22 * unit under test (UIT)
24 * @var Tinebase_Config
29 * @var array test objects
31 protected $objects = array();
33 protected $_filenamesToDelete = array();
36 * Sets up the fixture.
37 * This method is called before a test is executed.
41 protected function setUp()
43 $this->_instance = Tinebase_Config::getInstance();
47 * Tears down the fixture
48 * This method is called after a test is executed.
52 protected function tearDown()
54 foreach ($this->_filenamesToDelete as $filename) {
58 Tinebase_Config::getInstance()->clearCache();
62 * test instance retrival
65 public function testConfigInstance()
67 $this->assertTrue($this->_instance === Tinebase_Core::getConfig(), 'Tinebase_Core::getConfig() is wrong instance');
71 * test basic config getting/setting/deleting cycle
73 public function testSetDeleteConfig()
75 $this->_instance->set(Tinebase_Config::PAGETITLEPOSTFIX, 'phpunit');
76 $this->assertEquals('phpunit', $this->_instance->{Tinebase_Config::PAGETITLEPOSTFIX}, 'could not set config');
78 $this->_instance->delete(Tinebase_Config::PAGETITLEPOSTFIX, 'phpunit');
80 $this->assertEquals('###PHPUNIT-NOTSET###', $this->_instance->get(Tinebase_Config::PAGETITLEPOSTFIX, '###PHPUNIT-NOTSET###'), 'config got not deleted');
82 $this->assertFalse(isset($this->_instance->{Tinebase_Config::PAGETITLEPOSTFIX}), '__isset not working');
86 * test if config from config.inc.php overwrites config in db
89 public function testConfigFromFileOverwrites()
91 $configData = include('config.inc.php');
93 if (!(isset($configData['Overwrite Test']) || array_key_exists('Overwrite Test', $configData))) {
94 $this->markTestSkipped('config.inc.php has no test key "Overwrite Test"');
98 $overwrittenValue = Tinebase_Record_Abstract::generateUID();
99 $this->_instance->{'Overwrite Test'} = $overwrittenValue;
101 $this->assertEquals($configData['Overwrite Test'], $this->_instance->{'Overwrite Test'});
103 $this->_instance->delete('Overwrite Test');
107 * test get config from config.inc.php
110 public function testGetConfigFromFile()
112 $dbConfig = $this->_instance->database;
114 $this->assertGreaterThan(0, count($dbConfig), 'could not get db config');
115 $this->assertTrue($dbConfig['dbname'] != '', 'could not get dbname');
119 * test config value is a struct
122 public function testConfigTypeStruct()
124 $dbConfig = $this->_instance->database;
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');
132 * test client config retrival
135 public function testGetClientRegistryConfig()
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');
142 $this->assertFalse((isset($clientConfig->Tinebase['SMTP']) || array_key_exists('SMTP', $clientConfig->Tinebase)), 'SMTP is not a client config');
146 * test if config returns empty array if it's empty
148 public function testReturnEmptyValue()
150 // Hold original value for further tests of sieve.
151 $keepOriginalValue = $this->_instance->get("sieve");
153 // Ensure sieve key is null
154 $this->_instance->set("sieve", null);
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);
159 // Check common function of the getFunction
160 $this->assertTrue(is_numeric($this->_instance->get("acceptedTermsVersion")));
163 $this->_instance->set("sieve", $keepOriginalValue);
167 * testApplicationDefaultConfig
169 public function testApplicationDefaultConfig()
171 $defaultConfigFile = $this->_getSalesCustomDefaultConfig();
173 if (file_exists($defaultConfigFile)) {
174 $this->markTestSkipped('ignore test because Sales default config exists');
177 $ignoreBillablesConfig = Sales_Config::getInstance()->get(Sales_Config::IGNORE_BILLABLES_BEFORE);
178 $this->assertEquals('2000-01-01 22:00:00', $ignoreBillablesConfig);
180 copy(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR . 'configtest.inc.php', $defaultConfigFile);
181 $this->_filenamesToDelete[] = $defaultConfigFile;
183 Sales_Config::getInstance()->clearCache();
185 $ignoreBillablesConfigAppDefault = Sales_Config::getInstance()->get(Sales_Config::IGNORE_BILLABLES_BEFORE);
186 $this->assertEquals('1999-10-01 22:00:00', $ignoreBillablesConfigAppDefault);
189 protected function _getSalesCustomDefaultConfig()
191 return dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR . 'tine20'
192 . DIRECTORY_SEPARATOR . 'Sales' . DIRECTORY_SEPARATOR . 'config.inc.php';
198 * @see 0010756: add feature switches for easy enabling/disabling of features
200 public function testFeatureEnabled()
202 $customConfigFilename = $this->_getSalesCustomDefaultConfig();
203 if (file_exists($customConfigFilename)) {
204 $this->markTestSkipped('do not test with existing custom config');
207 $invoicesFeatureEnabled = Sales_Config::getInstance()->featureEnabled(Sales_Config::FEATURE_INVOICES_MODULE);
209 $this->assertTrue($invoicesFeatureEnabled);
213 * testComposeConfigDir
215 * @see 0010988: load additional config from conf.d
217 public function testComposeConfigDir()
219 $confdfolder = Tinebase_Config::getInstance()->get(Tinebase_Config::CONFD_FOLDER);
220 if (empty($confdfolder) || !is_readable($confdfolder)) {
221 $this->markTestSkipped('no confdfolder configured/readable');
224 $configValues = array('config1' => 'value1', 'config2' => 'value2');
225 foreach ($configValues as $configName => $expectedValue) {
226 $configValue = Tinebase_Config::getInstance()->get($configName);
227 $this->assertEquals($expectedValue, $configValue);
230 $cachedConfigFilename = Tinebase_Core::guessTempDir() . DIRECTORY_SEPARATOR . 'cachedConfig.inc.php';
231 $this->assertTrue(file_exists($cachedConfigFilename), 'cached config file does not exist: ' . $cachedConfigFilename);
235 * @see 0011456: unable to add new activesync-devices in tine20
237 public function testDefaultNull()
239 // TODO maybe we need to remove the current config if is set
240 $defaultPolicy = ActiveSync_Config::getInstance()->get(ActiveSync_Config::DEFAULT_POLICY, null);
241 $this->assertTrue(is_null($defaultPolicy), 'config should be null: ' . var_export($defaultPolicy, true));
245 * set + get bool config
247 public function testBoolConfig()
249 Tinebase_Config::getInstance()->set(Tinebase_Config::USE_LOGINNAME_AS_FOLDERNAME, true);
251 $this->assertEquals(true, Tinebase_Config::getInstance()->get(Tinebase_Config::USE_LOGINNAME_AS_FOLDERNAME));