diff --git a/src/Core/Config/AbstractDbaConfigAdapter.php b/src/Core/Config/AbstractDbaConfigAdapter.php index c2e8bda5d..bae75122a 100644 --- a/src/Core/Config/AbstractDbaConfigAdapter.php +++ b/src/Core/Config/AbstractDbaConfigAdapter.php @@ -2,8 +2,6 @@ namespace Friendica\Core\Config; -use Friendica\Database\DBA; - abstract class AbstractDbaConfigAdapter { /** @var bool */ diff --git a/src/Core/Config/ConfigCache.php b/src/Core/Config/ConfigCache.php index 0c9e1f486..b86ec3860 100644 --- a/src/Core/Config/ConfigCache.php +++ b/src/Core/Config/ConfigCache.php @@ -18,7 +18,7 @@ class ConfigCache implements IConfigCache, IPConfigCache */ public function __construct(array $config = []) { - $this->config = $config; + $this->loadConfigArray($config); } /** @@ -110,6 +110,9 @@ class ConfigCache implements IConfigCache, IPConfigCache } else { if (isset($this->config[$cat][$key])) { unset($this->config[$cat][$key]); + if (count($this->config[$cat]) == 0) { + unset($this->config[$cat]); + } } } } @@ -160,6 +163,12 @@ class ConfigCache implements IConfigCache, IPConfigCache { if (isset($this->config[$uid][$cat][$key])) { unset($this->config[$uid][$cat][$key]); + if (count($this->config[$uid][$cat]) == 0) { + unset($this->config[$uid][$cat]); + if (count($this->config[$uid]) == 0) { + unset($this->config[$uid]); + } + } } } diff --git a/tests/src/Core/Config/ConfigCacheTest.php b/tests/src/Core/Config/ConfigCacheTest.php new file mode 100644 index 000000000..25ea6030f --- /dev/null +++ b/tests/src/Core/Config/ConfigCacheTest.php @@ -0,0 +1,175 @@ + [ + 'data' => [ + 'system' => [ + 'test' => 'it', + 'boolTrue' => true, + 'boolFalse' => false, + 'int' => 235, + 'dec' => 2.456, + 'array' => ['1', 2, '3', true, false], + ], + 'config' => [ + 'a' => 'value', + ], + ] + ] + ]; + } + + private function assertConfigValues($data, ConfigCache $configCache, $uid = null) + { + foreach ($data as $cat => $values) { + foreach ($values as $key => $value) { + if (isset($uid)) { + $this->assertEquals($data[$cat][$key], $configCache->getP($uid, $cat, $key)); + } else { + $this->assertEquals($data[$cat][$key], $configCache->get($cat, $key)); + } + } + } + } + + /** + * Test the loadConfigArray() method without override + * @dataProvider dataTests + */ + public function testLoadConfigArray($data) + { + $configCache = new ConfigCache(); + $configCache->loadConfigArray($data); + + $this->assertConfigValues($data, $configCache); + } + + /** + * Test the loadConfigArray() method with overrides + * @dataProvider dataTests + */ + public function testLoadConfigArrayOverride($data) + { + $override = [ + 'system' => [ + 'test' => 'not', + 'boolTrue' => false, + ] + ]; + + $configCache = new ConfigCache(); + $configCache->loadConfigArray($data); + $configCache->loadConfigArray($override); + + $this->assertConfigValues($data, $configCache); + + // override the value + $configCache->loadConfigArray($override, true); + + $this->assertEquals($override['system']['test'], $configCache->get('system', 'test')); + $this->assertEquals($override['system']['boolTrue'], $configCache->get('system', 'boolTrue')); + } + + /** + * Test the getAll() method + * @dataProvider dataTests + */ + public function testGetAll($data) + { + $configCache = new ConfigCache(); + $configCache->loadConfigArray($data); + + $all = $configCache->getAll(); + + $this->assertContains($data['system'], $all); + + // config values are stored directly in the array base + $this->assertEquals($data['config']['a'], $all['a']); + } + + /** + * Test the set() and get() method + * @dataProvider dataTests + */ + public function testSetGet($data) + { + $configCache = new ConfigCache(); + + foreach ($data as $cat => $values) { + foreach ($values as $key => $value) { + $configCache->set($cat, $key, $value); + } + } + + $this->assertConfigValues($data, $configCache); + } + + /** + * Test the delete() method + * @dataProvider dataTests + */ + public function testDelete($data) + { + $configCache = new ConfigCache($data); + + foreach ($data as $cat => $values) { + foreach ($values as $key => $value) { + $configCache->delete($cat, $key); + } + } + + $this->assertEmpty($configCache->getAll()); + } + + /** + * Test the setP() and getP() methods + * @dataProvider dataTests + */ + public function testSetGetP($data) + { + $configCache = new ConfigCache(); + $uid = 345; + + foreach ($data as $cat => $values) { + foreach ($values as $key => $value) { + $configCache->setP($uid, $cat, $key, $value); + } + } + + $this->assertConfigValues($data, $configCache, $uid); + } + + + /** + * Test the deleteP() method + * @dataProvider dataTests + */ + public function testDeleteP($data) + { + $configCache = new ConfigCache(); + $uid = 345; + + foreach ($data as $cat => $values) { + foreach ($values as $key => $value) { + $configCache->setP($uid, $cat, $key, $value); + } + } + + foreach ($data as $cat => $values) { + foreach ($values as $key => $value) { + $configCache->deleteP($uid, $cat, $key); + } + } + + $this->assertEmpty($configCache->getAll()); + } +}