NodeViewTest.php

Same filename in other branches
  1. 9 core/modules/node/tests/src/Functional/NodeViewTest.php
  2. 10 core/modules/node/tests/src/Functional/NodeViewTest.php
  3. 11.x core/modules/node/tests/src/Functional/NodeViewTest.php

Namespace

Drupal\Tests\node\Functional

File

core/modules/node/tests/src/Functional/NodeViewTest.php

View source
<?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 {
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'classy';
    
    /**
     * Tests the html head links.
     */
    public function testHtmlHeadLinks() {
        $node = $this->drupalCreateNode();
        $this->drupalGet($node->toUrl());
        $result = $this->xpath('//link[@rel = "canonical"]');
        $this->assertEqual($result[0]->getAttribute('href'), $node->toUrl()
            ->setAbsolute()
            ->toString());
        // Link relations are checked for access for anonymous users.
        $result = $this->xpath('//link[@rel = "version-history"]');
        $this->assertEmpty($result, 'Version history not present for anonymous users without access.');
        $result = $this->xpath('//link[@rel = "edit-form"]');
        $this->assertEmpty($result, 'Edit form not present for anonymous users without access.');
        $this->drupalLogin($this->createUser([
            'access content',
        ]));
        $this->drupalGet($node->toUrl());
        $result = $this->xpath('//link[@rel = "canonical"]');
        $this->assertEqual($result[0]->getAttribute('href'), $node->toUrl()
            ->setAbsolute()
            ->toString());
        // Link relations are present regardless of access for authenticated users.
        $result = $this->xpath('//link[@rel = "version-history"]');
        $this->assertEqual($result[0]->getAttribute('href'), $node->toUrl('version-history')
            ->setAbsolute()
            ->toString());
        $result = $this->xpath('//link[@rel = "edit-form"]');
        $this->assertEqual($result[0]->getAttribute('href'), $node->toUrl('edit-form')
            ->setAbsolute()
            ->toString());
        // 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->toUrl());
        $result = $this->xpath('//link[@rel = "canonical"]');
        $this->assertEqual($result[0]->getAttribute('href'), $node->toUrl()
            ->setAbsolute()
            ->toString());
        $result = $this->xpath('//link[@rel = "version-history"]');
        $this->assertEmpty($result, 'Version history not present for anonymous users without access.');
        $result = $this->xpath('//link[@rel = "edit-form"]');
        $this->assertEqual($result[0]->getAttribute('href'), $node->toUrl('edit-form')
            ->setAbsolute()
            ->toString());
    }
    
    /**
     * Tests the Link header.
     */
    public function testLinkHeader() {
        $node = $this->drupalCreateNode();
        $expected = [
            '<' . Html::escape($node->toUrl('canonical')
                ->setAbsolute()
                ->toString()) . '>; rel="canonical"',
            '<' . Html::escape($node->toUrl('canonical')
                ->setAbsolute()
                ->toString(), [
                'alias' => TRUE,
            ]) . '>; rel="shortlink"',
            '<' . Html::escape($node->toUrl('revision')
                ->setAbsolute()
                ->toString()) . '>; rel="revision"',
        ];
        $this->drupalGet($node->toUrl());
        $links = $this->getSession()
            ->getResponseHeaders()['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->toUrl());
        $result = $this->xpath('//span[contains(@class, "field--name-title")]');
        $this->assertEqual($result[0]->getText(), $title, 'The passed title was returned.');
    }

}

Classes

Title Deprecated Summary
NodeViewTest Tests the node/{node} page.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.