diff --git a/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php index 721eb7c..9b72c67 100644 --- a/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php @@ -72,7 +72,7 @@ public function onRoutingRouteAlterSetLatestRevision(RouteBuildEvent $event) { // Only set the flag on entity types which are revisionable. list($entity_type) = explode('.', $entity_form); if (!$this->entityTypeManager->getDefinition($entity_type)->isRevisionable()) { - return; + continue; } $parameters = $route->getOption('parameters') ?: []; foreach ($parameters as &$parameter) { diff --git a/core/tests/Drupal/Tests/Core/EventSubscriber/EntityRouteAlterSubscriberTest.php b/core/tests/Drupal/Tests/Core/EventSubscriber/EntityRouteAlterSubscriberTest.php index f53912f..1bceb44 100644 --- a/core/tests/Drupal/Tests/Core/EventSubscriber/EntityRouteAlterSubscriberTest.php +++ b/core/tests/Drupal/Tests/Core/EventSubscriber/EntityRouteAlterSubscriberTest.php @@ -18,43 +18,26 @@ class EntityRouteAlterSubscriberTest extends UnitTestCase { /** - * The subscriber. - * - * @var \Drupal\Core\EventSubscriber\EntityRouteAlterSubscriber - */ - protected $subscriber; - - /** - * @var \Drupal\Core\Entity\EntityTypeInterface|\Prophecy\Prophecy\ObjectProphecy - */ - protected $entityDefinition; - - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::setUp(); - - $this->entityDefinition = $this->prophesize(EntityTypeInterface::class); - $entity_type_manager = $this->prophesize(EntityTypeManagerInterface::class); - $entity_type_manager->getDefinition('entity_test')->willReturn($this->entityDefinition->reveal()); - $this->subscriber = new EntityRouteAlterSubscriber($this->prophesize(EntityResolverManager::class)->reveal(), $entity_type_manager->reveal()); - } - - /** * @covers ::onRoutingRouteAlterSetLatestRevision * * @dataProvider latestRevisionAlterTestCases */ public function testLatestRevisionAlter($defaults, $parameters, $expected_parameters = FALSE, $entity_type_revisionable = TRUE) { - $this->entityDefinition->isRevisionable()->willReturn($entity_type_revisionable); + $entity_definition = $this->prophesize(EntityTypeInterface::class); + $entity_definition->isRevisionable()->willReturn($entity_type_revisionable); + + $entity_type_manager = $this->prophesize(EntityTypeManagerInterface::class); + $entity_type_manager->getDefinition('entity_test')->willReturn($entity_definition->reveal()); + + $subscriber = new EntityRouteAlterSubscriber($this->prophesize(EntityResolverManager::class)->reveal(), $entity_type_manager->reveal()); + $route = new Route('/foo', $defaults, [], [ 'parameters' => $parameters, ]); $collection = new RouteCollection(); $collection->add('foo', $route); - $this->subscriber->onRoutingRouteAlterSetLatestRevision(new RouteBuildEvent($collection)); + $subscriber->onRoutingRouteAlterSetLatestRevision(new RouteBuildEvent($collection)); // If expected parameters have not been provided, assert they are unchanged. $this->assertEquals($expected_parameters ?: $parameters, $route->getOption('parameters')); } @@ -160,4 +143,54 @@ public function latestRevisionAlterTestCases() { ]; } + /** + * Test the subscriber with multiple routes with varying entity types. + */ + public function testMultipleRoutes() { + $non_revisionable_entity_type = $this->prophesize(EntityTypeInterface::class); + $non_revisionable_entity_type->isRevisionable()->willReturn(FALSE); + + $revisionable_entity_type = $this->prophesize(EntityTypeInterface::class); + $revisionable_entity_type->isRevisionable()->willReturn(TRUE); + + $entity_type_manager = $this->prophesize(EntityTypeManagerInterface::class); + $entity_type_manager->getDefinition('non_revisionable')->willReturn($non_revisionable_entity_type); + $entity_type_manager->getDefinition('revisionable')->willReturn($revisionable_entity_type->reveal()); + + $non_revisionable_route = new Route('/foo', ['_entity_form' => 'non_revisionable.edit'], [], [ + 'parameters' => [ + 'non_revisionable' => [ + 'type' => 'entity:non_revisionable', + ], + ], + ]); + $revisionable_route = new Route('/bar', ['_entity_form' => 'revisionable.edit'], [], [ + 'parameters' => [ + 'revisionable' => [ + 'type' => 'entity:revisionable', + ], + ], + ]); + $collection = new RouteCollection(); + $collection->add('foo', $non_revisionable_route); + $collection->add('bar', $revisionable_route); + + $subscriber = new EntityRouteAlterSubscriber($this->prophesize(EntityResolverManager::class)->reveal(), $entity_type_manager->reveal()); + $subscriber->onRoutingRouteAlterSetLatestRevision(new RouteBuildEvent($collection)); + + // If expected parameters have not been provided, assert they are unchanged. + $this->assertEquals([ + 'revisionable' => [ + 'type' => 'entity:revisionable', + 'load_latest_revision' => TRUE, + ], + ], $revisionable_route->getOption('parameters')); + + $this->assertEquals([ + 'non_revisionable' => [ + 'type' => 'entity:non_revisionable', + ], + ], $non_revisionable_route->getOption('parameters')); + } + }