From dd484b90b1c15989210d7379e51256d545856d95 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Mon, 29 Jun 2015 12:23:00 +0200 Subject: All settings are now stored in config.php Isolate functions related to config in Config.php + add unit tests + code_sniffer. options.php is not supported anymore, but its content will be automatically saved into config.php Fixes #shaarli/Shaarli#41 *TODO*: update [documentation](https://github.com/shaarli/Shaarli/wiki#configuration). --- tests/ConfigTest.php | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100755 tests/ConfigTest.php (limited to 'tests') diff --git a/tests/ConfigTest.php b/tests/ConfigTest.php new file mode 100755 index 00000000..4279c57e --- /dev/null +++ b/tests/ConfigTest.php @@ -0,0 +1,177 @@ + 'login', + 'hash' => 'hash', + 'salt' => 'salt', + 'timezone' => 'Europe/Paris', + 'title' => 'title', + 'titleLink' => 'titleLink', + 'redirector' => '', + 'disablesessionprotection' => false, + 'privateLinkByDefault' => false, + 'config' => [ + 'CONFIG_FILE' => 'tests/config.php', + 'DATADIR' => 'tests', + 'config1' => 'config1data', + 'config2' => 'config2data', + ] + ]; + } + + /** + * Executed after each test. + * + * @return void + */ + public function tearDown() + { + if (is_file(self::$_configFields['config']['CONFIG_FILE'])) { + unlink(self::$_configFields['config']['CONFIG_FILE']); + } + } + + /** + * Test writeConfig function, valid use case, while being logged in. + */ + public function testWriteConfig() + { + writeConfig(self::$_configFields, true); + + include self::$_configFields['config']['CONFIG_FILE']; + $this->assertEquals(self::$_configFields['login'], $GLOBALS['login']); + $this->assertEquals(self::$_configFields['hash'], $GLOBALS['hash']); + $this->assertEquals(self::$_configFields['salt'], $GLOBALS['salt']); + $this->assertEquals(self::$_configFields['timezone'], $GLOBALS['timezone']); + $this->assertEquals(self::$_configFields['title'], $GLOBALS['title']); + $this->assertEquals(self::$_configFields['titleLink'], $GLOBALS['titleLink']); + $this->assertEquals(self::$_configFields['redirector'], $GLOBALS['redirector']); + $this->assertEquals(self::$_configFields['disablesessionprotection'], $GLOBALS['disablesessionprotection']); + $this->assertEquals(self::$_configFields['privateLinkByDefault'], $GLOBALS['privateLinkByDefault']); + $this->assertEquals(self::$_configFields['config']['config1'], $GLOBALS['config']['config1']); + $this->assertEquals(self::$_configFields['config']['config2'], $GLOBALS['config']['config2']); + } + + /** + * Test writeConfig option while logged in: + * 1. init fields. + * 2. update fields, add new sub config, add new root config. + * 3. rewrite config. + * 4. check result. + */ + public function testWriteConfigFieldUpdate() + { + writeConfig(self::$_configFields, true); + self::$_configFields['title'] = 'ok'; + self::$_configFields['config']['config1'] = 'ok'; + self::$_configFields['config']['config_new'] = 'ok'; + self::$_configFields['new'] = 'should not be saved'; + writeConfig(self::$_configFields, true); + + include self::$_configFields['config']['CONFIG_FILE']; + $this->assertEquals('ok', $GLOBALS['title']); + $this->assertEquals('ok', $GLOBALS['config']['config1']); + $this->assertEquals('ok', $GLOBALS['config']['config_new']); + $this->assertFalse(isset($GLOBALS['new'])); + } + + /** + * Test writeConfig function with an empty array. + * + * @expectedException MissingFieldConfigException + */ + public function testWriteConfigEmpty() + { + writeConfig(array(), true); + } + + /** + * Test writeConfig function with a missing mandatory field. + * + * @expectedException MissingFieldConfigException + */ + public function testWriteConfigMissingField() + { + unset(self::$_configFields['login']); + writeConfig(self::$_configFields, true); + } + + /** + * Test writeConfig function while being logged out, and there is no config file existing. + */ + public function testWriteConfigLoggedOutNoFile() + { + writeConfig(self::$_configFields, false); + } + + /** + * Test writeConfig function while being logged out, and a config file already exists. + * + * @expectedException UnauthorizedConfigException + */ + public function testWriteConfigLoggedOutWithFile() + { + file_put_contents(self::$_configFields['config']['CONFIG_FILE'], ''); + writeConfig(self::$_configFields, false); + } + + /** + * Test mergeDeprecatedConfig while being logged in: + * 1. init a config file. + * 2. init a options.php file with update value. + * 3. merge. + * 4. check updated value in config file. + */ + public function testMergeDeprecatedConfig() + { + // init + writeConfig(self::$_configFields, true); + $configCopy = self::$_configFields; + $invert = !$configCopy['privateLinkByDefault']; + $configCopy['privateLinkByDefault'] = $invert; + + // Use writeConfig to create a options.php + $configCopy['config']['CONFIG_FILE'] = 'tests/options.php'; + writeConfig($configCopy, true); + + $this->assertTrue(is_file($configCopy['config']['CONFIG_FILE'])); + + // merge configs + mergeDeprecatedConfig(self::$_configFields, true); + + // make sure updated field is changed + include self::$_configFields['config']['CONFIG_FILE']; + $this->assertEquals($invert, $GLOBALS['privateLinkByDefault']); + $this->assertFalse(is_file($configCopy['config']['CONFIG_FILE'])); + } + + /** + * Test mergeDeprecatedConfig while being logged in without options file. + */ + public function testMergeDeprecatedConfigNoFile() + { + writeConfig(self::$_configFields, true); + mergeDeprecatedConfig(self::$_configFields, true); + + include self::$_configFields['config']['CONFIG_FILE']; + $this->assertEquals(self::$_configFields['login'], $GLOBALS['login']); + } +} \ No newline at end of file -- cgit v1.2.3