Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / system / tests / src / Functional / Menu / BreadcrumbFrontCacheContextsTest.php
diff --git a/web/core/modules/system/tests/src/Functional/Menu/BreadcrumbFrontCacheContextsTest.php b/web/core/modules/system/tests/src/Functional/Menu/BreadcrumbFrontCacheContextsTest.php
new file mode 100644 (file)
index 0000000..9027209
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+
+namespace Drupal\Tests\system\Functional\Menu;
+
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests breadcrumbs functionality.
+ *
+ * @group Menu
+ */
+class BreadcrumbFrontCacheContextsTest extends BrowserTestBase {
+
+  use AssertBreadcrumbTrait;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'block',
+    'node',
+    'path',
+    'user',
+  ];
+
+  /**
+   * A test node with path alias.
+   *
+   * @var \Drupal\node\NodeInterface
+   */
+  protected $nodeWithAlias;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->drupalPlaceBlock('system_breadcrumb_block');
+
+    $user = $this->drupalCreateUser();
+
+    $this->drupalCreateContentType([
+      'type' => 'page',
+    ]);
+
+    // Create a node for front page.
+    $node_front = $this->drupalCreateNode([
+      'uid' => $user->id(),
+    ]);
+
+    // Create a node with a random alias.
+    $this->nodeWithAlias = $this->drupalCreateNode([
+      'uid' => $user->id(),
+      'type' => 'page',
+      'path' => '/' . $this->randomMachineName(),
+    ]);
+
+    // Configure 'node' as front page.
+    $this->config('system.site')
+      ->set('page.front', '/node/' . $node_front->id())
+      ->save();
+
+    \Drupal::cache('render')->deleteAll();
+  }
+
+  /**
+   * Validate that breadcrumb markup get the right cache contexts.
+   *
+   * Checking that the breadcrumb will be printed on node canonical routes even
+   * if it was rendered for the <front> page first.
+   */
+  public function testBreadcrumbsFrontPageCache() {
+    // Hit front page first as anonymous user with 'cold' render cache.
+    $this->drupalGet('<front>');
+    $web_assert = $this->assertSession();
+    // Verify that no breadcrumb block presents.
+    $web_assert->elementNotExists('css', '.block-system-breadcrumb-block');
+
+    // Verify that breadcrumb appears correctly for the test content
+    // (which is not set as front page).
+    $this->drupalGet($this->nodeWithAlias->path->alias);
+    $breadcrumbs = $this->assertSession()->elementExists('css', '.block-system-breadcrumb-block');
+    $crumbs = $breadcrumbs->findAll('css', 'ol li');
+    $this->assertTrue(count($crumbs) === 1);
+    $this->assertTrue($crumbs[0]->getText() === 'Home');
+  }
+
+}