--- /dev/null
+<?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);
+ }
+}