@@ -48,6 +48,7 @@ public function tearDown(): void
4848 protected function setUpTestClasses (): void
4949 {
5050 $ this ->tester ->setupPimcoreClass_Block ();
51+ $ this ->tester ->setupPimcoreClass_RelationTest ();
5152 }
5253
5354 /**
@@ -243,4 +244,81 @@ public function testBlockDataFromReferences(): void
243244 Cache::getHandler ()->setHandleCli (false );
244245 }
245246 }
247+
248+ /**
249+ * Verifies that relations inside a Block are rewritten by Service::rewriteIds
250+ * (used by "Paste recursive, updating references")
251+ *
252+ * @throws Exception
253+ */
254+ public function testRewriteIdsInsideBlock (): void
255+ {
256+ $ oldTarget = $ this ->createRelationTestObject ('rewrite-old-target ' );
257+ $ newTarget = $ this ->createRelationTestObject ('rewrite-new-target ' );
258+
259+ $ object = $ this ->createBlockObject ();
260+ $ data = [
261+ 'blockinput ' => new BlockElement ('blockinput ' , 'input ' , 'test-input ' ),
262+ 'blockadvancedRelations ' => new BlockElement (
263+ 'blockadvancedRelations ' ,
264+ 'advancedManyToManyRelation ' ,
265+ [new DataObject \Data \ElementMetadata ('blockadvancedRelations ' , [], $ oldTarget )]
266+ ),
267+ ];
268+ $ object ->setTestblock ([$ data ]);
269+ $ object ->save ();
270+
271+ $ object = DataObject::getById ($ object ->getId (), ['force ' => true ]);
272+ Service::rewriteIds ($ object , ['object ' => [$ oldTarget ->getId () => $ newTarget ->getId ()]]);
273+
274+ $ rewritten = $ object ->getTestblock ()[0 ]['blockadvancedRelations ' ]->getData ();
275+ $ this ->assertEquals ($ newTarget ->getId (), $ rewritten [0 ]->getElement ()->getId ());
276+
277+ //rewritten reference should survive save & reload
278+ $ object ->save ();
279+ $ object = DataObject::getById ($ object ->getId (), ['force ' => true ]);
280+
281+ $ reloaded = $ object ->getTestblock ()[0 ]['blockadvancedRelations ' ]->getData ();
282+ $ this ->assertEquals ($ newTarget ->getId (), $ reloaded [0 ]->getElement ()->getId ());
283+ }
284+
285+ /**
286+ * Verifies that relations inside a Block nested in Localizedfields are rewritten
287+ * by Service::rewriteIds (used by "Paste recursive, updating references")
288+ *
289+ * @throws Exception
290+ */
291+ public function testRewriteIdsInsideLocalizedBlock (): void
292+ {
293+ $ oldTarget = TestHelper::createEmptyObject ();
294+ $ newTarget = TestHelper::createEmptyObject ();
295+
296+ $ object = $ this ->createBlockObject ();
297+ $ data = [
298+ 'lblockadvancedRelations ' => new BlockElement (
299+ 'lblockadvancedRelations ' ,
300+ 'advancedManyToManyRelation ' ,
301+ [new DataObject \Data \ElementMetadata ('lblockadvancedRelations ' , [], $ oldTarget )]
302+ ),
303+ ];
304+ $ object ->setLtestblock ([$ data ], 'de ' );
305+ $ object ->save ();
306+
307+ $ object = DataObject::getById ($ object ->getId (), ['force ' => true ]);
308+ Service::rewriteIds ($ object , ['object ' => [$ oldTarget ->getId () => $ newTarget ->getId ()]]);
309+
310+ $ rewritten = $ object ->getLtestblock ('de ' )[0 ]['lblockadvancedRelations ' ]->getData ();
311+ $ this ->assertEquals ($ newTarget ->getId (), $ rewritten [0 ]->getElement ()->getId ());
312+ }
313+
314+ protected function createRelationTestObject (string $ key ): DataObject \RelationTest
315+ {
316+ $ object = new DataObject \RelationTest ();
317+ $ object ->setParent (Service::createFolderByPath ('__test/relationobjects ' ));
318+ $ object ->setKey ($ key );
319+ $ object ->setPublished (true );
320+ $ object ->save ();
321+
322+ return $ object ;
323+ }
246324}
0 commit comments