]> git.mxchange.org Git - friendica.git/blob - tests/src/Core/Config/TransactionalConfigTest.php
e2fdc633cb7b093a6b8d0334e5bb59320e6a9326
[friendica.git] / tests / src / Core / Config / TransactionalConfigTest.php
1 <?php
2
3 namespace Friendica\Test\src\Core\Config;
4
5 use Friendica\Core\Config\Capability\ISetConfigValuesTransactional;
6 use Friendica\Core\Config\Model\Config;
7 use Friendica\Core\Config\Model\TransactionalConfig;
8 use Friendica\Core\Config\Util\ConfigFileManager;
9 use Friendica\Core\Config\ValueObject\Cache;
10 use Friendica\Test\MockedTest;
11 use Friendica\Test\Util\VFSTrait;
12
13 class TransactionalConfigTest extends MockedTest
14 {
15         use VFSTrait;
16
17         /** @var ConfigFileManager */
18         protected $configFileManager;
19
20         protected function setUp(): void
21         {
22                 parent::setUp();
23
24                 $this->setUpVfsDir();
25
26                 $this->configFileManager = new ConfigFileManager($this->root->url(), $this->root->url() . '/config/', $this->root->url() . '/static/');
27         }
28
29         public function dataTests(): array
30         {
31                 return [
32                         'default' => [
33                                 'data' => include dirname(__FILE__, 4) . '/datasets/B.node.config.php',
34                         ]
35                 ];
36         }
37
38         public function testInstance()
39         {
40                 $config              = new Config($this->configFileManager, new Cache());
41                 $transactionalConfig = new TransactionalConfig($config);
42
43                 self::assertInstanceOf(ISetConfigValuesTransactional::class, $transactionalConfig);
44                 self::assertInstanceOf(TransactionalConfig::class, $transactionalConfig);
45         }
46
47         public function testTransactionalConfig()
48         {
49                 $config = new Config($this->configFileManager, new Cache());
50                 $config->set('config', 'key1', 'value1');
51                 $config->set('system', 'key2', 'value2');
52                 $config->set('system', 'keyDel', 'valueDel');
53                 $config->set('delete', 'keyDel', 'catDel');
54
55                 $transactionalConfig = new TransactionalConfig($config);
56                 self::assertEquals('value1', $transactionalConfig->get('config', 'key1'));
57                 self::assertEquals('value2', $transactionalConfig->get('system', 'key2'));
58                 self::assertEquals('valueDel', $transactionalConfig->get('system', 'keyDel'));
59                 self::assertEquals('catDel', $transactionalConfig->get('delete', 'keyDel'));
60                 // the config file knows it as well immediately
61                 $tempData = include $this->root->url() . '/config/' . ConfigFileManager::CONFIG_DATA_FILE;
62                 self::assertEquals('value1', $tempData['config']['key1'] ?? null);
63                 self::assertEquals('value2', $tempData['system']['key2'] ?? null);
64
65                 // new key-value
66                 $transactionalConfig->set('transaction', 'key3', 'value3');
67                 // overwrite key-value
68                 $transactionalConfig->set('config', 'key1', 'changedValue1');
69                 // delete key-value
70                 $transactionalConfig->delete('system', 'keyDel');
71                 // delete last key of category - so the category is gone
72                 $transactionalConfig->delete('delete', 'keyDel');
73
74                 // The main config still doesn't know about the change
75                 self::assertNull($config->get('transaction', 'key3'));
76                 self::assertEquals('value1', $config->get('config', 'key1'));
77                 self::assertEquals('valueDel', $config->get('system', 'keyDel'));
78                 self::assertEquals('catDel', $config->get('delete', 'keyDel'));
79                 // but the transaction config of course knows it
80                 self::assertEquals('value3', $transactionalConfig->get('transaction', 'key3'));
81                 self::assertEquals('changedValue1', $transactionalConfig->get('config', 'key1'));
82                 self::assertNull($transactionalConfig->get('system', 'keyDel'));
83                 self::assertNull($transactionalConfig->get('delete', 'keyDel'));
84                 // The config file still doesn't know it either
85                 $tempData = include $this->root->url() . '/config/' . ConfigFileManager::CONFIG_DATA_FILE;
86                 self::assertEquals('value1', $tempData['config']['key1'] ?? null);
87                 self::assertEquals('value2', $tempData['system']['key2'] ?? null);
88                 self::assertEquals('catDel', $tempData['delete']['keyDel'] ?? null);
89                 self::assertNull($tempData['transaction']['key3'] ?? null);
90
91                 // save it back!
92                 $transactionalConfig->save();
93
94                 // Now every config and file knows the change
95                 self::assertEquals('changedValue1', $config->get('config', 'key1'));
96                 self::assertEquals('value3', $config->get('transaction', 'key3'));
97                 self::assertNull($config->get('system', 'keyDel'));
98                 self::assertNull($config->get('delete', 'keyDel'));
99                 self::assertEquals('value3', $transactionalConfig->get('transaction', 'key3'));
100                 self::assertEquals('changedValue1', $transactionalConfig->get('config', 'key1'));
101                 self::assertNull($transactionalConfig->get('system', 'keyDel'));
102                 $tempData = include $this->root->url() . '/config/' . ConfigFileManager::CONFIG_DATA_FILE;
103                 self::assertEquals('changedValue1', $tempData['config']['key1'] ?? null);
104                 self::assertEquals('value2', $tempData['system']['key2'] ?? null);
105                 self::assertEquals('value3', $tempData['transaction']['key3'] ?? null);
106                 self::assertNull($tempData['system']['keyDel'] ?? null);
107                 self::assertNull($tempData['delete']['keyDel'] ?? null);
108                 // the whole category should be gone
109                 self::assertNull($tempData['delete'] ?? null);
110         }
111 }