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\FunctionalCode
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.');
}