-<?php\r
-/**\r
- * Config' tests\r
- */\r
-\r
-require_once 'application/Config.php';\r
-\r
-/**\r
- * Unitary tests for Shaarli config related functions\r
- */\r
-class ConfigTest extends PHPUnit_Framework_TestCase\r
-{\r
- // Configuration input set.\r
- private static $_configFields;\r
-\r
- /**\r
- * Executed before each test.\r
- */\r
- public function setUp()\r
- {\r
- self::$_configFields = [\r
- 'login' => 'login',\r
- 'hash' => 'hash',\r
- 'salt' => 'salt',\r
- 'timezone' => 'Europe/Paris',\r
- 'title' => 'title',\r
- 'titleLink' => 'titleLink',\r
- 'redirector' => '',\r
- 'disablesessionprotection' => false,\r
- 'privateLinkByDefault' => false,\r
- 'config' => [\r
- 'CONFIG_FILE' => 'tests/config.php',\r
- 'DATADIR' => 'tests',\r
- 'config1' => 'config1data',\r
- 'config2' => 'config2data',\r
- ]\r
- ];\r
- }\r
-\r
- /**\r
- * Executed after each test.\r
- *\r
- * @return void\r
- */\r
- public function tearDown()\r
- {\r
- if (is_file(self::$_configFields['config']['CONFIG_FILE'])) {\r
- unlink(self::$_configFields['config']['CONFIG_FILE']);\r
- }\r
- }\r
-\r
- /**\r
- * Test writeConfig function, valid use case, while being logged in.\r
- */\r
- public function testWriteConfig()\r
- {\r
- writeConfig(self::$_configFields, true);\r
-\r
- include self::$_configFields['config']['CONFIG_FILE'];\r
- $this->assertEquals(self::$_configFields['login'], $GLOBALS['login']);\r
- $this->assertEquals(self::$_configFields['hash'], $GLOBALS['hash']);\r
- $this->assertEquals(self::$_configFields['salt'], $GLOBALS['salt']);\r
- $this->assertEquals(self::$_configFields['timezone'], $GLOBALS['timezone']);\r
- $this->assertEquals(self::$_configFields['title'], $GLOBALS['title']);\r
- $this->assertEquals(self::$_configFields['titleLink'], $GLOBALS['titleLink']);\r
- $this->assertEquals(self::$_configFields['redirector'], $GLOBALS['redirector']);\r
- $this->assertEquals(self::$_configFields['disablesessionprotection'], $GLOBALS['disablesessionprotection']);\r
- $this->assertEquals(self::$_configFields['privateLinkByDefault'], $GLOBALS['privateLinkByDefault']);\r
- $this->assertEquals(self::$_configFields['config']['config1'], $GLOBALS['config']['config1']);\r
- $this->assertEquals(self::$_configFields['config']['config2'], $GLOBALS['config']['config2']);\r
- }\r
-\r
- /**\r
- * Test writeConfig option while logged in:\r
- * 1. init fields.\r
- * 2. update fields, add new sub config, add new root config.\r
- * 3. rewrite config.\r
- * 4. check result.\r
- */\r
- public function testWriteConfigFieldUpdate()\r
- {\r
- writeConfig(self::$_configFields, true);\r
- self::$_configFields['title'] = 'ok';\r
- self::$_configFields['config']['config1'] = 'ok';\r
- self::$_configFields['config']['config_new'] = 'ok';\r
- self::$_configFields['new'] = 'should not be saved';\r
- writeConfig(self::$_configFields, true);\r
-\r
- include self::$_configFields['config']['CONFIG_FILE'];\r
- $this->assertEquals('ok', $GLOBALS['title']);\r
- $this->assertEquals('ok', $GLOBALS['config']['config1']);\r
- $this->assertEquals('ok', $GLOBALS['config']['config_new']);\r
- $this->assertFalse(isset($GLOBALS['new']));\r
- }\r
-\r
- /**\r
- * Test writeConfig function with an empty array.\r
- *\r
- * @expectedException MissingFieldConfigException\r
- */\r
- public function testWriteConfigEmpty()\r
- {\r
- writeConfig(array(), true);\r
- }\r
-\r
- /**\r
- * Test writeConfig function with a missing mandatory field.\r
- *\r
- * @expectedException MissingFieldConfigException\r
- */\r
- public function testWriteConfigMissingField()\r
- {\r
- unset(self::$_configFields['login']);\r
- writeConfig(self::$_configFields, true);\r
- }\r
-\r
- /**\r
- * Test writeConfig function while being logged out, and there is no config file existing.\r
- */\r
- public function testWriteConfigLoggedOutNoFile()\r
- {\r
- writeConfig(self::$_configFields, false);\r
- }\r
-\r
- /**\r
- * Test writeConfig function while being logged out, and a config file already exists.\r
- *\r
- * @expectedException UnauthorizedConfigException\r
- */\r
- public function testWriteConfigLoggedOutWithFile()\r
- {\r
- file_put_contents(self::$_configFields['config']['CONFIG_FILE'], '');\r
- writeConfig(self::$_configFields, false);\r
- }\r
-\r
- /**\r
- * Test mergeDeprecatedConfig while being logged in:\r
- * 1. init a config file.\r
- * 2. init a options.php file with update value.\r
- * 3. merge.\r
- * 4. check updated value in config file.\r
- */\r
- public function testMergeDeprecatedConfig()\r
- {\r
- // init\r
- writeConfig(self::$_configFields, true);\r
- $configCopy = self::$_configFields;\r
- $invert = !$configCopy['privateLinkByDefault'];\r
- $configCopy['privateLinkByDefault'] = $invert;\r
-\r
- // Use writeConfig to create a options.php\r
- $configCopy['config']['CONFIG_FILE'] = 'tests/options.php';\r
- writeConfig($configCopy, true);\r
-\r
- $this->assertTrue(is_file($configCopy['config']['CONFIG_FILE']));\r
-\r
- // merge configs\r
- mergeDeprecatedConfig(self::$_configFields, true);\r
-\r
- // make sure updated field is changed\r
- include self::$_configFields['config']['CONFIG_FILE'];\r
- $this->assertEquals($invert, $GLOBALS['privateLinkByDefault']);\r
- $this->assertFalse(is_file($configCopy['config']['CONFIG_FILE']));\r
- }\r
-\r
- /**\r
- * Test mergeDeprecatedConfig while being logged in without options file.\r
- */\r
- public function testMergeDeprecatedConfigNoFile()\r
- {\r
- writeConfig(self::$_configFields, true);\r
- mergeDeprecatedConfig(self::$_configFields, true);\r
-\r
- include self::$_configFields['config']['CONFIG_FILE'];\r
- $this->assertEquals(self::$_configFields['login'], $GLOBALS['login']);\r
- }\r
-}
\ No newline at end of file
+<?php
+/**
+ * Config' tests
+ */
+
+require_once 'application/Config.php';
+
+/**
+ * Unitary tests for Shaarli config related functions
+ */
+class ConfigTest extends PHPUnit_Framework_TestCase
+{
+ // Configuration input set.
+ private static $configFields;
+
+ /**
+ * Executed before each test.
+ */
+ public function setUp()
+ {
+ self::$configFields = array(
+ 'login' => 'login',
+ 'hash' => 'hash',
+ 'salt' => 'salt',
+ 'timezone' => 'Europe/Paris',
+ 'title' => 'title',
+ 'titleLink' => 'titleLink',
+ 'redirector' => '',
+ 'disablesessionprotection' => false,
+ 'privateLinkByDefault' => false,
+ 'config' => array(
+ '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 save_plugin_config with valid data.
+ *
+ * @throws PluginConfigOrderException
+ */
+ public function testSavePluginConfigValid()
+ {
+ $data = array(
+ 'order_plugin1' => 2, // no plugin related
+ 'plugin2' => 0, // new - at the end
+ 'plugin3' => 0, // 2nd
+ 'order_plugin3' => 8,
+ 'plugin4' => 0, // 1st
+ 'order_plugin4' => 5,
+ );
+
+ $expected = array(
+ 'plugin3',
+ 'plugin4',
+ 'plugin2',
+ );
+
+ $out = save_plugin_config($data);
+ $this->assertEquals($expected, $out);
+ }
+
+ /**
+ * Test save_plugin_config with invalid data.
+ *
+ * @expectedException PluginConfigOrderException
+ */
+ public function testSavePluginConfigInvalid()
+ {
+ $data = array(
+ 'plugin2' => 0,
+ 'plugin3' => 0,
+ 'order_plugin3' => 0,
+ 'plugin4' => 0,
+ 'order_plugin4' => 0,
+ );
+
+ save_plugin_config($data);
+ }
+
+ /**
+ * Test save_plugin_config without data.
+ */
+ public function testSavePluginConfigEmpty()
+ {
+ $this->assertEquals(array(), save_plugin_config(array()));
+ }
+
+ /**
+ * Test validate_plugin_order with valid data.
+ */
+ public function testValidatePluginOrderValid()
+ {
+ $data = array(
+ 'order_plugin1' => 2,
+ 'plugin2' => 0,
+ 'plugin3' => 0,
+ 'order_plugin3' => 1,
+ 'plugin4' => 0,
+ 'order_plugin4' => 5,
+ );
+
+ $this->assertTrue(validate_plugin_order($data));
+ }
+
+ /**
+ * Test validate_plugin_order with invalid data.
+ */
+ public function testValidatePluginOrderInvalid()
+ {
+ $data = array(
+ 'order_plugin1' => 2,
+ 'order_plugin3' => 1,
+ 'order_plugin4' => 1,
+ );
+
+ $this->assertFalse(validate_plugin_order($data));
+ }
+
+ /**
+ * Test load_plugin_parameter_values.
+ */
+ public function testLoadPluginParameterValues()
+ {
+ $plugins = array(
+ 'plugin_name' => array(
+ 'parameters' => array(
+ 'param1' => true,
+ 'param2' => false,
+ 'param3' => '',
+ )
+ )
+ );
+
+ $parameters = array(
+ 'param1' => 'value1',
+ 'param2' => 'value2',
+ );
+
+ $result = load_plugin_parameter_values($plugins, $parameters);
+ $this->assertEquals('value1', $result['plugin_name']['parameters']['param1']);
+ $this->assertEquals('value2', $result['plugin_name']['parameters']['param2']);
+ $this->assertEquals('', $result['plugin_name']['parameters']['param3']);
+ }
+}