diff --git a/api/src/Entity/Bookmark.php b/api/src/Entity/Bookmark.php index 9da8057ab..2ca6ceea8 100644 --- a/api/src/Entity/Bookmark.php +++ b/api/src/Entity/Bookmark.php @@ -13,7 +13,6 @@ use ApiPlatform\Metadata\GetCollection; use ApiPlatform\Metadata\Post; use App\Repository\BookmarkRepository; -use App\Serializer\IriTransformerNormalizer; use App\State\Processor\BookmarkPersistProcessor; use App\Validator\UniqueUserBook; use Doctrine\ORM\Mapping as ORM; @@ -45,9 +44,6 @@ normalizationContext: [ AbstractNormalizer::GROUPS => ['Bookmark:read'], AbstractObjectNormalizer::SKIP_NULL_VALUES => true, - IriTransformerNormalizer::CONTEXT_KEY => [ - 'book' => '/books/{id}{._format}', - ], ], denormalizationContext: [ AbstractNormalizer::GROUPS => ['Bookmark:write'], diff --git a/api/src/Entity/Review.php b/api/src/Entity/Review.php index 86dce57fc..c1120bdcb 100644 --- a/api/src/Entity/Review.php +++ b/api/src/Entity/Review.php @@ -18,7 +18,6 @@ use ApiPlatform\State\CreateProvider; use App\Repository\ReviewRepository; use App\Security\Voter\OidcTokenPermissionVoter; -use App\Serializer\IriTransformerNormalizer; use App\State\Processor\ReviewPersistProcessor; use App\State\Processor\ReviewRemoveProcessor; use App\Validator\UniqueUserBook; @@ -65,10 +64,6 @@ ), ], normalizationContext: [ - IriTransformerNormalizer::CONTEXT_KEY => [ - 'book' => '/admin/books/{id}{._format}', - 'user' => '/admin/users/{id}{._format}', - ], AbstractObjectNormalizer::SKIP_NULL_VALUES => true, AbstractNormalizer::GROUPS => ['Review:read', 'Review:read:admin'], ], @@ -134,10 +129,6 @@ ), ], normalizationContext: [ - IriTransformerNormalizer::CONTEXT_KEY => [ - 'book' => '/books/{id}{._format}', - 'user' => '/users/{id}{._format}', - ], AbstractObjectNormalizer::SKIP_NULL_VALUES => true, AbstractNormalizer::GROUPS => ['Review:read'], ], diff --git a/api/src/Serializer/IriTransformerNormalizer.php b/api/src/Serializer/IriTransformerNormalizer.php deleted file mode 100644 index a67c66c9a..000000000 --- a/api/src/Serializer/IriTransformerNormalizer.php +++ /dev/null @@ -1,73 +0,0 @@ -normalizer->normalize($object, $format, $context + [self::class => true]); - - $value = $context[self::CONTEXT_KEY]; - if (!\is_array($value)) { - $value = [$value]; - } - - foreach ($value as $property => $uriTemplate) { - if (!isset($data[$property]) || !\is_string($data[$property]) && !isset($data[$property]['@id'])) { - continue; - } - - $iri = $this->iriConverter->getIriFromResource( - $object->{$property}, - UrlGeneratorInterface::ABS_PATH, - $this->operationMetadataFactory->create($uriTemplate) - ); - - if (\is_string($data[$property])) { - $data[$property] = $iri; - } elseif (isset($data[$property]['@id'])) { - $data[$property]['@id'] = $iri; - } - } - - return $data; - } - - public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool - { - return \is_object($data) - && !is_iterable($data) - && isset($context[self::CONTEXT_KEY]) - && ItemNormalizer::FORMAT === $format - && !isset($context[self::class]); - } - - public function getSupportedTypes(?string $format): array - { - return [ - '*' => false, - ]; - } -} diff --git a/api/tests/Serializer/IriTransformerNormalizerTest.php b/api/tests/Serializer/IriTransformerNormalizerTest.php deleted file mode 100644 index 1daacc8b4..000000000 --- a/api/tests/Serializer/IriTransformerNormalizerTest.php +++ /dev/null @@ -1,151 +0,0 @@ -normalizerMock = $this->createMock(NormalizerInterface::class); - $this->iriConverterMock = $this->createMock(IriConverterInterface::class); - $this->operationMetadataFactoryMock = $this->createMock(OperationMetadataFactoryInterface::class); - $this->operationMock = $this->createMock(Operation::class); - $this->objectMock = new \stdClass(); - $this->objectMock->book = $this->createMock(\stdClass::class); - $this->objectMock->user = $this->createMock(\stdClass::class); - - $this->normalizer = new IriTransformerNormalizer($this->iriConverterMock, $this->operationMetadataFactoryMock); - $this->normalizer->setNormalizer($this->normalizerMock); - } - - #[Test] - public function itDoesNotSupportInvalidData(): void - { - $this->assertFalse($this->normalizer->supportsNormalization(null)); - $this->assertFalse($this->normalizer->supportsNormalization([])); - $this->assertFalse($this->normalizer->supportsNormalization('string')); - $this->assertFalse($this->normalizer->supportsNormalization(12345)); - $this->assertFalse($this->normalizer->supportsNormalization(new ArrayCollection([$this->objectMock]))); - } - - #[Test] - public function itDoesNotSupportInvalidContext(): void - { - $this->assertFalse($this->normalizer->supportsNormalization($this->objectMock)); - $this->assertFalse($this->normalizer->supportsNormalization($this->objectMock, null, [IriTransformerNormalizer::class => true])); - } - - #[Test] - public function itDoesNotSupportInvalidFormat(): void - { - $this->assertFalse($this->normalizer->supportsNormalization($this->objectMock, null, [ - IriTransformerNormalizer::CONTEXT_KEY => [ - 'book' => '/books/{id}{._format}', - ], - ])); - $this->assertFalse($this->normalizer->supportsNormalization($this->objectMock, 'json', [ - IriTransformerNormalizer::CONTEXT_KEY => [ - 'book' => '/books/{id}{._format}', - ], - ])); - $this->assertFalse($this->normalizer->supportsNormalization($this->objectMock, 'xml', [ - IriTransformerNormalizer::CONTEXT_KEY => [ - 'book' => '/books/{id}{._format}', - ], - ])); - } - - #[Test] - public function itSupportsValidObjectClassAndContext(): void - { - $this->assertTrue($this->normalizer->supportsNormalization($this->objectMock, 'jsonld', [ - IriTransformerNormalizer::CONTEXT_KEY => [ - 'book' => '/books/{id}{._format}', - ], - ])); - } - - #[Test] - public function itNormalizesData(): void - { - $this->normalizerMock - ->expects($this->once()) - ->method('normalize') - ->with($this->objectMock, 'jsonld', [ - IriTransformerNormalizer::class => true, - IriTransformerNormalizer::CONTEXT_KEY => [ - 'ignore' => 'lorem ipsum', - 'book' => '/books/{id}{._format}', - 'user' => '/users/{id}{._format}', - ], - ]) - ->willReturn([ - 'book' => '/admin/books/a528046c-7ba1-4acc-bff2-b5390ab17d41', - 'user' => [ - '@id' => '/admin/users/b960cf9e-8f1a-4690-8923-623c1d049d41', - ], - ]) - ; - $this->operationMetadataFactoryMock - ->expects($this->exactly(2)) - ->method('create') -// ->withConsecutive( -// ['/books/{id}{._format}'], -// ['/users/{id}{._format}'], -// ) - ->willReturnOnConsecutiveCalls( - $this->operationMock, - $this->operationMock, - ) - ; - $this->iriConverterMock - ->expects($this->exactly(2)) - ->method('getIriFromResource') -// ->withConsecutive( -// [$this->objectMock->book, UrlGeneratorInterface::ABS_PATH, $this->operationMock], -// [$this->objectMock->book, UrlGeneratorInterface::ABS_PATH, $this->operationMock], -// ) - ->willReturnOnConsecutiveCalls( - '/books/a528046c-7ba1-4acc-bff2-b5390ab17d41', - '/users/b960cf9e-8f1a-4690-8923-623c1d049d41', - ) - ; - - $this->assertEquals([ - 'book' => '/books/a528046c-7ba1-4acc-bff2-b5390ab17d41', - 'user' => [ - '@id' => '/users/b960cf9e-8f1a-4690-8923-623c1d049d41', - ], - ], $this->normalizer->normalize($this->objectMock, 'jsonld', [ - IriTransformerNormalizer::CONTEXT_KEY => [ - 'ignore' => 'lorem ipsum', - 'book' => '/books/{id}{._format}', - 'user' => '/users/{id}{._format}', - ], - ])); - } -}