Skip to content

Commit

Permalink
fix(symfony): 404 wrongly normalized
Browse files Browse the repository at this point in the history
fixes #5935
  • Loading branch information
soyuka committed Oct 28, 2023
1 parent ad2cbe0 commit 5b5f713
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 14 deletions.
4 changes: 3 additions & 1 deletion src/Hydra/Serializer/ErrorNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@ public function supportsNormalization(mixed $data, string $format = null, array
return false;
}

return self::FORMAT === $format && ($data instanceof \Exception || $data instanceof FlattenException);
$decoration = $this->itemNormalizer ? $this->itemNormalizer->supportsNormalization($data, $format, $context) : true;

Check warning on line 79 in src/Hydra/Serializer/ErrorNormalizer.php

View check run for this annotation

Codecov / codecov/patch

src/Hydra/Serializer/ErrorNormalizer.php#L79

Added line #L79 was not covered by tests

return self::FORMAT === $format && ($data instanceof \Exception || $data instanceof FlattenException) && $decoration;

Check warning on line 81 in src/Hydra/Serializer/ErrorNormalizer.php

View check run for this annotation

Codecov / codecov/patch

src/Hydra/Serializer/ErrorNormalizer.php#L81

Added line #L81 was not covered by tests
}

public function getSupportedTypes($format): array
Expand Down
4 changes: 3 additions & 1 deletion src/JsonApi/Serializer/ErrorNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,9 @@ public function supportsNormalization(mixed $data, string $format = null, array
return false;
}

return self::FORMAT === $format && ($data instanceof \Exception || $data instanceof FlattenException);
$decoration = $this->itemNormalizer ? $this->itemNormalizer->supportsNormalization($data, $format, $context) : true;

return self::FORMAT === $format && ($data instanceof \Exception || $data instanceof FlattenException) && $decoration;
}

public function getSupportedTypes($format): array
Expand Down
4 changes: 3 additions & 1 deletion src/Problem/Serializer/ErrorNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,9 @@ public function supportsNormalization(mixed $data, string $format = null, array
return false;
}

return (self::FORMAT === $format || 'json' === $format) && ($data instanceof \Exception || $data instanceof FlattenException);
$decoration = $this->itemNormalizer ? $this->itemNormalizer->supportsNormalization($data, $format, $context) : true;

return (self::FORMAT === $format || 'json' === $format) && ($data instanceof \Exception || $data instanceof FlattenException) && $decoration;
}

public function getSupportedTypes($format): array
Expand Down
28 changes: 17 additions & 11 deletions tests/Symfony/Bundle/Test/ApiTestCaseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,20 @@ public function testGetMercureMessages(): void
);
}

private function recreateSchema(array $options = []): void
{
self::bootKernel($options);

/** @var EntityManagerInterface $manager */
$manager = static::getContainer()->get('doctrine')->getManager();
/** @var ClassMetadata[] $classes */
$classes = $manager->getMetadataFactory()->getAllMetadata();
$schemaTool = new SchemaTool($manager);

@$schemaTool->dropSchema($classes);
@$schemaTool->createSchema($classes);
}

/**
* @group legacy
*/
Expand All @@ -289,17 +303,9 @@ public function testExceptionNormalizer(): void
$this->assertEquals($data['hello'], 'world');
}

private function recreateSchema(array $options = []): void
public function testMissingMethod(): void
{
self::bootKernel($options);

/** @var EntityManagerInterface $manager */
$manager = static::getContainer()->get('doctrine')->getManager();
/** @var ClassMetadata[] $classes */
$classes = $manager->getMetadataFactory()->getAllMetadata();
$schemaTool = new SchemaTool($manager);

@$schemaTool->dropSchema($classes);
@$schemaTool->createSchema($classes);
$response = self::createClient([], ['headers' => ['accept' => 'application/json']])->request('DELETE', '/something/that/does/not/exist/ever');
$this->assertResponseStatusCodeSame(404);
}
}

0 comments on commit 5b5f713

Please sign in to comment.