View source
<?php
declare (strict_types=1);
namespace Drupal\Tests\comment\Functional;
use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\field\Entity\FieldConfig;
use Drupal\comment\Entity\CommentType;
class CommentFieldsTest extends CommentTestBase {
protected static $modules = [
'field_ui',
];
protected $defaultTheme = 'stark';
public function testCommentDefaultFields() {
$this
->drupalCreateContentType([
'type' => 'test_node_type',
]);
$this
->addDefaultCommentField('node', 'test_node_type');
$field = FieldConfig::loadByName('comment', 'comment', 'comment_body');
$this
->assertNotEmpty($field, 'The comment_body field is added when a comment bundle is created');
$field
->delete();
$field_storage = FieldStorageConfig::loadByName('comment', 'comment_body');
$this
->assertInstanceOf(FieldStorageConfig::class, $field_storage);
$type_name = 'test_node_type_2';
$this
->drupalCreateContentType([
'type' => $type_name,
]);
$this
->addDefaultCommentField('node', $type_name);
$field_storage = FieldStorageConfig::loadByName('comment', 'comment_body');
$this
->assertInstanceOf(FieldStorageConfig::class, $field_storage);
$field = FieldConfig::loadByName('comment', 'comment', 'comment_body');
$this
->assertTrue(isset($field), "The comment_body field is present for comments on type {$type_name}");
$this
->addDefaultCommentField('node', 'test_node_type', 'who_likes_ponies', CommentItemInterface::CLOSED, 'who_likes_ponies');
$field = FieldConfig::load('node.test_node_type.who_likes_ponies');
$this
->assertEquals(CommentItemInterface::CLOSED, $field
->getDefaultValueLiteral()[0]['status']);
}
public function testCommentFieldDelete() {
$this
->drupalCreateContentType([
'type' => 'test_node_type',
]);
$this
->addDefaultCommentField('node', 'test_node_type');
$this
->addDefaultCommentField('node', 'test_node_type', 'comment2');
$node = $this
->drupalCreateNode([
'title' => 'Baloney',
'type' => 'test_node_type',
]);
$this
->drupalLogin($this->webUser);
$this
->drupalGet('node/' . $node->nid->value);
$elements = $this
->cssSelect('.comment-form');
$this
->assertCount(2, $elements, 'There are two comment fields on the node.');
FieldStorageConfig::loadByName('node', 'comment')
->delete();
$this
->drupalGet('node/' . $node->nid->value);
$elements = $this
->cssSelect('.comment-form');
$this
->assertCount(1, $elements, 'There is one comment field on the node.');
}
public function testCommentFieldLinksNonDefaultName() {
$this
->drupalCreateContentType([
'type' => 'test_node_type',
]);
$this
->addDefaultCommentField('node', 'test_node_type', 'comment2');
$web_user2 = $this
->drupalCreateUser([
'access comments',
'post comments',
'create article content',
'edit own comments',
'skip comment approval',
'access content',
]);
$node = $this
->drupalCreateNode([
'title' => 'Baloney',
'type' => 'test_node_type',
]);
$this
->drupalLogin($web_user2);
$this
->drupalGet($node
->toUrl());
$this
->drupalLogout();
$this
->drupalLogin($this->webUser);
$this
->postComment($node, 'Here is a comment', '', NULL, 'comment2');
$this
->drupalLogout();
$this
->drupalLogin($web_user2);
$this->container
->get('module_installer')
->install([
'views',
], TRUE);
$this
->drupalGet('node');
$link_info = $this
->getDrupalSettings()['comment']['newCommentsLinks']['node']['comment2']['2'];
$this
->assertSame(1, $link_info['new_comment_count']);
$this
->assertSame($node
->toUrl('canonical', [
'fragment' => 'new',
])
->toString(), $link_info['first_new_comment_link']);
}
public function testCommentFieldCreate() {
$user = $this
->drupalCreateUser([
'administer user fields',
]);
$this
->drupalLogin($user);
$edit = [
'new_storage_type' => 'comment',
];
$this
->drupalGet('admin/config/people/accounts/fields/add-field');
$this
->submitForm($edit, 'Continue');
$edit = [
'label' => 'User comment',
'field_name' => 'user_comment',
];
$this
->submitForm($edit, 'Continue');
$edit = [];
$this
->submitForm($edit, 'Update settings');
$this
->assertSession()
->pageTextContains('The submitted value in the Comment type element is not allowed.');
$bundle = CommentType::create([
'id' => 'user_comment_type',
'label' => 'user_comment_type',
'description' => '',
'target_entity_type_id' => 'user',
]);
$bundle
->save();
$edit = [
'field_storage[subform][settings][comment_type]' => 'user_comment_type',
];
$this
->drupalGet('admin/config/people/accounts/add-field/user/field_user_comment');
$this
->submitForm($edit, 'Update settings');
$this
->assertSession()
->pageTextNotContains('The submitted value in the Comment type element is not allowed.');
$edit = [
'settings[per_page]' => 0,
];
$this
->drupalGet('admin/config/people/accounts/add-field/user/field_user_comment');
$this
->submitForm($edit, 'Save settings');
$this
->assertSession()
->statusMessageContains('Saved User comment configuration.', 'status');
}
}