You are here

public function MetatagStringTest::checkNode in Metatag 8

Tests that a specific node string is not double escaped.

1 call to MetatagStringTest::checkNode()
MetatagStringTest::checkString in tests/src/Functional/MetatagStringTest.php
Tests that specific strings are not double escaped.

File

tests/src/Functional/MetatagStringTest.php, line 196

Class

MetatagStringTest
Ensures that the Metatag field works correctly.

Namespace

Drupal\Tests\metatag\Functional

Code

public function checkNode($string) {
  $save_label = floatval(\Drupal::VERSION) <= 8.300000000000001 ? $this
    ->t('Save and publish') : $this
    ->t('Save');

  // The original strings.
  $title_original = 'Title: ' . $string;
  $desc_original = 'Description: ' . $string;

  // The strings after they're encoded, but quotes will not be encoded.
  $title_encoded = htmlentities($title_original, ENT_QUOTES);
  $desc_encoded = htmlentities($desc_original, ENT_QUOTES);

  // The strings double-encoded, to make sure the tags aren't broken.
  $title_encodeded = htmlentities($title_encoded, ENT_QUOTES);
  $desc_encodeded = htmlentities($desc_encoded, ENT_QUOTES);

  // Update the Global defaults and test them.
  $this
    ->drupalGet('admin/config/search/metatag/global');
  $session = $this
    ->assertSession();
  $session
    ->statusCodeEquals(200);
  $edit = [
    'title' => $title_original,
    'description' => $desc_original,
  ];
  $this
    ->drupalPostForm(NULL, $edit, $this
    ->t('Save'));
  $session
    ->statusCodeEquals(200);

  // Set up a node without explicit metatag description. This causes the
  // global default to be used, which contains a token (node:summary). The
  // token value should be correctly translated.
  // Create a node.
  $this
    ->drupalGet('node/add/page');
  $session
    ->statusCodeEquals(200);
  $edit = [
    'title[0][value]' => $title_original,
    'body[0][value]' => $desc_original,
  ];
  $this
    ->drupalPostForm(NULL, $edit, $save_label);
  $session
    ->statusCodeEquals(200);

  // Load the node page.
  $this
    ->drupalGet('node/1');
  $session
    ->statusCodeEquals(200);

  // Again, with xpath the HTML entities will be parsed automagically.
  $xpath_title = current($this
    ->xpath("//title"))
    ->getText();
  $this
    ->assertEquals($xpath_title, $title_original);
  $this
    ->assertNotEquals($xpath_title, $title_encoded);
  $this
    ->assertNotEquals($xpath_title, $title_encodeded);

  // The page title should be HTML encoded; have to do this check manually
  // because assertRaw() checks the raw HTML, not the parsed strings like
  // xpath does.
  $session
    ->responseContains('<title>' . $title_encoded . '</title>', 'Confirmed the node title tag is encoded.');

  // Again, with xpath the HTML entities will be parsed automagically.
  $xpath = $this
    ->xpath("//meta[@name='description']");
  $value = $xpath[0]
    ->getAttribute('content');
  $this
    ->assertEquals($value, $desc_original);
  $this
    ->assertNotEquals($value, $desc_encoded);
  $this
    ->assertNotEquals($value, $desc_encodeded);

  // Normal meta tags should be encoded properly.
  $session
    ->responseContains('"' . $desc_encoded . '"', 'Confirmed the node "description" meta tag string was encoded properly.');

  // Normal meta tags with HTML entities should be displayed in their original
  // format.
  $session
    ->responseNotContains('"' . $desc_original . '"', 'Confirmed the node "description" meta tag string does not show in its original form.');

  // Normal meta tags should not be double-encoded.
  $session
    ->responseNotContains('"' . $desc_encodeded . '"', 'Confirmed the node "description" meta tag string was not double-encoded.');
}