Skip to content

Commit b99262a

Browse files
committed
ISSUE-345: config manager
1 parent a862f61 commit b99262a

File tree

5 files changed

+133
-0
lines changed

5 files changed

+133
-0
lines changed

config/services/managers.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,7 @@ services:
6767
autoconfigure: true
6868
arguments:
6969
$defaultFromEmail: '%app.mailer_from%'
70+
71+
PhpList\Core\Domain\Configuration\Service\Manager\ConfigManager:
72+
autowire: true
73+
autoconfigure: true

config/services/parameters.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ parameters:
88
notify_start_default: '[email protected]'
99
notify_end_default: '[email protected]'
1010
always_add_google_tracking: true
11+
click_track: true

config/services/repositories.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,8 @@ services:
6060
parent: PhpList\Core\Domain\Common\Repository\AbstractRepository
6161
arguments:
6262
- PhpList\Core\Domain\Messaging\Model\TemplateImage
63+
64+
PhpList\Core\Domain\Configuration\Repository\ConfigRepository:
65+
parent: PhpList\Core\Domain\Common\Repository\AbstractRepository
66+
arguments:
67+
- PhpList\Core\Domain\Configuration\Model\Config
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\Core\Domain\Configuration\Service\Manager;
6+
7+
use PhpList\Core\Domain\Configuration\Model\Config;
8+
use PhpList\Core\Domain\Configuration\Repository\ConfigRepository;
9+
10+
class ConfigManager
11+
{
12+
private ConfigRepository $configRepository;
13+
14+
public function __construct(ConfigRepository $configRepository)
15+
{
16+
$this->configRepository = $configRepository;
17+
}
18+
19+
/**
20+
* Get a configuration item by its key
21+
*/
22+
public function getByItem(string $item): ?Config
23+
{
24+
return $this->configRepository->findOneBy(['item' => $item]);
25+
}
26+
27+
/**
28+
* Get all configuration items
29+
*
30+
* @return Config[]
31+
*/
32+
public function getAll(): array
33+
{
34+
return $this->configRepository->findAll();
35+
}
36+
37+
/**
38+
* Update a configuration item
39+
*/
40+
public function update(Config $config): void
41+
{
42+
$this->configRepository->save($config);
43+
}
44+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\Core\Tests\Unit\Domain\Configuration\Service\Manager;
6+
7+
use PhpList\Core\Domain\Configuration\Model\Config;
8+
use PhpList\Core\Domain\Configuration\Repository\ConfigRepository;
9+
use PhpList\Core\Domain\Configuration\Service\Manager\ConfigManager;
10+
use PHPUnit\Framework\TestCase;
11+
12+
class ConfigManagerTest extends TestCase
13+
{
14+
public function testGetByItemReturnsConfigFromRepository(): void
15+
{
16+
$configRepository = $this->createMock(ConfigRepository::class);
17+
$manager = new ConfigManager($configRepository);
18+
19+
$config = new Config();
20+
$config->setItem('test_item');
21+
$config->setValue('test_value');
22+
23+
$configRepository->expects($this->once())
24+
->method('findOneBy')
25+
->with(['item' => 'test_item'])
26+
->willReturn($config);
27+
28+
$result = $manager->getByItem('test_item');
29+
30+
$this->assertSame($config, $result);
31+
$this->assertSame('test_item', $result->getItem());
32+
$this->assertSame('test_value', $result->getValue());
33+
}
34+
35+
public function testGetAllReturnsAllConfigsFromRepository(): void
36+
{
37+
$configRepository = $this->createMock(ConfigRepository::class);
38+
$manager = new ConfigManager($configRepository);
39+
40+
$config1 = new Config();
41+
$config1->setItem('item1');
42+
$config1->setValue('value1');
43+
44+
$config2 = new Config();
45+
$config2->setItem('item2');
46+
$config2->setValue('value2');
47+
48+
$configs = [$config1, $config2];
49+
50+
$configRepository->expects($this->once())
51+
->method('findAll')
52+
->willReturn($configs);
53+
54+
$result = $manager->getAll();
55+
56+
$this->assertSame($configs, $result);
57+
$this->assertCount(2, $result);
58+
$this->assertSame('item1', $result[0]->getItem());
59+
$this->assertSame('value1', $result[0]->getValue());
60+
$this->assertSame('item2', $result[1]->getItem());
61+
$this->assertSame('value2', $result[1]->getValue());
62+
}
63+
64+
public function testUpdateSavesConfigToRepository(): void
65+
{
66+
$configRepository = $this->createMock(ConfigRepository::class);
67+
$manager = new ConfigManager($configRepository);
68+
69+
$config = new Config();
70+
$config->setItem('test_item');
71+
$config->setValue('test_value');
72+
73+
$configRepository->expects($this->once())
74+
->method('save')
75+
->with($config);
76+
77+
$manager->update($config);
78+
}
79+
}

0 commit comments

Comments
 (0)