Skip to content

Commit

Permalink
Fix Symfony's WebProfiler issues
Browse files Browse the repository at this point in the history
  • Loading branch information
Korbeil committed May 10, 2024
1 parent fa61df1 commit 217c6b4
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 8 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Fixes
- [GH#124](https://github.com/jolicode/automapper/pull/124) Fix Symfony's WebProfiler issues

## [9.0.0] - 2024-05-06
### Added
- [GH#114](https://github.com/jolicode/automapper/pull/114) Introducing Mapper Attribute
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
{% for metadata in collector.metadatas %}
<div class="sf-toolbar-info-piece">
<b>AutoMapper</b>
<span>{{ metadata.mapperMetadata.source }} to {{ metadata.mapperMetadata.target }}</span>
<span>{{ metadata.source }} to {{ metadata.target }}</span>
</div>
{% endfor %}
{% endset %}
Expand Down Expand Up @@ -121,10 +121,10 @@
<tr>
<td rowspan="2" style="vertical-align: middle">
{% if property.source.accessor %}
<span class="badge">{{ property.source.name }}</span> ->
<span class="badge">{{ property.target.name }}</span>
<span class="badge">{{ property.source.property }}</span> ->
<span class="badge">{{ property.target.property }}</span>
{% else %}
<span class="badge">{{ property.target.name }}</span>
<span class="badge">{{ property.target.property }}</span>
{% endif %}
</td>
<td>{{ property.if | default('') }}</td>
Expand Down Expand Up @@ -160,10 +160,10 @@
<tr>
<td>
{% if property.source.accessor %}
<span class="badge">{{ property.source.name }}</span> ->
<span class="badge">{{ property.target.name }}</span>
<span class="badge">{{ property.source.property }}</span> ->
<span class="badge">{{ property.target.property }}</span>
{% else %}
<span class="badge">{{ property.target.name }}</span>
<span class="badge">{{ property.target.property }}</span>
{% endif %}
</td>
<td>{{ property.reason }}</td>
Expand Down
77 changes: 76 additions & 1 deletion tests/Bundle/ServiceInstantiationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@

use AutoMapper\AutoMapperInterface;
use AutoMapper\MapperContext;
use AutoMapper\Metadata\MetadataFactory;
use AutoMapper\Metadata\SourcePropertyMetadata;
use AutoMapper\Metadata\TargetPropertyMetadata;
use AutoMapper\Symfony\Bundle\CacheWarmup\CacheWarmer;
use AutoMapper\Symfony\Bundle\DataCollector\MetadataCollector;
use AutoMapper\Tests\Bundle\Resources\App\Entity\AddressDTO;
use AutoMapper\Tests\Bundle\Resources\App\Entity\ClassWithMapToContextAttribute;
use AutoMapper\Tests\Bundle\Resources\App\Entity\ClassWithPrivateProperty;
Expand All @@ -17,6 +21,8 @@
use AutoMapper\Tests\Bundle\Resources\App\Entity\UserDTO;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ServiceInstantiationTest extends WebTestCase
{
Expand Down Expand Up @@ -151,7 +157,7 @@ public function testMapToContextAttribute(): void
);
}

public function testMapTo()
public function testMapTo(): void
{
static::bootKernel();
$container = static::$kernel->getContainer();
Expand All @@ -175,4 +181,73 @@ public function testMapTo()
$this->assertSame('transformed', $bar['transformFromExpressionLanguage']);
$this->assertSame('foo', $bar['transformWithExpressionFunction']);
}

/**
* All the tests in this test are made to validate that
* src/Symfony/Bundle/Resources/views/DataCollector/metadata.html.twig will work.
*/
public function testCollector(): void
{
static::bootKernel();
/** @var MetadataFactory $factory */
$factory = static::getContainer()->get(MetadataFactory::class);
$collector = new class($factory) extends MetadataCollector {
public function getData(): array
{
return $this->data;
}
};

/** @var AutoMapperInterface $factory */
$autoMapper = static::getContainer()->get(AutoMapperInterface::class);
$foo = new FooMapTo('foo');
$autoMapper->map($foo, 'array');

$factory->getGeneratorMetadata(FooMapTo::class, 'array');
$collector->collect(new Request(), new Response());

$this->assertCount(1, $data = $collector->getData());
foreach ($data as $metadata) {
$this->assertArrayHasKey('source', $metadata);
$this->assertIsString($metadata['source']);
$this->assertArrayHasKey('target', $metadata);
$this->assertIsString($metadata['target']);
$this->assertArrayHasKey('usedProperties', $metadata);
$this->assertIsArray($metadata['usedProperties']);
$this->assertArrayHasKey('notUsedProperties', $metadata);
$this->assertIsArray($metadata['notUsedProperties']);
$this->assertArrayHasKey('registered', $metadata);
$this->assertIsBool($metadata['registered']);
$this->assertArrayHasKey('checkAttributes', $metadata);
$this->assertIsBool($metadata['checkAttributes']);
$this->assertArrayHasKey('useConstructor', $metadata);
$this->assertIsBool($metadata['useConstructor']);
$this->assertArrayHasKey('provider', $metadata);
$this->assertArrayHasKey('fileCode', $metadata);
$this->assertArrayHasKey('className', $metadata);

foreach ($metadata['usedProperties'] as $property) {
$this->assertArrayHasKey('source', $property);
$this->assertInstanceOf(SourcePropertyMetadata::class, $property['source']);
$this->assertArrayHasKey('target', $property);
$this->assertInstanceOf(TargetPropertyMetadata::class, $property['target']);

$this->assertArrayHasKey('if', $property);
$this->assertArrayHasKey('transformer', $property);
$this->assertArrayHasKey('disableGroupsCheck', $property);
$this->assertArrayHasKey('groups', $property);
$this->assertArrayHasKey('maxDepth', $property);
$this->assertArrayHasKey('code', $property);
$this->assertIsString($property['code']);
}

foreach ($metadata['notUsedProperties'] as $property) {
$this->assertArrayHasKey('source', $property);
$this->assertInstanceOf(SourcePropertyMetadata::class, $property['source']);
$this->assertArrayHasKey('target', $property);
$this->assertInstanceOf(TargetPropertyMetadata::class, $property['target']);
$this->assertArrayHasKey('reason', $property);
}
}
}
}

0 comments on commit 217c6b4

Please sign in to comment.