Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/EventListener/RequestListener.php
#	tests/unit/Listener/FillTest.php
This commit is contained in:
Rinsvent 2021-07-28 23:10:57 +07:00
commit 6886244256
4 changed files with 29 additions and 4 deletions

View File

@ -17,6 +17,8 @@ use Symfony\Component\Validator\Validation;
// todo базовая заготовка. Требуется рефакторинг
class RequestListener
{
public const REQUEST_DATA = 'request_data';
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
@ -39,7 +41,7 @@ class RequestListener
if ($errorCollection->hasErrors()) {
$event->setResponse(new JsonResponse(['errors' => $errorCollection->format()], Response::HTTP_BAD_REQUEST));
} else {
$request->attributes->set($requestDTOInstance::class, $requestDTOInstance);
$request->attributes->set(self::REQUEST_DATA, $requestDTOInstance);
}
}
}

View File

@ -19,7 +19,7 @@ use Symfony\Component\Routing\RouteCollection;
use Rinsvent\RequestBundle\EventListener\RequestListener;
class GenerateTest extends \Codeception\Test\Unit
class FillTest extends \Codeception\Test\Unit
{
/**
* @var \UnitTester
@ -35,14 +35,14 @@ class GenerateTest extends \Codeception\Test\Unit
}
// tests
public function testGenerateEnum()
public function testSuccessFillRequestData()
{
$request = Request::create('/hello/igor', 'GET', [
'surname' => 'Surname'
]);
$response = $this->send($request);
$this->assertEquals('Surname', $request->get(HelloRequest::class)->surname);
$this->assertEquals('Surname', $request->get(RequestListener::REQUEST_DATA)->surname);
}
private function send(Request $request): Response

View File

@ -0,0 +1,14 @@
<?php
namespace Rinsvent\RequestBundle\Tests\unit\Listener\fixtures\FillTest;
use Symfony\Component\Validator\Constraints as Assert;
class BuyRequest
{
#[Assert\NotBlank]
public string $surname;
public int $age;
#[Assert\Email]
public string $email;
}

View File

@ -15,4 +15,13 @@ class Controller
sprintf("Hello %s", $request->get('name'))
);
}
#[RequestDTO(className: HelloRequest::class, jsonPath: '$.user')]
#[RequestDTO(className: BuyRequest::class, jsonPath: '$.guest')]
public function hello2(Request $request)
{
return new Response(
sprintf("Hello %s", $request->get('name'))
);
}
}