Тестирование entity transformer

This commit is contained in:
Sipachev Igor 2021-08-12 19:05:50 +07:00
parent d99f533981
commit f0683ef40d
6 changed files with 21 additions and 7 deletions

View File

@ -2,6 +2,7 @@
namespace Rinsvent\RequestBundle\DependencyInjection;
use Rinsvent\RequestBundle\Service\Transformer\AbstractTransformer;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
@ -13,5 +14,7 @@ class RequestExtension extends Extension
{
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yaml');
// $container->findTaggedServiceIds(AbstractTransformer::class);
}
}
}

View File

@ -3,10 +3,12 @@
namespace Rinsvent\RequestBundle\EventListener;
use Rinsvent\Data2DTO\Data2DtoConverter;
use Rinsvent\Data2DTO\Resolver\TransformerResolverStorage;
use Rinsvent\RequestBundle\Annotation\RequestDTO;
use Rinsvent\RequestBundle\DTO\Error;
use Rinsvent\RequestBundle\DTO\ErrorCollection;
use Rinsvent\AttributeExtractor\MethodExtractor;
use Rinsvent\RequestBundle\Service\Transformer\ServiceResolver;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
@ -15,10 +17,15 @@ use Symfony\Component\Validator\Validation;
// todo базовая заготовка. Требуется рефакторинг
class RequestListener
{
public const REQUEST_DATA = 'request_data';
public function __construct(
private ServiceResolver $serviceResolver
) {}
public function onKernelRequest(RequestEvent $event)
{
$storage = TransformerResolverStorage::getInstance();
$storage->add(ServiceResolver::TYPE, $this->serviceResolver);
$request = $event->getRequest();
$controller = $request->get('_controller');
if (is_string($controller)) {

View File

@ -7,4 +7,4 @@ use Symfony\Component\HttpKernel\Bundle\Bundle;
class RequestBundle extends Bundle
{
}
}

View File

@ -5,10 +5,12 @@ services:
autowire: true
Rinsvent\RequestBundle\EventListener\RequestListener:
autowire: true
tags:
- { name: kernel.event_listener, event: kernel.request }
Rinsvent\RequestBundle\Service\Transformer\:
resource: '../../../src/Service/Transformer'
Rinsvent\RequestBundle\Service\Transformer\ServiceResolver:
bind:
$transformerLocator: !tagged_locator { tag: 'rinsvent.transformer', index_by: 'key', default_index_method: 'getLocatorKey' }

View File

@ -17,10 +17,10 @@ class EntityTransformer extends AbstractTransformer
*/
public function transform(&$data, Meta $meta): void
{
if (!is_int($data)) {
if (!is_string($data)) {
return;
}
$repository = $this->em->getRepository($meta->class);
$data = $repository->find((int)$data);
$data = $repository->find((string)$data);
}
}

View File

@ -9,6 +9,8 @@ use Symfony\Component\DependencyInjection\ServiceLocator;
class ServiceResolver implements TransformerResolverInterface
{
public const TYPE = 'service';
public function __construct(
private ServiceLocator $transformerLocator
) {}
@ -18,4 +20,4 @@ class ServiceResolver implements TransformerResolverInterface
$transformerClass = $meta::class . 'Transformer';
return $this->transformerLocator->get($transformerClass);
}
}
}