Skip to content

Commit 78cb369

Browse files
authored
fix(mercure): do not use data options when deleting (#4056)
1 parent 10f9452 commit 78cb369

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 2.6.3
4+
5+
* Mercure: Do not use data in options when deleting (#4056)
6+
37
## 2.6.2
48

59
* Validation: properties regex pattern is now compliant with ECMA 262 (#4027)

src/Bridge/Doctrine/EventListener/PublishMercureUpdatesListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ private function publishUpdate($object, array $options, string $type): void
213213
// and I'm not a fond of this approach.
214214
$iri = $options['topics'] ?? $object->iri;
215215
/** @var string $data */
216-
$data = $options['data'] ?? json_encode(['@id' => $object->id]);
216+
$data = json_encode(['@id' => $object->id]);
217217
} else {
218218
$resourceClass = $this->getObjectClass($object);
219219
$context = $options['normalization_context'] ?? $this->resourceMetadataFactory->create($resourceClass)->getAttribute('normalization_context', []);

tests/Bridge/Doctrine/EventListener/PublishMercureUpdatesListenerTest.php

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ public function testPublishUpdate(): void
146146
$toDelete->setId(3);
147147
$toDeleteExpressionLanguage = new DummyFriend();
148148
$toDeleteExpressionLanguage->setId(4);
149+
$toDeleteMercureOptions = new DummyOffer();
149150

150151
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
151152
$resourceClassResolverProphecy->getResourceClass(Argument::type(Dummy::class))->willReturn(Dummy::class);
@@ -167,12 +168,14 @@ public function testPublishUpdate(): void
167168
$iriConverterProphecy->getIriFromItem($toDelete)->willReturn('/dummies/3')->shouldBeCalled();
168169
$iriConverterProphecy->getIriFromItem($toDeleteExpressionLanguage)->willReturn('/dummy_friends/4')->shouldBeCalled();
169170
$iriConverterProphecy->getIriFromItem($toDeleteExpressionLanguage, UrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummy_friends/4')->shouldBeCalled();
171+
$iriConverterProphecy->getIriFromItem($toDeleteMercureOptions)->willReturn('/dummy_offers/5')->shouldBeCalled();
172+
$iriConverterProphecy->getIriFromItem($toDeleteMercureOptions, UrlGeneratorInterface::ABS_URL)->willReturn('http://example.com/dummy_offers/5')->shouldBeCalled();
170173

171174
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
172175
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => true, 'normalization_context' => ['groups' => ['foo', 'bar']]]));
173176
$resourceMetadataFactoryProphecy->create(DummyCar::class)->willReturn(new ResourceMetadata());
174177
$resourceMetadataFactoryProphecy->create(DummyFriend::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['private' => true, 'retry' => 10]]));
175-
$resourceMetadataFactoryProphecy->create(DummyOffer::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['topics' => 'http://example.com/custom_topics/1', 'normalization_context' => ['groups' => ['baz']]]]));
178+
$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']]]]));
176179
$resourceMetadataFactoryProphecy->create(DummyMercure::class)->willReturn(new ResourceMetadata(null, null, null, null, null, ['mercure' => ['topics' => ['/dummies/1', '/users/3'], 'normalization_context' => ['groups' => ['baz']]]]));
177180

178181
$serializerProphecy = $this->prophesize(SerializerInterface::class);
@@ -186,10 +189,12 @@ public function testPublishUpdate(): void
186189
$topics = [];
187190
$private = [];
188191
$retry = [];
189-
$publisher = function (Update $update) use (&$topics, &$private, &$retry): string {
192+
$data = [];
193+
$publisher = function (Update $update) use (&$topics, &$private, &$retry, &$data): string {
190194
$topics = array_merge($topics, $update->getTopics());
191195
$private[] = $update->isPrivate();
192196
$retry[] = $update->getRetry();
197+
$data[] = $update->getData();
193198

194199
return 'id';
195200
};
@@ -207,7 +212,7 @@ public function testPublishUpdate(): void
207212
$uowProphecy = $this->prophesize(UnitOfWork::class);
208213
$uowProphecy->getScheduledEntityInsertions()->willReturn([$toInsert, $toInsertNotResource])->shouldBeCalled();
209214
$uowProphecy->getScheduledEntityUpdates()->willReturn([$toUpdate, $toUpdateNoMercureAttribute, $toUpdateMercureOptions, $toUpdateMercureTopicOptions])->shouldBeCalled();
210-
$uowProphecy->getScheduledEntityDeletions()->willReturn([$toDelete, $toDeleteExpressionLanguage])->shouldBeCalled();
215+
$uowProphecy->getScheduledEntityDeletions()->willReturn([$toDelete, $toDeleteExpressionLanguage, $toDeleteMercureOptions])->shouldBeCalled();
211216

212217
$emProphecy = $this->prophesize(EntityManagerInterface::class);
213218
$emProphecy->getUnitOfWork()->willReturn($uowProphecy->reveal())->shouldBeCalled();
@@ -216,9 +221,10 @@ public function testPublishUpdate(): void
216221
$listener->onFlush($eventArgs);
217222
$listener->postFlush();
218223

219-
$this->assertSame(['http://example.com/dummies/1', 'http://example.com/dummies/2', 'http://example.com/custom_topics/1', '/dummies/1', '/users/3', 'http://example.com/dummies/3', 'http://example.com/dummy_friends/4'], $topics);
220-
$this->assertSame([false, false, false, false, false, true], $private);
221-
$this->assertSame([null, null, null, null, null, 10], $retry);
224+
$this->assertSame(['1', '2', 'mercure_custom_data', 'mercure_options', '{"@id":"\/dummies\/3"}', '{"@id":"\/dummy_friends\/4"}', '{"@id":"\/dummy_offers\/5"}'], $data);
225+
$this->assertSame(['http://example.com/dummies/1', 'http://example.com/dummies/2', 'http://example.com/custom_topics/1', '/dummies/1', '/users/3', 'http://example.com/dummies/3', 'http://example.com/dummy_friends/4', 'http://example.com/custom_topics/1'], $topics);
226+
$this->assertSame([false, false, false, false, false, true, false], $private);
227+
$this->assertSame([null, null, null, null, null, 10, null], $retry);
222228
}
223229

224230
public function testPublishGraphQlUpdates(): void

0 commit comments

Comments
 (0)