diff --git a/core/modules/node/node.routing.yml b/core/modules/node/node.routing.yml index 270ddc4544..59d34f9b69 100644 --- a/core/modules/node/node.routing.yml +++ b/core/modules/node/node.routing.yml @@ -59,6 +59,8 @@ entity.node.version_history: _access_node_revision: 'view' node: \d+ options: + node: + type: entity:node _node_operation_route: TRUE entity.node.revision: diff --git a/core/modules/node/tests/modules/node_routes_test/src/Plugin/Block/NodeRoutesTestBlock.php b/core/modules/node/tests/modules/node_routes_test/src/Plugin/Block/NodeRoutesTestBlock.php index 68fac06a4f..835d9519fa 100644 --- a/core/modules/node/tests/modules/node_routes_test/src/Plugin/Block/NodeRoutesTestBlock.php +++ b/core/modules/node/tests/modules/node_routes_test/src/Plugin/Block/NodeRoutesTestBlock.php @@ -58,15 +58,25 @@ public static function create(ContainerInterface $container, array $configuratio * {@inheritdoc} */ public function build() { - $cacheable_metadata = new CacheableMetadata(); - $is_article_page = FALSE; + $cacheable_metadata = CacheableMetadata::createFromObject($this); + $article_page_markup = 'A page without node'; + $revision_page_markup = ' and without revision'; + // Upcasted node object. if ($node = $this->routeMatch->getParameter('node')) { - $is_article_page = $node->getType() == 'article'; - $cacheable_metadata->merge($node); + $article_page_markup = sprintf('A page with node: (%s)', $node->id()); + $cacheable_metadata->addCacheableDependency($node); } + // Upcasted node revision object. + if ($node_revision = $this->routeMatch->getParameter('node_revision')) { + $revision_page_markup = sprintf(' and node revision: (%s)', $node_revision->getRevisionId()); + } + $build = [ - '#markup' => $is_article_page ? 'article page' : 'not an article page', + '#markup' => $article_page_markup . $revision_page_markup, ]; + // @todo Remove this in https://www.drupal.org/node/2879244. + $cacheable_metadata->setCacheMaxAge(0); + // Apply cacheability. $cacheable_metadata->applyTo($build); return $build; } diff --git a/core/modules/node/tests/src/Functional/NodeRoutesTest.php b/core/modules/node/tests/src/Functional/NodeRoutesTest.php index 8a427df1d8..67738ec814 100644 --- a/core/modules/node/tests/src/Functional/NodeRoutesTest.php +++ b/core/modules/node/tests/src/Functional/NodeRoutesTest.php @@ -33,7 +33,19 @@ class NodeRoutesTest extends NodeTestBase { public function testRevisionRoutes() { ConfigurableLanguage::createFromLangcode('it')->save(); - $this->placeBlock('node_routes_test_block'); + $this->drupalPlaceBlock('node_routes_test_block', [ + 'visibility' => [ + 'node_type' => [ + 'bundles' => [ + 'article' => 'article', + ], + 'negate' => FALSE, + 'context_mapping' => [ + 'node' => '@node.node_route_context:node', + ], + ], + ], + ]); $account = $this->drupalCreateUser([ 'view article revisions', @@ -59,22 +71,20 @@ public function testRevisionRoutes() { $node->save(); $current_rid = $node->getRevisionId(); - if (isset($nid) && isset($current_rid) && isset($initial_rid)) { - $this->drupalGet("node/$nid/revisions"); - $this->assertSession()->pageTextContainsOnce('article page'); + $this->drupalGet("node/$nid/revisions"); + $this->assertSession()->pageTextContainsOnce(sprintf('A page with node: (%s) and without revision', $nid)); - $this->drupalGet("node/$nid/revisions/$current_rid/view"); - $this->assertSession()->pageTextContainsOnce('article page'); + $this->drupalGet("node/$nid/revisions/$current_rid/view"); + $this->assertSession()->pageTextContainsOnce(sprintf('A page with node: (%s) and node revision: (%s)', $nid, $current_rid)); - $this->drupalGet("node/$nid/revisions/$initial_rid/revert"); - $this->assertSession()->pageTextContainsOnce('article page'); + $this->drupalGet("node/$nid/revisions/$initial_rid/revert"); + $this->assertSession()->pageTextContainsOnce(sprintf('A page with node: (%s) and node revision: (%s)', $nid, $initial_rid)); - $this->drupalGet("node/$nid/revisions/$initial_rid/revert/it"); - $this->assertSession()->pageTextContainsOnce('article page'); + $this->drupalGet("node/$nid/revisions/$initial_rid/revert/it"); + $this->assertSession()->pageTextContainsOnce(sprintf('A page with node: (%s) and node revision: (%s)', $nid, $initial_rid)); - $this->drupalGet("node/$nid/revisions/$initial_rid/delete"); - $this->assertSession()->pageTextContainsOnce('article page'); - } + $this->drupalGet("node/$nid/revisions/$initial_rid/delete"); + $this->assertSession()->pageTextContainsOnce(sprintf('A page with node: (%s) and node revision: (%s)', $nid, $initial_rid)); } }