%PDF- %PDF-
| Direktori : /www/varak.net/dmarc.varak.net/tests/classes/Settings/ |
| Current File : /www/varak.net/dmarc.varak.net/tests/classes/Settings/SettingTest.php |
<?php
namespace Liuch\DmarcSrg;
use Liuch\DmarcSrg\Users\AdminUser;
use Liuch\DmarcSrg\Settings\SettingsList;
use Liuch\DmarcSrg\Settings\SettingString;
use Liuch\DmarcSrg\Settings\SettingInteger;
use Liuch\DmarcSrg\Exception\SoftException;
class SettingTest extends \PHPUnit\Framework\TestCase
{
public function testCreatingWithCorrectName(): void
{
$this->assertInstanceOf(
SettingString::class,
new SettingString('version', false, $this->getCoreWithDatabaseNever())
);
}
public function testCreatingWithIncorrectName(): void
{
$this->expectException(SoftException::class);
$this->expectExceptionMessage('Unknown setting name: some-setting');
new SettingString('some-setting', false, $this->getCoreWithDatabaseNever());
}
public function testCreatingWithIncorrectDataType(): void
{
$this->expectException(SoftException::class);
$this->expectExceptionMessage('Wrong setting data');
new SettingString(1, false, $this->getCoreWithDatabaseNever());
}
public function testCreatingWithIncorrectNameType(): void
{
$this->expectException(SoftException::class);
$this->expectExceptionMessage('Wrong setting data');
new SettingString([ 'name' => 1], false, $this->getCoreWithDatabaseNever());
}
public function testSetValue(): void
{
$ss = new SettingString('version', false, $this->getCoreWithDatabaseNever());
$ss->setValue('someString');
$this->assertSame('someString', $ss->value());
}
public function testToArray(): void
{
$ss = new SettingString(
[ 'name' => 'version', 'value' => 'someString' ],
false,
$this->getCoreWithDatabaseNever()
);
$this->assertEquals([
'type' => 'string',
'name' => 'version',
'value' => 'someString',
'default' => SettingsList::$schema['version']['default']
], $ss->toArray());
}
public function testSave(): void
{
$user = new AdminUser($this->getCore());
$ss = new SettingInteger(
[ 'name' => 'status.emails-for-last-n-days', 'value' => 231, 'user' => $user ],
false,
$this->getCoreWithDatabaseMapperOnce('save', 'status.emails-for-last-n-days', '231', 0)
);
$ss->save();
}
private function getCore(): object
{
return $this->getMockBuilder(Core::class)
->disableOriginalConstructor()
->onlyMethods([ 'database' ])
->getMock();
}
private function getCoreWithDatabaseNever(): object
{
$core = $this->getCore();
$core->expects($this->never())->method('database');
return $core;
}
private function getCoreWithDatabaseMapperOnce(string $method, string $param1, string $param2, int $param3): object
{
$mapper = $this->getMockBuilder(Database\SettingMapperInterface::class)
->onlyMethods([ 'value', 'list', 'save' ])
->getMock();
$mapper->expects($this->once())
->method($method)
->with($this->equalTo($param1), $this->equalTo($param2), $this->equalTo($param3));
$db = $this->getMockBuilder(Database\DatabaseController::class)
->disableOriginalConstructor()
->onlyMethods([ 'getMapper' ])
->getMock();
$db->expects($this->once())
->method('getMapper')
->willReturn($mapper);
$core = $this->getCore();
$core->expects($this->once())->method('database')->willReturn($db);
return $core;
}
}