]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - tests/config/ConfigJsonTest.php
Adds ConfigJson which handle the configuration in JSON format.
[github/shaarli/Shaarli.git] / tests / config / ConfigJsonTest.php
diff --git a/tests/config/ConfigJsonTest.php b/tests/config/ConfigJsonTest.php
new file mode 100644 (file)
index 0000000..5b3bce4
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+
+require_once 'application/config/ConfigJson.php';
+
+/**
+ * Class ConfigJsonTest
+ */
+class ConfigJsonTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ConfigJson
+     */
+    protected $configIO;
+
+    public function setUp()
+    {
+        $this->configIO = new ConfigJson();
+    }
+
+    /**
+     * Read a simple existing config file.
+     */
+    public function testRead()
+    {
+        $conf = $this->configIO->read('tests/utils/config/configJson.json.php');
+        $this->assertEquals('root', $conf['login']);
+        $this->assertEquals('lala', $conf['redirector']);
+        $this->assertEquals('data/datastore.php', $conf['config']['DATASTORE']);
+        $this->assertEquals('1', $conf['plugins']['WALLABAG_VERSION']);
+    }
+
+    /**
+     * Read a non existent config file -> empty array.
+     */
+    public function testReadNonExistent()
+    {
+        $this->assertEquals(array(), $this->configIO->read('nope'));
+    }
+
+    /**
+     * Read a non existent config file -> empty array.
+     *
+     * @expectedException Exception
+     * @expectedExceptionMessage An error occured while parsing JSON file: error code #4
+     */
+    public function testReadInvalidJson()
+    {
+        $this->configIO->read('tests/utils/config/configInvalid.json.php');
+    }
+
+    /**
+     * Write a new config file.
+     */
+    public function testWriteNew()
+    {
+        $dataFile = 'tests/utils/config/configWrite.json.php';
+        $data = array(
+            'login' => 'root',
+            'redirector' => 'lala',
+            'config' => array(
+                'DATASTORE' => 'data/datastore.php',
+            ),
+            'plugins' => array(
+                'WALLABAG_VERSION' => '1',
+            )
+        );
+        $this->configIO->write($dataFile, $data);
+        // PHP 5.3 doesn't support json pretty print.
+        if (defined('JSON_PRETTY_PRINT')) {
+            $expected = '{
+    "login": "root",
+    "redirector": "lala",
+    "config": {
+        "DATASTORE": "data\/datastore.php"
+    },
+    "plugins": {
+        "WALLABAG_VERSION": "1"
+    }
+}';
+        } else {
+            $expected = '{"login":"root","redirector":"lala","config":{"DATASTORE":"data\/datastore.php"},"plugins":{"WALLABAG_VERSION":"1"}}';
+        }
+        $expected = ConfigJson::$PHP_HEADER . $expected;
+        $this->assertEquals($expected, file_get_contents($dataFile));
+        unlink($dataFile);
+    }
+
+    /**
+     * Overwrite an existing setting.
+     */
+    public function testOverwrite()
+    {
+        $source = 'tests/utils/config/configJson.json.php';
+        $dest = 'tests/utils/config/configOverwrite.json.php';
+        copy($source, $dest);
+        $conf = $this->configIO->read($dest);
+        $conf['redirector'] = 'blabla';
+        $this->configIO->write($dest, $conf);
+        $conf = $this->configIO->read($dest);
+        $this->assertEquals('blabla', $conf['redirector']);
+        unlink($dest);
+    }
+
+    /**
+     * Write to invalid path.
+     *
+     * @expectedException IOException
+     */
+    public function testWriteInvalidArray()
+    {
+        $conf = array('conf' => 'value');
+        @$this->configIO->write(array(), $conf);
+    }
+
+    /**
+     * Write to invalid path.
+     *
+     * @expectedException IOException
+     */
+    public function testWriteInvalidBlank()
+    {
+        $conf = array('conf' => 'value');
+        @$this->configIO->write('', $conf);
+    }
+}