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)
23 * @var Tinebase_Config
28 * @var array test objects
30 protected $objects = array();
32 protected $_filenamesToDelete = array();
35 * Sets up the fixture.
36 * This method is called before a test is executed.
40 protected function setUp()
42 $this->_instance = Tinebase_Config::getInstance();
46 * Tears down the fixture
47 * This method is called after a test is executed.
51 protected function tearDown()
53 foreach ($this->_filenamesToDelete as $filename) {
57 Tinebase_Config::getInstance()->clearCache();
61 * test instance retrival
64 public function testConfigInstance()
66 $this->assertTrue($this->_instance === Tinebase_Core::getConfig(), 'Tinebase_Core::getConfig() is wrong instance');
70 * test basic config getting/setting/deleting cycle
72 public function testSetDeleteConfig()
74 $this->_instance->set(Tinebase_Config::PAGETITLEPOSTFIX, 'phpunit');
75 $this->assertEquals('phpunit', $this->_instance->{Tinebase_Config::PAGETITLEPOSTFIX}, 'could not set config');
77 $this->_instance->delete(Tinebase_Config::PAGETITLEPOSTFIX, 'phpunit');
79 $this->assertEquals('###PHPUNIT-NOTSET###', $this->_instance->get(Tinebase_Config::PAGETITLEPOSTFIX, '###PHPUNIT-NOTSET###'), 'config got not deleted');
81 $this->assertFalse(isset($this->_instance->{Tinebase_Config::PAGETITLEPOSTFIX}), '__isset not working');
85 * test if config from config.inc.php overwrites config in db
88 public function testConfigFromFileOverwrites()
90 $configData = include('config.inc.php');
92 if (! (isset($configData['Overwrite Test']) || array_key_exists('Overwrite Test', $configData))) {
93 $this->markTestSkipped('config.inc.php has no test key "Overwrite Test"');
97 $overwrittenValue = Tinebase_Record_Abstract::generateUID();
98 $this->_instance->{'Overwrite Test'} = $overwrittenValue;
100 $this->assertEquals($configData['Overwrite Test'], $this->_instance->{'Overwrite Test'});
102 $this->_instance->delete('Overwrite Test');
106 * test get config from config.inc.php
109 public function testGetConfigFromFile()
111 $dbConfig = $this->_instance->database;
113 $this->assertGreaterThan(0, count($dbConfig), 'could not get db config');
114 $this->assertTrue($dbConfig['dbname'] != '', 'could not get dbname');
118 * test config value is a struct
121 public function testConfigTypeStruct()
123 $dbConfig = $this->_instance->database;
125 $this->assertTrue($dbConfig instanceof Tinebase_Config_Struct, 'db config is not a struct');
126 $this->assertTrue($dbConfig['dbname'] != '', 'could not get dbname via arrayAccess');
127 $this->assertTrue($dbConfig->dbname != '', 'could not get dbname via objectAccess');
131 * test client config retrival
134 public function testGetClientRegistryConfig()
136 $clientConfig = $this->_instance->getClientRegistryConfig();
137 $this->assertTrue($clientConfig instanceof Tinebase_Config_Struct, 'clientconfig is not a struct');
138 $this->assertTrue($clientConfig->Calendar instanceof Tinebase_Config_Struct, 'calendar clientconfig is not a struct');
139 $this->assertEquals(Calendar_Config::getInstance()->fixedCalendars, $clientConfig->Calendar->fixedCalendars->value, 'fixed calendar config not correct');
141 $this->assertFalse((isset($clientConfig->Tinebase['SMTP']) || array_key_exists('SMTP', $clientConfig->Tinebase)), 'SMTP is not a client config');
145 * test if config returns empty array if it's empty
147 public function testReturnEmptyValue()
149 // Hold original value for further tests of sieve.
150 $keepOriginalValue = $this->_instance->get("sieve");
152 // Ensure sieve key is null
153 $this->_instance->set("sieve", null);
155 // If key is null it throws an exception, so return empty array if it's null.
156 $this->assertTrue($this->_instance->get("sieve") instanceof Tinebase_Config_Struct);
158 // Check common function of the getFunction
159 $this->assertTrue(is_numeric($this->_instance->get("acceptedTermsVersion")));
162 $this->_instance->set("sieve", $keepOriginalValue);
166 * testApplicationDefaultConfig
168 public function testApplicationDefaultConfig()
170 $defaultConfigFile = $this->_getSalesCustomDefaultConfig();
172 if (file_exists($defaultConfigFile)) {
173 $this->markTestSkipped('ignore test because Sales default config exists');
176 $ignoreBillablesConfig = Sales_Config::getInstance()->get(Sales_Config::IGNORE_BILLABLES_BEFORE);
177 $this->assertEquals('2000-01-01 22:00:00', $ignoreBillablesConfig);
179 copy(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR . 'configtest.inc.php', $defaultConfigFile);
180 $this->_filenamesToDelete[] = $defaultConfigFile;
182 Sales_Config::getInstance()->clearCache();
184 $ignoreBillablesConfigAppDefault = Sales_Config::getInstance()->get(Sales_Config::IGNORE_BILLABLES_BEFORE);
185 $this->assertEquals('1999-10-01 22:00:00', $ignoreBillablesConfigAppDefault);
188 protected function _getSalesCustomDefaultConfig()
190 return dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR . 'tine20'
191 . DIRECTORY_SEPARATOR . 'Sales' . DIRECTORY_SEPARATOR . 'config.inc.php';
197 * @see 0010756: add feature switches for easy enabling/disabling of features
199 public function testFeatureEnabled()
201 $customConfigFilename = $this->_getSalesCustomDefaultConfig();
202 if (file_exists($customConfigFilename)) {
203 $this->markTestSkipped('do not test with existing custom config');
206 $invoicesFeatureEnabled = Sales_Config::getInstance()->featureEnabled(Sales_Config::FEATURE_INVOICES_MODULE);
208 $this->assertTrue($invoicesFeatureEnabled);
212 * testComposeConfigDir
214 * @see 0010988: load additional config from conf.d
216 public function testComposeConfigDir()
218 $confdfolder = Tinebase_Config::getInstance()->get(Tinebase_Config::CONFD_FOLDER);
219 if (empty($confdfolder) || ! is_readable($confdfolder)) {
220 $this->markTestSkipped('no confdfolder configured/readable');
223 $configValues = array('config1' => 'value1', 'config2' => 'value2');
224 foreach ($configValues as $configName => $expectedValue) {
225 $configValue = Tinebase_Config::getInstance()->get($configName);
226 $this->assertEquals($expectedValue, $configValue);
229 $cachedConfigFilename = Tinebase_Core::guessTempDir() . DIRECTORY_SEPARATOR . 'cachedConfig.inc.php';
230 $this->assertTrue(file_exists($cachedConfigFilename), 'cached config file does not exist: ' . $cachedConfigFilename);
234 * @see 0011456: unable to add new activesync-devices in tine20
236 public function testDefaultNull()
238 // TODO maybe we need to remove the current config if is set
239 $defaultPolicy = ActiveSync_Config::getInstance()->get(ActiveSync_Config::DEFAULT_POLICY, null);
240 $this->assertTrue(is_null($defaultPolicy), 'config should be null: ' . var_export($defaultPolicy, true));