mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-31 22:10:45 +02:00
[task/config-class] Implemented a config class to replace the global array.
There is a phpbb_config class which simply holds an array and does not persist any data. It implements ArrayAccess, Countable and IteratorAggregate to allow regular use of configuration as if it was still an array. The phpbb_config_db class depends on an instance of the dbal and a cache driver. It obtains the configuration data from cache and database as necessary and persists data to the database. The functions set_config and set_config_count remain for backward compatability but they only call methods on the new config class now instead of directly manipulating the database and cache. PHPBB3-9988
This commit is contained in:
112
tests/config/config_test.php
Normal file
112
tests/config/config_test.php
Normal file
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2010 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_config_test extends phpbb_test_case
|
||||
{
|
||||
public function test_offset_exists()
|
||||
{
|
||||
$config = new phpbb_config(array('foo' => 'bar'));
|
||||
|
||||
$this->assertTrue(isset($config['foo']));
|
||||
$this->assertFalse(isset($config['foobar']));
|
||||
}
|
||||
|
||||
public function test_offset_get()
|
||||
{
|
||||
$config = new phpbb_config(array('foo' => 'bar'));
|
||||
$this->assertEquals('bar', $config['foo']);
|
||||
}
|
||||
|
||||
public function test_offset_get_missing()
|
||||
{
|
||||
$config = new phpbb_config(array());
|
||||
$this->assertEquals('', $config['foo']);
|
||||
}
|
||||
|
||||
public function test_offset_set()
|
||||
{
|
||||
$config = new phpbb_config(array());
|
||||
$config['foo'] = 'x';
|
||||
$this->assertEquals('x', $config['foo']);
|
||||
}
|
||||
|
||||
public function test_offset_unset_fails()
|
||||
{
|
||||
$this->setExpectedTriggerError(E_USER_ERROR);
|
||||
$config = new phpbb_config(array('foo' => 'x'));
|
||||
unset($config['foo']);
|
||||
}
|
||||
|
||||
public function test_count()
|
||||
{
|
||||
$config = new phpbb_config(array('foo' => 'bar'));
|
||||
$this->assertEquals(1, count($config));
|
||||
}
|
||||
|
||||
public function test_iterate()
|
||||
{
|
||||
$vars = array('foo' => '23', 'bar' => '42');
|
||||
$config = new phpbb_config($vars);
|
||||
|
||||
$count = 0;
|
||||
foreach ($config as $key => $value)
|
||||
{
|
||||
$this->assertTrue(isset($vars[$key]));
|
||||
$this->assertEquals($vars[$key], $value);
|
||||
|
||||
$count++;
|
||||
}
|
||||
|
||||
$this->assertEquals(count($vars), $count);
|
||||
}
|
||||
|
||||
public function test_set_overwrite()
|
||||
{
|
||||
$config = new phpbb_config(array('foo' => 'x'));
|
||||
$config->set('foo', 'bar');
|
||||
$this->assertEquals('bar', $config['foo']);
|
||||
}
|
||||
|
||||
public function test_set_new()
|
||||
{
|
||||
$config = new phpbb_config(array());
|
||||
$config->set('foo', 'bar');
|
||||
$this->assertEquals('bar', $config['foo']);
|
||||
}
|
||||
|
||||
public function test_set_atomic_overwrite()
|
||||
{
|
||||
$config = new phpbb_config(array('foo' => 'bar'));
|
||||
$this->assertTrue($config->set_atomic('foo', 'bar', '23'));
|
||||
$this->assertEquals('23', $config['foo']);
|
||||
}
|
||||
|
||||
public function test_set_atomic_new()
|
||||
{
|
||||
$config = new phpbb_config(array());
|
||||
$this->assertTrue($config->set_atomic('foo', false, '23'));
|
||||
$this->assertEquals('23', $config['foo']);
|
||||
}
|
||||
|
||||
public function test_set_atomic_failure()
|
||||
{
|
||||
$config = new phpbb_config(array('foo' => 'bar'));
|
||||
$this->assertFalse($config->set_atomic('foo', 'wrong', '23'));
|
||||
$this->assertEquals('bar', $config['foo']);
|
||||
}
|
||||
|
||||
public function test_increment()
|
||||
{
|
||||
$config = new phpbb_config(array('foo' => '23'));
|
||||
$config->increment('foo', 3);
|
||||
$this->assertEquals(26, $config['foo']);
|
||||
$config->increment('foo', 1);
|
||||
$this->assertEquals(27, $config['foo']);
|
||||
}
|
||||
}
|
117
tests/config/db_test.php
Normal file
117
tests/config/db_test.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2010 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
*
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/../mock/cache.php';
|
||||
|
||||
class phpbb_config_db_test extends phpbb_database_test_case
|
||||
{
|
||||
private $cache;
|
||||
private $db;
|
||||
private $config;
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(__DIR__ . '/fixtures/config.xml');
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->cache = new phpbb_mock_cache;
|
||||
$this->db = $this->new_dbal();
|
||||
$this->config = new phpbb_config_db($this->cache, $this->db, 'phpbb_config');
|
||||
}
|
||||
|
||||
public function test_load_config()
|
||||
{
|
||||
$this->assertEquals('23', $this->config['foo']);
|
||||
$this->assertEquals('42', $this->config['bar']);
|
||||
}
|
||||
|
||||
public function test_offset_set()
|
||||
{
|
||||
$this->config['foo'] = 'x'; // temporary set
|
||||
$this->assertEquals('x', $this->config['foo']);
|
||||
|
||||
$config2 = new phpbb_config_db($this->cache, $this->db, 'phpbb_config');
|
||||
$this->assertEquals('23', $config2['foo']);
|
||||
}
|
||||
|
||||
public function test_set_overwrite()
|
||||
{
|
||||
$this->config->set('foo', '17');
|
||||
$this->assertEquals('17', $this->config['foo']);
|
||||
|
||||
// re-read config and populate cache
|
||||
$config2 = new phpbb_config_db($this->cache, $this->db, 'phpbb_config');
|
||||
$this->cache->checkVar($this, 'config', array('foo' => '17'));
|
||||
}
|
||||
|
||||
public function test_set_overwrite_uncached()
|
||||
{
|
||||
$this->config->set('bar', '17', false);
|
||||
|
||||
// re-read config and populate cache
|
||||
$config2 = new phpbb_config_db($this->cache, $this->db, 'phpbb_config');
|
||||
$this->cache->checkVar($this, 'config', array('foo' => '23'));
|
||||
}
|
||||
|
||||
public function test_set_new()
|
||||
{
|
||||
$this->config->set('foobar', '5');
|
||||
$this->assertEquals('5', $this->config['foobar']);
|
||||
|
||||
// re-read config and populate cache
|
||||
$config2 = new phpbb_config_db($this->cache, $this->db, 'phpbb_config');
|
||||
$this->cache->checkVar($this, 'config', array('foo' => '23', 'foobar' => '5'));
|
||||
}
|
||||
|
||||
public function test_set_new_uncached()
|
||||
{
|
||||
$this->config->set('foobar', '5', false);
|
||||
$this->assertEquals('5', $this->config['foobar']);
|
||||
|
||||
// re-read config and populate cache
|
||||
$config2 = new phpbb_config_db($this->cache, $this->db, 'phpbb_config');
|
||||
$this->cache->checkVar($this, 'config', array('foo' => '23'));
|
||||
}
|
||||
|
||||
public function test_set_atomic_overwrite()
|
||||
{
|
||||
$this->assertTrue($this->config->set_atomic('foo', '23', '17'));
|
||||
$this->assertEquals('17', $this->config['foo']);
|
||||
}
|
||||
|
||||
public function test_set_atomic_new()
|
||||
{
|
||||
$this->assertTrue($this->config->set_atomic('foobar', false, '5'));
|
||||
$this->assertEquals('5', $this->config['foobar']);
|
||||
}
|
||||
|
||||
public function test_set_atomic_failure()
|
||||
{
|
||||
$this->assertFalse($this->config->set_atomic('foo', 'wrong', '17'));
|
||||
$this->assertEquals('23', $this->config['foo']);
|
||||
}
|
||||
|
||||
public function test_increment()
|
||||
{
|
||||
$this->config->increment('foo', 3);
|
||||
$this->assertEquals(26, $this->config['foo']);
|
||||
$this->config->increment('foo', 1);
|
||||
$this->assertEquals(27, $this->config['foo']);
|
||||
}
|
||||
|
||||
public function test_increment_new()
|
||||
{
|
||||
$this->config->increment('foobar', 3);
|
||||
$this->assertEquals(3, $this->config['foobar']);;
|
||||
}
|
||||
}
|
18
tests/config/fixtures/config.xml
Normal file
18
tests/config/fixtures/config.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_config">
|
||||
<column>config_name</column>
|
||||
<column>config_value</column>
|
||||
<column>is_dynamic</column>
|
||||
<row>
|
||||
<value>foo</value>
|
||||
<value>23</value>
|
||||
<value>0</value>
|
||||
</row>
|
||||
<row>
|
||||
<value>bar</value>
|
||||
<value>42</value>
|
||||
<value>1</value>
|
||||
</row>
|
||||
</table>
|
||||
</dataset>
|
Reference in New Issue
Block a user