Skip to content

Commit

Permalink
Fix WebProfiler issues (#124)
Browse files Browse the repository at this point in the history
Fixes #123 

We changed some stuff about Metadata which was not impacted within the
Symfony WebProfiler
  • Loading branch information
Korbeil authored May 10, 2024
2 parents fa61df1 + 7a1dc27 commit fea3e06
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 9 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
2 changes: 1 addition & 1 deletion src/Symfony/Bundle/DataCollector/MetadataCollector.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public function collect(Request $request, Response $response, ?\Throwable $excep
if (class_exists($metadata->mapperMetadata->className)) {
$reflectionClass = new \ReflectionClass($metadata->mapperMetadata->className);

if (($fileName = $reflectionClass->getFileName()) !== false && ($content = file_get_contents($fileName)) !== false) {
if (($fileName = $reflectionClass->getFileName()) !== false && ($content = @file_get_contents($fileName)) !== false) {
$fileCode = $this->highlight($content);
}
}
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
80 changes: 79 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,76 @@ 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);
/** @var AutoMapperInterface $factory */
$autoMapper = static::getContainer()->get(AutoMapperInterface::class);

// update collector so we can recover data from it
$collector = new class($factory) extends MetadataCollector {
public function getData(): array
{
return $this->data;
}
};

// generate metadata for at least a mapper
$factory->getGeneratorMetadata(FooMapTo::class, 'array');

// compute profiler data
$collector->collect(new Request(), new Response());

// check output matches what is required within metadata.html.twig
$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 fea3e06

Please sign in to comment.