|
14 | 14 | namespace ApiPlatform\Core\Tests\Bridge\Doctrine\EventListener;
|
15 | 15 |
|
16 | 16 | use ApiPlatform\Api\IriConverterInterface;
|
| 17 | +use ApiPlatform\Api\UrlGeneratorInterface as ApiUrlGeneratorInterface; |
17 | 18 | use ApiPlatform\Core\Api\ResourceClassResolverInterface;
|
18 | 19 | use ApiPlatform\Core\Api\UrlGeneratorInterface;
|
19 | 20 | use ApiPlatform\Core\Bridge\Doctrine\EventListener\PublishMercureUpdatesListener;
|
20 | 21 | use ApiPlatform\Core\Exception\InvalidArgumentException;
|
21 |
| -use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface; |
22 | 22 | use ApiPlatform\Core\Metadata\Resource\ResourceMetadata;
|
23 | 23 | use ApiPlatform\Core\Tests\ProphecyTrait;
|
24 | 24 | use ApiPlatform\GraphQl\Subscription\MercureSubscriptionIriGeneratorInterface as GraphQlMercureSubscriptionIriGeneratorInterface;
|
25 | 25 | 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; |
26 | 30 | use ApiPlatform\Tests\Fixtures\NotAResource;
|
27 | 31 | use ApiPlatform\Tests\Fixtures\TestBundle\Entity\Dummy;
|
28 | 32 | use ApiPlatform\Tests\Fixtures\TestBundle\Entity\DummyCar;
|
@@ -81,17 +85,24 @@ public function testLegacyPublishUpdate(): void
|
81 | 85 | $resourceClassResolverProphecy->isResourceClass(DummyFriend::class)->willReturn(true);
|
82 | 86 |
|
83 | 87 | $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); |
90 | 96 |
|
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 | + ])])); |
95 | 106 |
|
96 | 107 | $serializerProphecy = $this->prophesize(SerializerInterface::class);
|
97 | 108 | $serializerProphecy->serialize($toInsert, 'jsonld', ['groups' => ['foo', 'bar']])->willReturn('1');
|
@@ -185,12 +196,22 @@ public function testPublishUpdateWithLegacySignature(): void
|
185 | 196 | $iriConverterProphecy->getIriFromItem($toDeleteMercureOptions, null, UrlGeneratorInterface::REL_PATH)->willReturn('./dummy_offers/5')->shouldBeCalled();
|
186 | 197 | $iriConverterProphecy->getIriFromItem($toDeleteMercureOptions, null, UrlGeneratorInterface::NET_PATH)->willReturn('//example.com/dummy_offers/5')->shouldBeCalled();
|
187 | 198 |
|
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 | + ])])); |
194 | 215 |
|
195 | 216 | $serializerProphecy = $this->prophesize(SerializerInterface::class);
|
196 | 217 | $serializerProphecy->serialize($toInsert, 'jsonld', ['groups' => ['foo', 'bar']])->willReturn('1');
|
@@ -286,12 +307,25 @@ public function testPublishUpdate(): void
|
286 | 307 | $iriConverterProphecy->getIriFromItem($toDeleteMercureOptions)->willReturn('/dummy_offers/5')->shouldBeCalled();
|
287 | 308 | $iriConverterProphecy->getIriFromItem($toDeleteMercureOptions, null, UrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummy_offers/5')->shouldBeCalled();
|
288 | 309 |
|
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 | + ])])); |
295 | 329 |
|
296 | 330 | $serializerProphecy = $this->prophesize(SerializerInterface::class);
|
297 | 331 | $serializerProphecy->serialize($toInsert, 'jsonld', ['groups' => ['foo', 'bar']])->willReturn('1');
|
@@ -361,8 +395,10 @@ public function testPublishGraphQlUpdates(): void
|
361 | 395 | $iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
|
362 | 396 | $iriConverterProphecy->getIriFromItem($toUpdate, null, UrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummies/2');
|
363 | 397 |
|
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 | + ])])); |
366 | 402 |
|
367 | 403 | $serializerProphecy = $this->prophesize(SerializerInterface::class);
|
368 | 404 | $serializerProphecy->serialize($toUpdate, 'jsonld', ['groups' => ['foo', 'bar']])->willReturn('2');
|
@@ -438,8 +474,10 @@ public function testInvalidMercureAttribute(): void
|
438 | 474 |
|
439 | 475 | $iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
|
440 | 476 |
|
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 | + ])])); |
443 | 481 |
|
444 | 482 | $serializerProphecy = $this->prophesize(SerializerInterface::class);
|
445 | 483 |
|
@@ -479,8 +517,10 @@ public function testInvalidMercureAttributeWithLegacySignature(): void
|
479 | 517 |
|
480 | 518 | $iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
|
481 | 519 |
|
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 | + ])])); |
484 | 524 |
|
485 | 525 | $serializerProphecy = $this->prophesize(SerializerInterface::class);
|
486 | 526 |
|
|
0 commit comments