Skip to content

Commit ad18b55

Browse files
committed
fix php 7 lowest
1 parent 7ca9b9b commit ad18b55

File tree

5 files changed

+81
-48
lines changed

5 files changed

+81
-48
lines changed

src/Core/Bridge/Doctrine/EventListener/PublishMercureUpdatesListener.php

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ final class PublishMercureUpdatesListener
7373
* @param array<string, string[]|string> $formats
7474
* @param HubRegistry|callable $hubRegistry
7575
*/
76-
public function __construct(ResourceClassResolverInterface $resourceClassResolver, IriConverterInterface $iriConverter, $resourceMetadataFactory, SerializerInterface $serializer, array $formats, MessageBusInterface $messageBus = null, $hubRegistry = null, ?GraphQlSubscriptionManagerInterface $graphQlSubscriptionManager = null, ?GraphQlMercureSubscriptionIriGeneratorInterface $graphQlMercureSubscriptionIriGenerator = null, ExpressionLanguage $expressionLanguage = null)
76+
public function __construct(ResourceClassResolverInterface $resourceClassResolver, IriConverterInterface $iriConverter, ResourceMetadataCollectionFactoryInterface $resourceMetadataFactory, SerializerInterface $serializer, array $formats, MessageBusInterface $messageBus = null, $hubRegistry = null, ?GraphQlSubscriptionManagerInterface $graphQlSubscriptionManager = null, ?GraphQlMercureSubscriptionIriGeneratorInterface $graphQlMercureSubscriptionIriGenerator = null, ExpressionLanguage $expressionLanguage = null)
7777
{
7878
if (null === $messageBus && null === $hubRegistry) {
7979
throw new InvalidArgumentException('A message bus or a hub registry must be provided.');
@@ -173,14 +173,10 @@ private function storeObjectToPublish($object, string $property): void
173173
return;
174174
}
175175

176-
if ($this->resourceMetadataFactory instanceof ResourceMetadataCollectionFactoryInterface) {
177-
try {
178-
$options = $this->resourceMetadataFactory->create($resourceClass)->getOperation()->getMercure();
179-
} catch (OperationNotFoundException $e) {
180-
return;
181-
}
182-
} else {
183-
$options = $this->resourceMetadataFactory->create($resourceClass)->getAttribute('mercure', false);
176+
try {
177+
$options = $this->resourceMetadataFactory->create($resourceClass)->getOperation()->getMercure() ?? false;
178+
} catch (OperationNotFoundException $e) {
179+
return;
184180
}
185181

186182
if (\is_string($options)) {
@@ -273,12 +269,7 @@ private function publishUpdate($object, array $options, string $type): void
273269
$data = json_encode(['@id' => $object->id]);
274270
} else {
275271
$resourceClass = $this->getObjectClass($object);
276-
if ($this->resourceMetadataFactory instanceof ResourceMetadataCollectionFactoryInterface) {
277-
$context = $options['normalization_context'] ?? $this->resourceMetadataFactory->create($resourceClass)->getOperation()->getNormalizationContext();
278-
} else {
279-
// TODO: remove in 3.0
280-
$context = $options['normalization_context'] ?? $this->resourceMetadataFactory->create($resourceClass)->getAttribute('normalization_context', []);
281-
}
272+
$context = $options['normalization_context'] ?? $this->resourceMetadataFactory->create($resourceClass)->getOperation()->getNormalizationContext();
282273

283274
$iri = $options['topics'] ?? $this->iriConverter->getIriFromItem($object, null, UrlGeneratorInterface::ABS_URL);
284275
$data = $options['data'] ?? $this->serializer->serialize($object, key($this->formats), $context);

src/Core/Bridge/Symfony/Bundle/Resources/config/doctrine_orm_mercure_publisher.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<service id="api_platform.doctrine.orm.listener.mercure.publish" class="ApiPlatform\Core\Bridge\Doctrine\EventListener\PublishMercureUpdatesListener">
1212
<argument type="service" id="api_platform.resource_class_resolver" />
1313
<argument type="service" id="api_platform.iri_converter" />
14-
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
14+
<argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />
1515
<argument type="service" id="api_platform.serializer" />
1616
<argument>%api_platform.formats%</argument>
1717
<argument type="service" id="messenger.default_bus" on-invalid="ignore" />

tests/Core/Bridge/Doctrine/EventListener/PublishMercureUpdatesListenerTest.php

Lines changed: 69 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,19 @@
1414
namespace ApiPlatform\Core\Tests\Bridge\Doctrine\EventListener;
1515

1616
use ApiPlatform\Api\IriConverterInterface;
17+
use ApiPlatform\Api\UrlGeneratorInterface as ApiUrlGeneratorInterface;
1718
use ApiPlatform\Core\Api\ResourceClassResolverInterface;
1819
use ApiPlatform\Core\Api\UrlGeneratorInterface;
1920
use ApiPlatform\Core\Bridge\Doctrine\EventListener\PublishMercureUpdatesListener;
2021
use ApiPlatform\Core\Exception\InvalidArgumentException;
21-
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
2222
use ApiPlatform\Core\Metadata\Resource\ResourceMetadata;
2323
use ApiPlatform\Core\Tests\ProphecyTrait;
2424
use ApiPlatform\GraphQl\Subscription\MercureSubscriptionIriGeneratorInterface as GraphQlMercureSubscriptionIriGeneratorInterface;
2525
use ApiPlatform\GraphQl\Subscription\SubscriptionManagerInterface as GraphQlSubscriptionManagerInterface;
26+
use ApiPlatform\Metadata\ApiResource;
27+
use ApiPlatform\Metadata\Get;
28+
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
29+
use ApiPlatform\Metadata\Resource\ResourceMetadataCollection;
2630
use ApiPlatform\Tests\Fixtures\NotAResource;
2731
use ApiPlatform\Tests\Fixtures\TestBundle\Entity\Dummy;
2832
use ApiPlatform\Tests\Fixtures\TestBundle\Entity\DummyCar;
@@ -81,17 +85,24 @@ public function testLegacyPublishUpdate(): void
8185
$resourceClassResolverProphecy->isResourceClass(DummyFriend::class)->willReturn(true);
8286

8387
$iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
84-
$iriConverterProphecy->getIriFromItem($toInsert, null, UrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummies/1')->shouldBeCalled();
85-
$iriConverterProphecy->getIriFromItem($toUpdate, null, UrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummies/2')->shouldBeCalled();
86-
$iriConverterProphecy->getIriFromItem($toDelete, null, UrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummies/3')->shouldBeCalled();
87-
$iriConverterProphecy->getIriFromItem($toDelete, null, UrlGeneratorInterface::ABS_URL)->willReturn('/dummies/3')->shouldBeCalled();
88-
$iriConverterProphecy->getIriFromItem($toDeleteExpressionLanguage, null, UrlGeneratorInterface::ABS_URL)->willReturn('/dummy_friends/4')->shouldBeCalled();
89-
$iriConverterProphecy->getIriFromItem($toDeleteExpressionLanguage, null, UrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummy_friends/4')->shouldBeCalled();
88+
$iriConverterProphecy->getIriFromItem($toInsert, null, ApiUrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummies/1')->shouldBeCalled();
89+
$iriConverterProphecy->getIriFromItem($toUpdate, null, ApiUrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummies/2')->shouldBeCalled();
90+
$iriConverterProphecy->getIriFromItem($toDelete, null, ApiUrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummies/3')->shouldBeCalled();
91+
$iriConverterProphecy->getIriFromItem($toDelete)->willReturn('/dummies/3')->shouldBeCalled();
92+
$iriConverterProphecy->getIriFromItem($toDeleteExpressionLanguage)->willReturn('/dummy_friends/4')->shouldBeCalled();
93+
$iriConverterProphecy->getIriFromItem($toDeleteExpressionLanguage, null, ApiUrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummy_friends/4')->shouldBeCalled();
94+
95+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
9096

91-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
92-
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => true, 'normalization_context' => ['groups' => ['foo', 'bar']]]));
93-
$resourceMetadataFactoryProphecy->create(DummyCar::class)->willReturn(new ResourceMetadata());
94-
$resourceMetadataFactoryProphecy->create(DummyFriend::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => "['foo', 'bar']"]));
97+
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadataCollection(Dummy::class, [(new ApiResource())->withOperations([
98+
'get' => (new Get())->withMercure(true)->withNormalizationContext(['groups' => ['foo', 'bar']]),
99+
])]));
100+
$resourceMetadataFactoryProphecy->create(DummyCar::class)->willReturn(new ResourceMetadataCollection(DummyCar::class, [(new ApiResource())->withOperations([
101+
'get' => new Get(),
102+
])]));
103+
$resourceMetadataFactoryProphecy->create(DummyFriend::class)->willReturn(new ResourceMetadataCollection(DummyFriend::class, [(new ApiResource())->withOperations([
104+
'get' => (new Get())->withMercure("['foo', 'bar']"),
105+
])]));
95106

96107
$serializerProphecy = $this->prophesize(SerializerInterface::class);
97108
$serializerProphecy->serialize($toInsert, 'jsonld', ['groups' => ['foo', 'bar']])->willReturn('1');
@@ -185,12 +196,22 @@ public function testPublishUpdateWithLegacySignature(): void
185196
$iriConverterProphecy->getIriFromItem($toDeleteMercureOptions, null, UrlGeneratorInterface::REL_PATH)->willReturn('./dummy_offers/5')->shouldBeCalled();
186197
$iriConverterProphecy->getIriFromItem($toDeleteMercureOptions, null, UrlGeneratorInterface::NET_PATH)->willReturn('//example.com/dummy_offers/5')->shouldBeCalled();
187198

188-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
189-
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => true, 'normalization_context' => ['groups' => ['foo', 'bar']]]));
190-
$resourceMetadataFactoryProphecy->create(DummyCar::class)->willReturn(new ResourceMetadata());
191-
$resourceMetadataFactoryProphecy->create(DummyFriend::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['private' => true, 'retry' => 10]]));
192-
$resourceMetadataFactoryProphecy->create(DummyOffer::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['topics' => ['http://example.com/custom_topics/1', '@=iri(object)', '@=iri(object, '.UrlGeneratorInterface::ABS_URL.')', '@=iri(object, '.UrlGeneratorInterface::ABS_PATH.')', '@=iri(object, '.UrlGeneratorInterface::REL_PATH.')', '@=iri(object, '.UrlGeneratorInterface::NET_PATH.')', '@=iri(object) ~ "/?topic=" ~ escape(iri(object))', '@=iri(object) ~ "/?topic=" ~ escape(iri(object, '.UrlGeneratorInterface::ABS_PATH.'))'], 'data' => 'mercure_custom_data', 'normalization_context' => ['groups' => ['baz']]]]));
193-
$resourceMetadataFactoryProphecy->create(DummyMercure::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['topics' => ['/dummies/1', '/users/3'], 'normalization_context' => ['groups' => ['baz']]]]));
199+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
200+
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadataCollection(Dummy::class, [(new ApiResource())->withOperations([
201+
'get' => (new Get())->withMercure(true)->withNormalizationContext(['groups' => ['foo', 'bar']]),
202+
])]));
203+
$resourceMetadataFactoryProphecy->create(DummyCar::class)->willReturn(new ResourceMetadataCollection(DummyCar::class, [(new ApiResource())->withOperations([
204+
'get' => new Get(),
205+
])]));
206+
$resourceMetadataFactoryProphecy->create(DummyFriend::class)->willReturn(new ResourceMetadataCollection(DummyFriend::class, [(new ApiResource())->withOperations([
207+
'get' => (new Get())->withMercure(['private' => true, 'retry' => 10]),
208+
])]));
209+
$resourceMetadataFactoryProphecy->create(DummyOffer::class)->willReturn(new ResourceMetadataCollection(DummyOffer::class, [(new ApiResource())->withOperations([
210+
'get' => (new Get())->withMercure(['topics' => ['http://example.com/custom_topics/1', '@=iri(object)', '@=iri(object, '.UrlGeneratorInterface::ABS_URL.')', '@=iri(object, '.UrlGeneratorInterface::ABS_PATH.')', '@=iri(object, '.UrlGeneratorInterface::REL_PATH.')', '@=iri(object, '.UrlGeneratorInterface::NET_PATH.')', '@=iri(object) ~ "/?topic=" ~ escape(iri(object))', '@=iri(object) ~ "/?topic=" ~ escape(iri(object, '.UrlGeneratorInterface::ABS_PATH.'))'], 'data' => 'mercure_custom_data'])->withNormalizationContext(['groups' => ['baz']]),
211+
])]));
212+
$resourceMetadataFactoryProphecy->create(DummyMercure::class)->willReturn(new ResourceMetadataCollection(DummyMercure::class, [(new ApiResource())->withOperations([
213+
'get' => (new Get())->withMercure(['topics' => ['/dummies/1', '/users/3']])->withNormalizationContext(['groups' => ['baz']]),
214+
])]));
194215

195216
$serializerProphecy = $this->prophesize(SerializerInterface::class);
196217
$serializerProphecy->serialize($toInsert, 'jsonld', ['groups' => ['foo', 'bar']])->willReturn('1');
@@ -286,12 +307,25 @@ public function testPublishUpdate(): void
286307
$iriConverterProphecy->getIriFromItem($toDeleteMercureOptions)->willReturn('/dummy_offers/5')->shouldBeCalled();
287308
$iriConverterProphecy->getIriFromItem($toDeleteMercureOptions, null, UrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummy_offers/5')->shouldBeCalled();
288309

289-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
290-
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['hub' => 'managed', 'enable_async_update' => false], 'normalization_context' => ['groups' => ['foo', 'bar']]]));
291-
$resourceMetadataFactoryProphecy->create(DummyCar::class)->willReturn(new ResourceMetadata());
292-
$resourceMetadataFactoryProphecy->create(DummyFriend::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['private' => true, 'retry' => 10, 'hub' => 'managed', 'enable_async_update' => false]]));
293-
$resourceMetadataFactoryProphecy->create(DummyOffer::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['topics' => 'http://example.com/custom_topics/1', 'data' => 'mercure_custom_data', 'normalization_context' => ['groups' => ['baz']], 'hub' => 'managed', 'enable_async_update' => false]]));
294-
$resourceMetadataFactoryProphecy->create(DummyMercure::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['topics' => ['/dummies/1', '/users/3'], 'normalization_context' => ['groups' => ['baz']], 'hub' => 'managed', 'enable_async_update' => false]]));
310+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
311+
312+
$resourceMetadataFactoryProphecy->create(DummyMercure::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => []]));
313+
314+
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadataCollection(Dummy::class, [(new ApiResource())->withOperations([
315+
'get' => (new Get())->withMercure(['hub' => 'managed', 'enable_async_update' => false])->withNormalizationContext(['groups' => ['foo', 'bar']]),
316+
])]));
317+
$resourceMetadataFactoryProphecy->create(DummyCar::class)->willReturn(new ResourceMetadataCollection(DummyCar::class, [(new ApiResource())->withOperations([
318+
'get' => new Get(),
319+
])]));
320+
$resourceMetadataFactoryProphecy->create(DummyFriend::class)->willReturn(new ResourceMetadataCollection(DummyFriend::class, [(new ApiResource())->withOperations([
321+
'get' => (new Get())->withMercure(['private' => true, 'retry' => 10, 'hub' => 'managed', 'enable_async_update' => false]),
322+
])]));
323+
$resourceMetadataFactoryProphecy->create(DummyOffer::class)->willReturn(new ResourceMetadataCollection(DummyOffer::class, [(new ApiResource())->withOperations([
324+
'get' => (new Get())->withMercure(['topics' => 'http://example.com/custom_topics/1', 'data' => 'mercure_custom_data', 'hub' => 'managed', 'enable_async_update' => false])->withNormalizationContext(['groups' => ['baz']]),
325+
])]));
326+
$resourceMetadataFactoryProphecy->create(DummyMercure::class)->willReturn(new ResourceMetadataCollection(DummyMercure::class, [(new ApiResource())->withOperations([
327+
'get' => (new Get())->withMercure(['topics' => ['/dummies/1', '/users/3'], 'hub' => 'managed', 'enable_async_update' => false])->withNormalizationContext(['groups' => ['baz']]),
328+
])]));
295329

296330
$serializerProphecy = $this->prophesize(SerializerInterface::class);
297331
$serializerProphecy->serialize($toInsert, 'jsonld', ['groups' => ['foo', 'bar']])->willReturn('1');
@@ -361,8 +395,10 @@ public function testPublishGraphQlUpdates(): void
361395
$iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
362396
$iriConverterProphecy->getIriFromItem($toUpdate, null, UrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummies/2');
363397

364-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
365-
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['enable_async_update' => false], 'normalization_context' => ['groups' => ['foo', 'bar']]]));
398+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
399+
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadataCollection(Dummy::class, [(new ApiResource())->withOperations([
400+
'get' => (new Get())->withMercure(['enable_async_update' => false])->withNormalizationContext(['groups' => ['foo', 'bar']]),
401+
])]));
366402

367403
$serializerProphecy = $this->prophesize(SerializerInterface::class);
368404
$serializerProphecy->serialize($toUpdate, 'jsonld', ['groups' => ['foo', 'bar']])->willReturn('2');
@@ -438,8 +474,10 @@ public function testInvalidMercureAttribute(): void
438474

439475
$iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
440476

441-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
442-
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => 1]));
477+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
478+
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadataCollection(Dummy::class, [(new ApiResource())->withOperations([
479+
'get' => (new Get())->withMercure(1),
480+
])]));
443481

444482
$serializerProphecy = $this->prophesize(SerializerInterface::class);
445483

@@ -479,8 +517,10 @@ public function testInvalidMercureAttributeWithLegacySignature(): void
479517

480518
$iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
481519

482-
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
483-
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => 1]));
520+
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataCollectionFactoryInterface::class);
521+
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadataCollection(Dummy::class, [(new ApiResource())->withOperations([
522+
'get' => (new Get())->withMercure(1),
523+
])]));
484524

485525
$serializerProphecy = $this->prophesize(SerializerInterface::class);
486526

tests/Fixtures/TestBundle/Entity/AttributeDefaultOperations.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ public function getIdentifier()
3434
return $this->identifier;
3535
}
3636

37-
public function getName() {
37+
public function getName()
38+
{
3839
return $this->name;
3940
}
4041
}

0 commit comments

Comments
 (0)