function CommentTokenReplaceTest::testCommentTokenReplacement in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/comment/src/Tests/CommentTokenReplaceTest.php \Drupal\comment\Tests\CommentTokenReplaceTest::testCommentTokenReplacement()
Creates a comment, then tests the tokens generated from it.
File
- core/
modules/ comment/ src/ Tests/ CommentTokenReplaceTest.php, line 27 - Contains \Drupal\comment\Tests\CommentTokenReplaceTest.
Class
- CommentTokenReplaceTest
- Generates text using placeholders for dummy content to check comment token replacement.
Namespace
Drupal\comment\TestsCode
function testCommentTokenReplacement() {
$token_service = \Drupal::token();
$language_interface = \Drupal::languageManager()
->getCurrentLanguage();
$url_options = array(
'absolute' => TRUE,
'language' => $language_interface,
);
// Change the title of the admin user.
$this->adminUser->name->value = 'This is a title with some special & > " stuff.';
$this->adminUser
->save();
$this
->drupalLogin($this->adminUser);
// Set comment variables.
$this
->setCommentSubject(TRUE);
// Create a node and a comment.
$node = $this
->drupalCreateNode([
'type' => 'article',
'title' => '<script>alert("123")</script>',
]);
$parent_comment = $this
->postComment($node, $this
->randomMachineName(), $this
->randomMachineName(), TRUE);
// Post a reply to the comment.
$this
->drupalGet('comment/reply/node/' . $node
->id() . '/comment/' . $parent_comment
->id());
$child_comment = $this
->postComment(NULL, $this
->randomMachineName(), $this
->randomMachineName());
$comment = Comment::load($child_comment
->id());
$comment
->setHomepage('http://example.org/');
// Add HTML to ensure that sanitation of some fields tested directly.
$comment
->setSubject('<blink>Blinking Comment</blink>');
// Generate and test tokens.
$tests = array();
$tests['[comment:cid]'] = $comment
->id();
$tests['[comment:hostname]'] = $comment
->getHostname();
$tests['[comment:author]'] = Html::escape($comment
->getAuthorName());
$tests['[comment:mail]'] = $this->adminUser
->getEmail();
$tests['[comment:homepage]'] = UrlHelper::filterBadProtocol($comment
->getHomepage());
$tests['[comment:title]'] = Html::escape($comment
->getSubject());
$tests['[comment:body]'] = $comment->comment_body->processed;
$tests['[comment:langcode]'] = $comment
->language()
->getId();
$tests['[comment:url]'] = $comment
->url('canonical', $url_options + array(
'fragment' => 'comment-' . $comment
->id(),
));
$tests['[comment:edit-url]'] = $comment
->url('edit-form', $url_options);
$tests['[comment:created]'] = \Drupal::service('date.formatter')
->format($comment
->getCreatedTime(), 'medium', array(
'langcode' => $language_interface
->getId(),
));
$tests['[comment:created:since]'] = \Drupal::service('date.formatter')
->formatTimeDiffSince($comment
->getCreatedTime(), array(
'langcode' => $language_interface
->getId(),
));
$tests['[comment:changed:since]'] = \Drupal::service('date.formatter')
->formatTimeDiffSince($comment
->getChangedTimeAcrossTranslations(), array(
'langcode' => $language_interface
->getId(),
));
$tests['[comment:parent:cid]'] = $comment
->hasParentComment() ? $comment
->getParentComment()
->id() : NULL;
$tests['[comment:parent:title]'] = $parent_comment
->getSubject();
$tests['[comment:entity]'] = Html::escape($node
->getTitle());
// Test node specific tokens.
$tests['[comment:entity:nid]'] = $comment
->getCommentedEntityId();
$tests['[comment:entity:title]'] = Html::escape($node
->getTitle());
$tests['[comment:author:uid]'] = $comment
->getOwnerId();
$tests['[comment:author:name]'] = Html::escape($this->adminUser
->getDisplayName());
$base_bubbleable_metadata = BubbleableMetadata::createFromObject($comment);
$metadata_tests = [];
$metadata_tests['[comment:cid]'] = $base_bubbleable_metadata;
$metadata_tests['[comment:hostname]'] = $base_bubbleable_metadata;
$bubbleable_metadata = clone $base_bubbleable_metadata;
$bubbleable_metadata
->addCacheableDependency($this->adminUser);
$metadata_tests['[comment:author]'] = $bubbleable_metadata;
$bubbleable_metadata = clone $base_bubbleable_metadata;
$bubbleable_metadata
->addCacheableDependency($this->adminUser);
$metadata_tests['[comment:mail]'] = $bubbleable_metadata;
$metadata_tests['[comment:homepage]'] = $base_bubbleable_metadata;
$metadata_tests['[comment:title]'] = $base_bubbleable_metadata;
$metadata_tests['[comment:body]'] = $base_bubbleable_metadata;
$metadata_tests['[comment:langcode]'] = $base_bubbleable_metadata;
$metadata_tests['[comment:url]'] = $base_bubbleable_metadata;
$metadata_tests['[comment:edit-url]'] = $base_bubbleable_metadata;
$bubbleable_metadata = clone $base_bubbleable_metadata;
$metadata_tests['[comment:created]'] = $bubbleable_metadata
->addCacheTags([
'rendered',
]);
$bubbleable_metadata = clone $base_bubbleable_metadata;
$metadata_tests['[comment:created:since]'] = $bubbleable_metadata
->setCacheMaxAge(0);
$bubbleable_metadata = clone $base_bubbleable_metadata;
$metadata_tests['[comment:changed:since]'] = $bubbleable_metadata
->setCacheMaxAge(0);
$bubbleable_metadata = clone $base_bubbleable_metadata;
$metadata_tests['[comment:parent:cid]'] = $bubbleable_metadata
->addCacheTags([
'comment:1',
]);
$metadata_tests['[comment:parent:title]'] = $bubbleable_metadata;
$bubbleable_metadata = clone $base_bubbleable_metadata;
$metadata_tests['[comment:entity]'] = $bubbleable_metadata
->addCacheTags([
'node:2',
]);
// Test node specific tokens.
$metadata_tests['[comment:entity:nid]'] = $bubbleable_metadata;
$metadata_tests['[comment:entity:title]'] = $bubbleable_metadata;
$bubbleable_metadata = clone $base_bubbleable_metadata;
$metadata_tests['[comment:author:uid]'] = $bubbleable_metadata
->addCacheTags([
'user:2',
]);
$metadata_tests['[comment:author:name]'] = $bubbleable_metadata;
// Test to make sure that we generated something for each token.
$this
->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');
foreach ($tests as $input => $expected) {
$bubbleable_metadata = new BubbleableMetadata();
$output = $token_service
->replace($input, array(
'comment' => $comment,
), array(
'langcode' => $language_interface
->getId(),
), $bubbleable_metadata);
$this
->assertEqual($output, $expected, new FormattableMarkup('Comment token %token replaced.', [
'%token' => $input,
]));
$this
->assertEqual($bubbleable_metadata, $metadata_tests[$input]);
}
// Test anonymous comment author.
$author_name = 'This is a random & " > string';
$comment
->setOwnerId(0)
->setAuthorName($author_name);
$input = '[comment:author]';
$output = $token_service
->replace($input, array(
'comment' => $comment,
), array(
'langcode' => $language_interface
->getId(),
));
$this
->assertEqual($output, Html::escape($author_name), format_string('Comment author token %token replaced.', array(
'%token' => $input,
)));
// Load node so comment_count gets computed.
$node = Node::load($node
->id());
// Generate comment tokens for the node (it has 2 comments, both new).
$tests = array();
$tests['[entity:comment-count]'] = 2;
$tests['[entity:comment-count-new]'] = 2;
foreach ($tests as $input => $expected) {
$output = $token_service
->replace($input, array(
'entity' => $node,
'node' => $node,
), array(
'langcode' => $language_interface
->getId(),
));
$this
->assertEqual($output, $expected, format_string('Node comment token %token replaced.', array(
'%token' => $input,
)));
}
}