]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - tests/ConfigTest.php
All settings are now stored in config.php
[github/shaarli/Shaarli.git] / tests / ConfigTest.php
diff --git a/tests/ConfigTest.php b/tests/ConfigTest.php
new file mode 100755 (executable)
index 0000000..4279c57
--- /dev/null
@@ -0,0 +1,177 @@
+<?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