Version 1
[yaffs-website] / web / core / modules / node / tests / src / Functional / NodeViewTest.php
diff --git a/web/core/modules/node/tests/src/Functional/NodeViewTest.php b/web/core/modules/node/tests/src/Functional/NodeViewTest.php
new file mode 100644 (file)
index 0000000..b0eaa47
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+
+namespace Drupal\Tests\node\Functional;
+
+use Drupal\Component\Utility\Html;
+
+/**
+ * Tests the node/{node} page.
+ *
+ * @group node
+ * @see \Drupal\node\Controller\NodeController
+ */
+class NodeViewTest extends NodeTestBase {
+
+  /**
+   * Tests the html head links.
+   */
+  public function testHtmlHeadLinks() {
+    $node = $this->drupalCreateNode();
+
+    $this->drupalGet($node->urlInfo());
+
+    $result = $this->xpath('//link[@rel = "canonical"]');
+    $this->assertEqual($result[0]->getAttribute('href'), $node->url());
+
+    // Link relations are checked for access for anonymous users.
+    $result = $this->xpath('//link[@rel = "version-history"]');
+    $this->assertFalse($result, 'Version history not present for anonymous users without access.');
+
+    $result = $this->xpath('//link[@rel = "edit-form"]');
+    $this->assertFalse($result, 'Edit form not present for anonymous users without access.');
+
+    $this->drupalLogin($this->createUser(['access content']));
+    $this->drupalGet($node->urlInfo());
+
+    $result = $this->xpath('//link[@rel = "canonical"]');
+    $this->assertEqual($result[0]->getAttribute('href'), $node->url());
+
+    // Link relations are present regardless of access for authenticated users.
+    $result = $this->xpath('//link[@rel = "version-history"]');
+    $this->assertEqual($result[0]->getAttribute('href'), $node->url('version-history'));
+
+    $result = $this->xpath('//link[@rel = "edit-form"]');
+    $this->assertEqual($result[0]->getAttribute('href'), $node->url('edit-form'));
+
+    // Give anonymous users access to edit the node. Do this through the UI to
+    // ensure caches are handled properly.
+    $this->drupalLogin($this->rootUser);
+    $edit = [
+      'anonymous[edit own ' . $node->bundle() . ' content]' => TRUE
+    ];
+    $this->drupalPostForm('admin/people/permissions', $edit, 'Save permissions');
+    $this->drupalLogout();
+
+    // Anonymous user's should now see the edit-form link but not the
+    // version-history link.
+    $this->drupalGet($node->urlInfo());
+    $result = $this->xpath('//link[@rel = "canonical"]');
+    $this->assertEqual($result[0]->getAttribute('href'), $node->url());
+
+    $result = $this->xpath('//link[@rel = "version-history"]');
+    $this->assertFalse($result, 'Version history not present for anonymous users without access.');
+
+    $result = $this->xpath('//link[@rel = "edit-form"]');
+    $this->assertEqual($result[0]->getAttribute('href'), $node->url('edit-form'));
+  }
+
+  /**
+   * Tests the Link header.
+   */
+  public function testLinkHeader() {
+    $node = $this->drupalCreateNode();
+
+    $expected = [
+      '<' . Html::escape($node->url('canonical')) . '>; rel="canonical"',
+      '<' . Html::escape($node->url('canonical'), ['alias' => TRUE]) . '>; rel="shortlink"',
+      '<' . Html::escape($node->url('revision')) . '>; rel="revision"',
+    ];
+
+    $this->drupalGet($node->urlInfo());
+
+    $links = $this->drupalGetHeaders()['Link'];
+    $this->assertEqual($links, $expected);
+  }
+
+  /**
+   * Tests that we store and retrieve multi-byte UTF-8 characters correctly.
+   */
+  public function testMultiByteUtf8() {
+    $title = '🐝';
+    $this->assertTrue(mb_strlen($title, 'utf-8') < strlen($title), 'Title has multi-byte characters.');
+    $node = $this->drupalCreateNode(['title' => $title]);
+    $this->drupalGet($node->urlInfo());
+    $result = $this->xpath('//span[contains(@class, "field--name-title")]');
+    $this->assertEqual($result[0]->getText(), $title, 'The passed title was returned.');
+  }
+
+}