feat: add CurrencyValidator

fix: add CurrencyValidator

CurrencyValidator

zarad
This commit is contained in:
2024-01-17 13:50:50 +01:00
parent 64a07b232a
commit 1437ce4558
13 changed files with 2331 additions and 2 deletions

View File

@@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
namespace App\Tests\Validator;
use App\Service\CurrencyListerInterface;
use App\Validator\Currency;
use App\Validator\CurrencyValidator;
class CurrencyValidatorTest extends ValidatorTestCase
{
public function testSuccess(): void {
$currencyValidator = $this->createCurrencyValidator();
$currencyValidator->initialize($this->createExecutionContext(false));
$currencyValidator->validate('USD', new Currency(['message' => 'foo']));
}
public function testFailure(): void {
$currencyValidator = $this->createCurrencyValidator();
$currencyValidator->initialize($this->createExecutionContext(true));
$currencyValidator->validate('EUR', new Currency(['message' => 'foo']));
}
private function createCurrencyValidator(): CurrencyValidator {
$mock = $this->createMock(CurrencyListerInterface::class);
$mock->expects($this->once())
->method('getCurrencies')
->will($this->returnValue(['USD', 'CZK']));
return new CurrencyValidator($mock);
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Tests\Validator;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
abstract class ValidatorTestCase extends TestCase
{
protected function createExecutionContext(bool $violation): ExecutionContextInterface {
$expected = $violation ? $this->once() : $this->never();
$context = $this->createMock(ExecutionContextInterface::class);
$context->expects($expected)
->method('buildViolation');
return $context;
}
}

15
tests/bootstrap.php Normal file
View File

@@ -0,0 +1,15 @@
<?php
use Symfony\Component\Dotenv\Dotenv;
require dirname(__DIR__).'/vendor/autoload.php';
if (file_exists(dirname(__DIR__).'/config/bootstrap.php')) {
require dirname(__DIR__).'/config/bootstrap.php';
} elseif (method_exists(Dotenv::class, 'bootEnv')) {
(new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
}
if ($_SERVER['APP_DEBUG']) {
umask(0000);
}