Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(test): allow to run symfony app in tests #90

Merged
merged 1 commit into from
Mar 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,12 @@
"symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
"symfony/framework-bundle": "*",
"symfony/http-kernel": "^5.4 || ^6.0 || ^7.0",
"symfony/property-access": "^5.4 || ^6.0 || ^7.0",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMHO, you should use 6.4 everywhere, 6.0..6.3 are EOL

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As long as we support 5.4 there i think any 6 version will work, let's be nice to people that didn't upgrade yet

Copy link
Member

@lyrixx lyrixx Mar 22, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's weird. There is no reason to upgrade from 5.4 to 6.0. the correct things to do is 5.4 to 6.4

Anyway, not a big deal

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

More than someone still in 6.1 that want to install this bundle

"symfony/serializer": "*",
"symfony/stopwatch": "^7.0",
"symfony/twig-bundle": "^5.4 || ^6.0 || ^7.0",
"symfony/uid": "^5.4 || ^6.0 || ^7.0",
"symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0",
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
},
"suggest": {
Expand Down
9 changes: 0 additions & 9 deletions src/AutoMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,6 @@ public function getMapper(string $source, string $target): MapperInterface
return $this->mapperRegistry[$className];
}

/**
* @template Source of object
* @template Target of object
*
* @param Source|array<mixed> $source
* @param class-string<Target>|'array'|array<mixed>|Target $target
*
* @return ($target is class-string|Target ? Target|null : array<mixed>|null)
*/
public function map(array|object $source, string|array|object $target, array $context = []): array|object|null
{
$sourceType = $targetType = null;
Expand Down
11 changes: 6 additions & 5 deletions src/AutoMapperInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@
interface AutoMapperInterface
{
/**
* Maps data from a source to a target.
* @template Source of object
* @template Target of object
*
* @param array|object $source Any data object, which may be an object or an array
* @param 'array'|class-string|array|object $target To which type of data, or data, the source should be mapped
* @param array $context Mapper context
* @param Source|array<mixed> $source
* @param class-string<Target>|'array'|array<mixed>|Target $target
* @param array<mixed> $context
*
* @return array|object|null The mapped object
* @return ($target is class-string|Target ? Target|null : array<mixed>|null)
*/
public function map(array|object $source, string|array|object $target, array $context = []): array|object|null;
}
7 changes: 7 additions & 0 deletions src/Normalizer/AutoMapperNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ public function normalize(mixed $object, string $format = null, array $context =
return $this->autoMapper->map($object, 'array', $this->createAutoMapperContext($context));
}

/**
* @template T of object
*
* @param class-string<T> $type
*
* @return T|null
*/
public function denormalize(mixed $data, string $type, string $format = null, array $context = []): mixed
{
return $this->autoMapper->map($data, $type, $this->createAutoMapperContext($context));
Expand Down
19 changes: 0 additions & 19 deletions tests/Bundle/Resources/App/AppKernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,13 @@

namespace AutoMapper\Tests\Bundle\Resources\App;

use AutoMapper\Symfony\Bundle\AutoMapperBundle;
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Kernel;

class AppKernel extends Kernel
{
use MicroKernelTrait;

public function registerBundles(): array
{
$bundles = [
new FrameworkBundle(),
new AutoMapperBundle(),
];

return $bundles;
}

protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void
{
$loader->load(__DIR__ . '/config.yml');
}

public function getProjectDir(): string
{
return __DIR__ . '/..';
Expand Down
42 changes: 42 additions & 0 deletions tests/Bundle/Resources/App/Controller/HomeController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Resources\App\Controller;

use AutoMapper\AutoMapperInterface;
use AutoMapper\Tests\Bundle\Resources\App\Entity\FooMapTo;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;

class HomeController extends AbstractController
{
public function __construct(
private AutoMapperInterface $autoMapper,
#[Autowire('@serializer.normalizer.object')]
private NormalizerInterface $serializer
) {
}

#[Route('/')]
public function __invoke(Request $request): Response
{
$output = [];
$data = new FooMapTo('value');

for ($i = 0; $i < 10000; ++$i) {
if ($request->query->has('serializer')) {
$output[] = $this->serializer->normalize($data, 'json');
} else {
$output[] = $this->autoMapper->map($data, 'array');
}
}

return new JsonResponse($output);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

class Address
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

class AddressDTO
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

class BaseUser
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

class Cat extends Pet
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

use AutoMapper\Attribute\MapToContext;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

class ClassWithPrivateProperty
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

final class DTOWithEnum
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

class Dog extends Pet
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

use AutoMapper\Attribute\MapTo;
use AutoMapper\Tests\Fixtures\MapTo\Bar;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

class NestedObject
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

use Money\Money;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

use Symfony\Component\Serializer\Annotation\DiscriminatorMap;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

enum SomeEnum: string
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

class User extends BaseUser
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace AutoMapper\Tests\Bundle\Fixtures;
namespace AutoMapper\Tests\Bundle\Resources\App\Entity;

class UserDTO
{
Expand Down
4 changes: 2 additions & 2 deletions tests/Bundle/Resources/App/Service/YearOfBirthTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
use AutoMapper\Metadata\SourcePropertyMetadata;
use AutoMapper\Metadata\TargetPropertyMetadata;
use AutoMapper\Metadata\TypesMatching;
use AutoMapper\Tests\Bundle\Fixtures\User;
use AutoMapper\Tests\Bundle\Fixtures\UserDTO;
use AutoMapper\Tests\Bundle\Resources\App\Entity\User;
use AutoMapper\Tests\Bundle\Resources\App\Entity\UserDTO;
use AutoMapper\Transformer\PropertyTransformer\PropertyTransformerInterface;
use AutoMapper\Transformer\PropertyTransformer\PropertyTransformerSupportInterface;

Expand Down
22 changes: 0 additions & 22 deletions tests/Bundle/Resources/App/config.yml

This file was deleted.

10 changes: 10 additions & 0 deletions tests/Bundle/Resources/config/bundles.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

declare(strict_types=1);

return [
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
Symfony\Bundle\TwigBundle\TwigBundle::class => ['dev' => true],
AutoMapper\Symfony\Bundle\AutoMapperBundle::class => ['all' => true],
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true],
];
7 changes: 7 additions & 0 deletions tests/Bundle/Resources/config/packages/automapper.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
automapper:
normalizer: false
name_converter: AutoMapper\Tests\Bundle\Resources\App\Service\IdNameConverter
map_private_properties: false
check_attributes: false
warmup:
- { source: 'AutoMapper\Tests\Bundle\Resources\App\Entity\NestedObject', target: 'array' }
3 changes: 3 additions & 0 deletions tests/Bundle/Resources/config/packages/dev/web_profiler.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
web_profiler:
toolbar: true
intercept_redirects: false
9 changes: 9 additions & 0 deletions tests/Bundle/Resources/config/packages/framework.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
framework:
secret: automapper
property_info: ~
test: ~
serializer:
enabled: true
profiler:
enabled: "%kernel.debug%"
only_exceptions: false
7 changes: 7 additions & 0 deletions tests/Bundle/Resources/config/routes/dev/profiler.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
web_profiler_wdt:
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
prefix: /_wdt

web_profiler_profiler:
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
prefix: /_profiler
5 changes: 5 additions & 0 deletions tests/Bundle/Resources/config/routes/routes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
controllers:
resource:
path: ../../App/Controller/
namespace: AutoMapper\Tests\Bundle\Resources\App\Controller
type: attribute
8 changes: 8 additions & 0 deletions tests/Bundle/Resources/config/services.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
services:
_defaults:
autoconfigure: true
autowire: true

AutoMapper\Tests\Bundle\Resources\App\:
resource: '../App/*'
exclude: '../App/{Entity,AppKernel.php}'
16 changes: 16 additions & 0 deletions tests/Bundle/Resources/public/dev.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

declare(strict_types=1);

use AutoMapper\Tests\Bundle\Resources\App\AppKernel;
use Symfony\Component\ErrorHandler\Debug;
use Symfony\Component\HttpFoundation\Request;

require __DIR__ . '/../../../../vendor/autoload.php';

Debug::enable();
$kernel = new AppKernel('dev', true);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
14 changes: 14 additions & 0 deletions tests/Bundle/Resources/public/index.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php

declare(strict_types=1);

use AutoMapper\Tests\Bundle\Resources\App\AppKernel;
use Symfony\Component\HttpFoundation\Request;

require __DIR__ . '/../../../../vendor/autoload.php';

$kernel = new AppKernel('prod', false);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
Loading
Loading