function CommentValidationTest::testValidationOfCommentOfUnpublishedNode
Same name in other branches
- 11.x core/modules/comment/tests/src/Kernel/CommentValidationTest.php \Drupal\Tests\comment\Kernel\CommentValidationTest::testValidationOfCommentOfUnpublishedNode()
Tests that comments of unpublished nodes are not valid.
File
-
core/
modules/ comment/ tests/ src/ Kernel/ CommentValidationTest.php, line 193
Class
- CommentValidationTest
- Tests comment validation constraints.
Namespace
Drupal\Tests\comment\KernelCode
public function testValidationOfCommentOfUnpublishedNode() : void {
// Create a page node type.
$this->entityTypeManager
->getStorage('node_type')
->create([
'type' => 'page',
'name' => 'page',
])
->save();
// Create a comment type.
CommentType::create([
'id' => 'comment',
'label' => 'Default comments',
'description' => 'Default comment field',
'target_entity_type_id' => 'node',
])->save();
// Add comment and entity reference comment fields.
$this->addDefaultCommentField('node', 'page', 'comment');
$this->createEntityReferenceField('node', 'page', 'entity_reference_comment', 'Entity Reference Comment', 'comment', 'default', [
'target_bundles' => [
'comment',
],
]);
$comment_admin_user = $this->drupalCreateUser([
'skip comment approval',
'post comments',
'access comments',
'access content',
'administer nodes',
'administer comments',
'bypass node access',
]);
$comment_non_admin_user = $this->drupalCreateUser([
'access comments',
'post comments',
'create page content',
'edit own comments',
'skip comment approval',
'access content',
]);
// Create a node with a comment and make it unpublished.
$node1 = $this->entityTypeManager
->getStorage('node')
->create([
'type' => 'page',
'title' => 'test 1',
'promote' => 1,
'status' => 0,
'uid' => $comment_non_admin_user->id(),
]);
$node1->save();
$comment1 = $this->entityTypeManager
->getStorage('comment')
->create([
'entity_id' => $node1->id(),
'entity_type' => 'node',
'field_name' => 'comment',
'comment_body' => $this->randomMachineName(),
]);
$comment1->save();
$this->assertInstanceOf(Comment::class, $comment1);
// Create a second published node.
/** @var \Drupal\node\Entity\Node $node2 */
$node2 = $this->entityTypeManager
->getStorage('node')
->create([
'type' => 'page',
'title' => 'test 2',
'promote' => 1,
'status' => 1,
'uid' => $comment_non_admin_user->id(),
]);
$node2->save();
// Test the validation API directly.
$this->drupalSetCurrentUser($comment_non_admin_user);
$this->assertEquals(\Drupal::currentUser()->id(), $comment_non_admin_user->id());
$node2->set('entity_reference_comment', $comment1->id());
$violations = $node2->validate();
$this->assertCount(1, $violations);
$this->assertEquals('entity_reference_comment.0.target_id', $violations[0]->getPropertyPath());
$this->assertEquals(sprintf('This entity (%s: %s) cannot be referenced.', $comment1->getEntityTypeId(), $comment1->id()), $violations[0]->getMessage());
$this->drupalSetCurrentUser($comment_admin_user);
$this->assertEquals(\Drupal::currentUser()->id(), $comment_admin_user->id());
$node2->set('entity_reference_comment', $comment1->id());
$violations = $node2->validate();
$this->assertCount(0, $violations);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.