diff -u b/src/PanelsEvents.php b/src/PanelsEvents.php --- b/src/PanelsEvents.php +++ b/src/PanelsEvents.php @@ -25,7 +25,8 @@ * * This event allows modules to react after a Panels display variant is saved. * The event listener method receives a \Drupal\panels\PanelsVariantEvent - * instance. + * instance. Note that changes to the variant made by subscribers to this + * event will NOT be persisted. * * @Event * diff -u b/tests/src/Kernel/PanelsStorageManagerTest.php b/tests/src/Kernel/PanelsStorageManagerTest.php --- b/tests/src/Kernel/PanelsStorageManagerTest.php +++ b/tests/src/Kernel/PanelsStorageManagerTest.php @@ -3,6 +3,8 @@ namespace Drupal\Tests\panels\Kernel; use Drupal\KernelTests\KernelTestBase; +use Drupal\page_manager\Entity\Page; +use Drupal\page_manager\Entity\PageVariant; use Drupal\panels\PanelsEvents; use Drupal\panels\PanelsVariantEvent; @@ -25,45 +27,40 @@ $event_dispatcher = $this->container->get('event_dispatcher'); $event_dispatcher->addListener(PanelsEvents::VARIANT_PRE_SAVE, function (PanelsVariantEvent $event) { - $event->getVariant()->testPreSave = TRUE; + $event->getVariant()->setPageTitle('Gentlefolk, BEHOLD!'); }); $event_dispatcher->addListener(PanelsEvents::VARIANT_POST_SAVE, function (PanelsVariantEvent $event) { - $event->getVariant()->testPostSave = TRUE; + $event->getVariant()->setPageTitle('This will be discarded.'); }); - /** @var \Drupal\page_manager\PageInterface $page */ - $page = $this->container - ->get('entity_type.manager') - ->getStorage('page') - ->create([ - 'id' => $this->randomMachineName(), - 'label' => $this->randomMachineName(), - 'path' => '/' . $this->randomMachineName(), - ]); + $page = Page::create([ + 'id' => $this->randomMachineName(), + 'label' => $this->randomMachineName(), + 'path' => '/' . $this->randomMachineName(), + ]); $page->save(); - /** @var \Drupal\page_manager\PageVariantInterface $variant */ - $variant = $this->container - ->get('entity_type.manager') - ->getStorage('page_variant') - ->create([ - 'id' => $this->randomMachineName(), - 'label' => $this->randomMachineName(), - 'variant' => 'panels_variant', - 'variant_settings' => [ - 'storage_type' => 'page_manager', - 'storage_id' => $this->randomMachineName(), - 'layout' => 'layout_onecol', - 'layout_settings' => [], - ], - 'page' => $page->id(), - ]); + $variant = PageVariant::create([ + 'id' => 'stunning', + 'label' => $this->randomMachineName(), + 'variant' => 'panels_variant', + 'variant_settings' => [ + 'page_title' => 'Pastafazoul', + 'storage_type' => 'page_manager', + 'storage_id' => $this->randomMachineName(), + 'layout' => 'layout_onecol', + 'layout_settings' => [], + ], + 'page' => $page->id(), + ]); $variant->save(); - $display = $variant->getVariantPlugin(); - $this->container->get('panels.storage_manager')->save($display); - $this->assertObjectHasAttribute('testPreSave', $display); - $this->assertObjectHasAttribute('testPostSave', $display); + $this->container->get('panels.storage_manager')->save($variant->getVariantPlugin()); + + // The page title set by the pre-save event handler should be persisted; + // the one set by the post-save handler should be discarded. + $page_title = PageVariant::load('stunning')->getVariantPlugin()->getPageTitle(); + $this->assertSame('Gentlefolk, BEHOLD!', $page_title); } }