diff --git a/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php index 071647a..50e13ff 100644 --- a/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php @@ -62,7 +62,9 @@ public function onRoutingRouteAlterSetLatestRevision(RouteBuildEvent $event) { } $parameters = $route->getOption('parameters') ?: []; foreach ($parameters as &$parameter) { - $parameter['load_latest_revision'] = TRUE; + if (!isset($parameter['load_latest_revision'])) { + $parameter['load_latest_revision'] = TRUE; + } } $route->setOption('parameters', $parameters); } diff --git a/core/tests/Drupal/Tests/Core/EventSubscriber/EntityRouteAlterSubscriberTest.php b/core/tests/Drupal/Tests/Core/EventSubscriber/EntityRouteAlterSubscriberTest.php new file mode 100644 index 0000000..b85fde5 --- /dev/null +++ b/core/tests/Drupal/Tests/Core/EventSubscriber/EntityRouteAlterSubscriberTest.php @@ -0,0 +1,140 @@ +subscriber = new EntityRouteAlterSubscriber($this->prophesize(EntityResolverManager::class)->reveal()); + } + + /** + * @covers ::onRoutingRouteAlterSetLatestRevision + * + * @dataProvider latestRevisionAlterTestCases + */ + public function testLatestRevisionAlter($defaults, $parameters, $expected_parameters = FALSE) { + $route = new Route('/foo', $defaults, [], [ + 'parameters' => $parameters, + ]); + $collection = new RouteCollection(); + $collection->add('foo', $route); + + $this->subscriber->onRoutingRouteAlterSetLatestRevision(new RouteBuildEvent($collection)); + // If expected parameters have not been provided, assert they are unchanged. + $this->assertEquals($expected_parameters ?: $parameters, $route->getOption('parameters')); + } + + /** + * Data provider for ::testLatestRevisionAlter. + */ + public function latestRevisionAlterTestCases() { + return [ + 'Entity parameter not on an entity form' => [ + [], + [ + 'entity_test' => [ + 'type' => 'entity:entity_test', + ], + ], + ], + 'Entity parameter on an entity form' => [ + [ + '_entity_form' => 'entity_test.edit' + ], + [ + 'entity_test' => [ + 'type' => 'entity:entity_test', + ], + ], + [ + 'entity_test' => [ + 'type' => 'entity:entity_test', + 'load_latest_revision' => TRUE, + ], + ], + ], + 'Multiple entity parameters on an entity form' => [ + [ + '_entity_form' => 'entity_test.edit' + ], + [ + 'entity_test' => [ + 'type' => 'entity:entity_test', + ], + 'node' => [ + 'type' => 'entity:node', + ], + ], + [ + 'entity_test' => [ + 'type' => 'entity:entity_test', + 'load_latest_revision' => TRUE, + ], + 'node' => [ + 'type' => 'entity:node', + 'load_latest_revision' => TRUE, + ], + ], + ], + 'Overriden load_latest_revision flag does not change' => [ + [ + '_entity_form' => 'entity_test.edit' + ], + [ + 'entity_test' => [ + 'type' => 'entity:entity_test', + 'load_latest_revision' => FALSE, + ], + ], + ], + 'Overriden load_latest_revision flag does not change with multiple parameters' => [ + [ + '_entity_form' => 'entity_test.edit' + ], + [ + 'entity_test' => [ + 'type' => 'entity:entity_test', + ], + 'node' => [ + 'type' => 'entity:node', + 'load_latest_revision' => FALSE, + ], + ], + [ + 'entity_test' => [ + 'type' => 'entity:entity_test', + 'load_latest_revision' => TRUE, + ], + 'node' => [ + 'type' => 'entity:node', + 'load_latest_revision' => FALSE, + ], + ], + ], + ]; + } + +}