diff options
author | ArthurHoaro <arthur@hoa.ro> | 2016-05-29 12:32:14 +0200 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2016-06-11 09:30:56 +0200 |
commit | b74b96bfbd0b778ac50fd17f5e107c51435b1678 (patch) | |
tree | fd2debc510c2c51e9b75e2081a31a10e9c02ad06 /tests/config | |
parent | 684e662a58b02bde225e44d3677987b6fc3adf0b (diff) | |
download | Shaarli-b74b96bfbd0b778ac50fd17f5e107c51435b1678.tar.gz Shaarli-b74b96bfbd0b778ac50fd17f5e107c51435b1678.tar.zst Shaarli-b74b96bfbd0b778ac50fd17f5e107c51435b1678.zip |
Adds ConfigJson which handle the configuration in JSON format.
Also use the Updater to make the transition
Diffstat (limited to 'tests/config')
-rw-r--r-- | tests/config/ConfigJsonTest.php | 125 | ||||
-rw-r--r-- | tests/config/ConfigManagerTest.php | 146 |
2 files changed, 261 insertions, 10 deletions
diff --git a/tests/config/ConfigJsonTest.php b/tests/config/ConfigJsonTest.php new file mode 100644 index 00000000..5b3bce46 --- /dev/null +++ b/tests/config/ConfigJsonTest.php | |||
@@ -0,0 +1,125 @@ | |||
1 | <?php | ||
2 | |||
3 | require_once 'application/config/ConfigJson.php'; | ||
4 | |||
5 | /** | ||
6 | * Class ConfigJsonTest | ||
7 | */ | ||
8 | class ConfigJsonTest extends PHPUnit_Framework_TestCase | ||
9 | { | ||
10 | /** | ||
11 | * @var ConfigJson | ||
12 | */ | ||
13 | protected $configIO; | ||
14 | |||
15 | public function setUp() | ||
16 | { | ||
17 | $this->configIO = new ConfigJson(); | ||
18 | } | ||
19 | |||
20 | /** | ||
21 | * Read a simple existing config file. | ||
22 | */ | ||
23 | public function testRead() | ||
24 | { | ||
25 | $conf = $this->configIO->read('tests/utils/config/configJson.json.php'); | ||
26 | $this->assertEquals('root', $conf['login']); | ||
27 | $this->assertEquals('lala', $conf['redirector']); | ||
28 | $this->assertEquals('data/datastore.php', $conf['config']['DATASTORE']); | ||
29 | $this->assertEquals('1', $conf['plugins']['WALLABAG_VERSION']); | ||
30 | } | ||
31 | |||
32 | /** | ||
33 | * Read a non existent config file -> empty array. | ||
34 | */ | ||
35 | public function testReadNonExistent() | ||
36 | { | ||
37 | $this->assertEquals(array(), $this->configIO->read('nope')); | ||
38 | } | ||
39 | |||
40 | /** | ||
41 | * Read a non existent config file -> empty array. | ||
42 | * | ||
43 | * @expectedException Exception | ||
44 | * @expectedExceptionMessage An error occured while parsing JSON file: error code #4 | ||
45 | */ | ||
46 | public function testReadInvalidJson() | ||
47 | { | ||
48 | $this->configIO->read('tests/utils/config/configInvalid.json.php'); | ||
49 | } | ||
50 | |||
51 | /** | ||
52 | * Write a new config file. | ||
53 | */ | ||
54 | public function testWriteNew() | ||
55 | { | ||
56 | $dataFile = 'tests/utils/config/configWrite.json.php'; | ||
57 | $data = array( | ||
58 | 'login' => 'root', | ||
59 | 'redirector' => 'lala', | ||
60 | 'config' => array( | ||
61 | 'DATASTORE' => 'data/datastore.php', | ||
62 | ), | ||
63 | 'plugins' => array( | ||
64 | 'WALLABAG_VERSION' => '1', | ||
65 | ) | ||
66 | ); | ||
67 | $this->configIO->write($dataFile, $data); | ||
68 | // PHP 5.3 doesn't support json pretty print. | ||
69 | if (defined('JSON_PRETTY_PRINT')) { | ||
70 | $expected = '{ | ||
71 | "login": "root", | ||
72 | "redirector": "lala", | ||
73 | "config": { | ||
74 | "DATASTORE": "data\/datastore.php" | ||
75 | }, | ||
76 | "plugins": { | ||
77 | "WALLABAG_VERSION": "1" | ||
78 | } | ||
79 | }'; | ||
80 | } else { | ||
81 | $expected = '{"login":"root","redirector":"lala","config":{"DATASTORE":"data\/datastore.php"},"plugins":{"WALLABAG_VERSION":"1"}}'; | ||
82 | } | ||
83 | $expected = ConfigJson::$PHP_HEADER . $expected; | ||
84 | $this->assertEquals($expected, file_get_contents($dataFile)); | ||
85 | unlink($dataFile); | ||
86 | } | ||
87 | |||
88 | /** | ||
89 | * Overwrite an existing setting. | ||
90 | */ | ||
91 | public function testOverwrite() | ||
92 | { | ||
93 | $source = 'tests/utils/config/configJson.json.php'; | ||
94 | $dest = 'tests/utils/config/configOverwrite.json.php'; | ||
95 | copy($source, $dest); | ||
96 | $conf = $this->configIO->read($dest); | ||
97 | $conf['redirector'] = 'blabla'; | ||
98 | $this->configIO->write($dest, $conf); | ||
99 | $conf = $this->configIO->read($dest); | ||
100 | $this->assertEquals('blabla', $conf['redirector']); | ||
101 | unlink($dest); | ||
102 | } | ||
103 | |||
104 | /** | ||
105 | * Write to invalid path. | ||
106 | * | ||
107 | * @expectedException IOException | ||
108 | */ | ||
109 | public function testWriteInvalidArray() | ||
110 | { | ||
111 | $conf = array('conf' => 'value'); | ||
112 | @$this->configIO->write(array(), $conf); | ||
113 | } | ||
114 | |||
115 | /** | ||
116 | * Write to invalid path. | ||
117 | * | ||
118 | * @expectedException IOException | ||
119 | */ | ||
120 | public function testWriteInvalidBlank() | ||
121 | { | ||
122 | $conf = array('conf' => 'value'); | ||
123 | @$this->configIO->write('', $conf); | ||
124 | } | ||
125 | } | ||
diff --git a/tests/config/ConfigManagerTest.php b/tests/config/ConfigManagerTest.php index 1b6358f3..7390699c 100644 --- a/tests/config/ConfigManagerTest.php +++ b/tests/config/ConfigManagerTest.php | |||
@@ -6,7 +6,7 @@ | |||
6 | * Note: it only test the manager with ConfigJson, | 6 | * Note: it only test the manager with ConfigJson, |
7 | * ConfigPhp is only a workaround to handle the transition to JSON type. | 7 | * ConfigPhp is only a workaround to handle the transition to JSON type. |
8 | */ | 8 | */ |
9 | class ConfigManagerTest extends \PHPUnit_Framework_TestCase | 9 | class ConfigManagerTest extends PHPUnit_Framework_TestCase |
10 | { | 10 | { |
11 | /** | 11 | /** |
12 | * @var ConfigManager | 12 | * @var ConfigManager |
@@ -15,28 +15,49 @@ class ConfigManagerTest extends \PHPUnit_Framework_TestCase | |||
15 | 15 | ||
16 | public function setUp() | 16 | public function setUp() |
17 | { | 17 | { |
18 | ConfigManager::$CONFIG_FILE = 'tests/config/config'; | 18 | ConfigManager::$CONFIG_FILE = 'tests/utils/config/configJson'; |
19 | $this->conf = ConfigManager::getInstance(); | 19 | $this->conf = ConfigManager::reset(); |
20 | } | 20 | } |
21 | 21 | ||
22 | public function tearDown() | 22 | /** |
23 | * Simple config test: | ||
24 | * 1. Set settings. | ||
25 | * 2. Check settings value. | ||
26 | */ | ||
27 | public function testSetGet() | ||
23 | { | 28 | { |
24 | @unlink($this->conf->getConfigFile()); | 29 | $this->conf->set('paramInt', 42); |
30 | $this->conf->set('paramString', 'value1'); | ||
31 | $this->conf->set('paramBool', false); | ||
32 | $this->conf->set('paramArray', array('foo' => 'bar')); | ||
33 | $this->conf->set('paramNull', null); | ||
34 | |||
35 | $this->assertEquals(42, $this->conf->get('paramInt')); | ||
36 | $this->assertEquals('value1', $this->conf->get('paramString')); | ||
37 | $this->assertFalse($this->conf->get('paramBool')); | ||
38 | $this->assertEquals(array('foo' => 'bar'), $this->conf->get('paramArray')); | ||
39 | $this->assertEquals(null, $this->conf->get('paramNull')); | ||
25 | } | 40 | } |
26 | 41 | ||
42 | /** | ||
43 | * Set/write/get config test: | ||
44 | * 1. Set settings. | ||
45 | * 2. Write it to the config file. | ||
46 | * 3. Read the file. | ||
47 | * 4. Check settings value. | ||
48 | */ | ||
27 | public function testSetWriteGet() | 49 | public function testSetWriteGet() |
28 | { | 50 | { |
29 | // This won't work with ConfigPhp. | ||
30 | $this->markTestIncomplete(); | ||
31 | |||
32 | $this->conf->set('paramInt', 42); | 51 | $this->conf->set('paramInt', 42); |
33 | $this->conf->set('paramString', 'value1'); | 52 | $this->conf->set('paramString', 'value1'); |
34 | $this->conf->set('paramBool', false); | 53 | $this->conf->set('paramBool', false); |
35 | $this->conf->set('paramArray', array('foo' => 'bar')); | 54 | $this->conf->set('paramArray', array('foo' => 'bar')); |
36 | $this->conf->set('paramNull', null); | 55 | $this->conf->set('paramNull', null); |
37 | 56 | ||
57 | ConfigManager::$CONFIG_FILE = 'tests/utils/config/configTmp'; | ||
38 | $this->conf->write(true); | 58 | $this->conf->write(true); |
39 | $this->conf->reload(); | 59 | $this->conf->reload(); |
60 | unlink($this->conf->getConfigFile()); | ||
40 | 61 | ||
41 | $this->assertEquals(42, $this->conf->get('paramInt')); | 62 | $this->assertEquals(42, $this->conf->get('paramInt')); |
42 | $this->assertEquals('value1', $this->conf->get('paramString')); | 63 | $this->assertEquals('value1', $this->conf->get('paramString')); |
@@ -44,5 +65,110 @@ class ConfigManagerTest extends \PHPUnit_Framework_TestCase | |||
44 | $this->assertEquals(array('foo' => 'bar'), $this->conf->get('paramArray')); | 65 | $this->assertEquals(array('foo' => 'bar'), $this->conf->get('paramArray')); |
45 | $this->assertEquals(null, $this->conf->get('paramNull')); | 66 | $this->assertEquals(null, $this->conf->get('paramNull')); |
46 | } | 67 | } |
47 | 68 | ||
48 | } \ No newline at end of file | 69 | /** |
70 | * Test set/write/get with nested keys. | ||
71 | */ | ||
72 | public function testSetWriteGetNested() | ||
73 | { | ||
74 | $this->conf->set('foo.bar.key.stuff', 'testSetWriteGetNested'); | ||
75 | |||
76 | ConfigManager::$CONFIG_FILE = 'tests/utils/config/configTmp'; | ||
77 | $this->conf->write(true); | ||
78 | $this->conf->reload(); | ||
79 | unlink($this->conf->getConfigFile()); | ||
80 | |||
81 | $this->assertEquals('testSetWriteGetNested', $this->conf->get('foo.bar.key.stuff')); | ||
82 | } | ||
83 | |||
84 | /** | ||
85 | * Set with an empty key. | ||
86 | * | ||
87 | * @expectedException Exception | ||
88 | * @expectedExceptionMessageRegExp #^Invalid setting key parameter. String expected, got.*# | ||
89 | */ | ||
90 | public function testSetEmptyKey() | ||
91 | { | ||
92 | $this->conf->set('', 'stuff'); | ||
93 | } | ||
94 | |||
95 | /** | ||
96 | * Set with an array key. | ||
97 | * | ||
98 | * @expectedException Exception | ||
99 | * @expectedExceptionMessageRegExp #^Invalid setting key parameter. String expected, got.*# | ||
100 | */ | ||
101 | public function testSetArrayKey() | ||
102 | { | ||
103 | $this->conf->set(array('foo' => 'bar'), 'stuff'); | ||
104 | } | ||
105 | |||
106 | /** | ||
107 | * Try to write the config without mandatory parameter (e.g. 'login'). | ||
108 | * | ||
109 | * @expectedException MissingFieldConfigException | ||
110 | */ | ||
111 | public function testWriteMissingParameter() | ||
112 | { | ||
113 | ConfigManager::$CONFIG_FILE = 'tests/utils/config/configTmp'; | ||
114 | $this->assertFalse(file_exists($this->conf->getConfigFile())); | ||
115 | $this->conf->reload(); | ||
116 | |||
117 | $this->conf->write(true); | ||
118 | } | ||
119 | |||
120 | /** | ||
121 | * Try to get non existent config keys. | ||
122 | */ | ||
123 | public function testGetNonExistent() | ||
124 | { | ||
125 | $this->assertEquals('', $this->conf->get('nope.test')); | ||
126 | $this->assertEquals('default', $this->conf->get('nope.test', 'default')); | ||
127 | } | ||
128 | |||
129 | /** | ||
130 | * Test the 'exists' method with existent values. | ||
131 | */ | ||
132 | public function testExistsOk() | ||
133 | { | ||
134 | $this->assertTrue($this->conf->exists('login')); | ||
135 | $this->assertTrue($this->conf->exists('config.foo')); | ||
136 | } | ||
137 | |||
138 | /** | ||
139 | * Test the 'exists' method with non existent or invalid values. | ||
140 | */ | ||
141 | public function testExistsKo() | ||
142 | { | ||
143 | $this->assertFalse($this->conf->exists('nope')); | ||
144 | $this->assertFalse($this->conf->exists('nope.nope')); | ||
145 | $this->assertFalse($this->conf->exists('')); | ||
146 | $this->assertFalse($this->conf->exists(false)); | ||
147 | } | ||
148 | |||
149 | /** | ||
150 | * Reset the ConfigManager instance. | ||
151 | */ | ||
152 | public function testReset() | ||
153 | { | ||
154 | $conf = $this->conf; | ||
155 | $this->assertTrue($conf === ConfigManager::getInstance()); | ||
156 | $this->assertFalse($conf === $this->conf->reset()); | ||
157 | $this->assertFalse($conf === ConfigManager::getInstance()); | ||
158 | } | ||
159 | |||
160 | /** | ||
161 | * Reload the config from file. | ||
162 | */ | ||
163 | public function testReload() | ||
164 | { | ||
165 | ConfigManager::$CONFIG_FILE = 'tests/utils/config/configTmp'; | ||
166 | $newConf = ConfigJson::$PHP_HEADER . '{ "key": "value" }'; | ||
167 | file_put_contents($this->conf->getConfigFile(), $newConf); | ||
168 | $this->conf->reload(); | ||
169 | unlink($this->conf->getConfigFile()); | ||
170 | // Previous conf no longer exists, and new values have been loaded. | ||
171 | $this->assertFalse($this->conf->exists('login')); | ||
172 | $this->assertEquals('value', $this->conf->get('key')); | ||
173 | } | ||
174 | } | ||