CommentFieldsTest.php in Zircon Profile 8
Same filename and directory in other branches
Contains \Drupal\comment\Tests\CommentFieldsTest.
Namespace
Drupal\comment\TestsFile
core/modules/comment/src/Tests/CommentFieldsTest.phpView source
<?php
/**
* @file
* Contains \Drupal\comment\Tests\CommentFieldsTest.
*/
namespace Drupal\comment\Tests;
use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\field\Entity\FieldConfig;
use Drupal\comment\Entity\CommentType;
/**
* Tests fields on comments.
*
* @group comment
*/
class CommentFieldsTest extends CommentTestBase {
/**
* Install the field UI.
*
* @var array
*/
public static $modules = array(
'field_ui',
);
/**
* Tests that the default 'comment_body' field is correctly added.
*/
function testCommentDefaultFields() {
// Do not make assumptions on default node types created by the test
// installation profile, and create our own.
$this
->drupalCreateContentType(array(
'type' => 'test_node_type',
));
$this
->addDefaultCommentField('node', 'test_node_type');
// Check that the 'comment_body' field is present on the comment bundle.
$field = FieldConfig::loadByName('comment', 'comment', 'comment_body');
$this
->assertTrue(!empty($field), 'The comment_body field is added when a comment bundle is created');
$field
->delete();
// Check that the 'comment_body' field is not deleted since it is persisted
// even if it has no fields.
$field_storage = FieldStorageConfig::loadByName('comment', 'comment_body');
$this
->assertTrue($field_storage, 'The comment_body field storage was not deleted');
// Create a new content type.
$type_name = 'test_node_type_2';
$this
->drupalCreateContentType(array(
'type' => $type_name,
));
$this
->addDefaultCommentField('node', $type_name);
// Check that the 'comment_body' field exists and has an instance on the
// new comment bundle.
$field_storage = FieldStorageConfig::loadByName('comment', 'comment_body');
$this
->assertTrue($field_storage, 'The comment_body field exists');
$field = FieldConfig::loadByName('comment', 'comment', 'comment_body');
$this
->assertTrue(isset($field), format_string('The comment_body field is present for comments on type @type', array(
'@type' => $type_name,
)));
// Test adding a field that defaults to CommentItemInterface::CLOSED.
$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
->assertEqual($field
->getDefaultValueLiteral()[0]['status'], CommentItemInterface::CLOSED);
}
/**
* Tests that you can remove a comment field.
*/
public function testCommentFieldDelete() {
$this
->drupalCreateContentType(array(
'type' => 'test_node_type',
));
$this
->addDefaultCommentField('node', 'test_node_type');
// We want to test the handling of removing the primary comment field, so we
// ensure there is at least one other comment field attached to a node type
// so that comment_entity_load() runs for nodes.
$this
->addDefaultCommentField('node', 'test_node_type', 'comment2');
// Create a sample node.
$node = $this
->drupalCreateNode(array(
'title' => 'Baloney',
'type' => 'test_node_type',
));
$this
->drupalLogin($this->webUser);
$this
->drupalGet('node/' . $node->nid->value);
$elements = $this
->cssSelect('.field--type-comment');
$this
->assertEqual(2, count($elements), 'There are two comment fields on the node.');
// Delete the first comment field.
FieldStorageConfig::loadByName('node', 'comment')
->delete();
$this
->drupalGet('node/' . $node->nid->value);
$elements = $this
->cssSelect('.field--type-comment');
$this
->assertEqual(1, count($elements), 'There is one comment field on the node.');
}
/**
* Tests link building with non-default comment field names.
*/
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',
]);
// Create a sample node.
$node = $this
->drupalCreateNode([
'title' => 'Baloney',
'type' => 'test_node_type',
]);
// Go to the node first so that webuser2 see new comments.
$this
->drupalLogin($web_user2);
$this
->drupalGet($node
->urlInfo());
$this
->drupalLogout();
// Test that buildCommentedEntityLinks() does not break when the 'comment'
// field does not exist. Requires at least one comment.
$this
->drupalLogin($this->webUser);
$this
->postComment($node, 'Here is a comment', '', NULL, 'comment2');
$this
->drupalLogout();
$this
->drupalLogin($web_user2);
// We want to check the attached drupalSettings of
// \Drupal\comment\CommentLinkBuilder::buildCommentedEntityLinks. Therefore
// we need a node listing, let's use views for that.
$this->container
->get('module_installer')
->install([
'views',
], TRUE);
// We also need a router rebuild, as the router is lazily rebuild in the
// module installer.
\Drupal::service('router.builder')
->rebuild();
$this
->drupalGet('node');
$link_info = $this
->getDrupalSettings()['comment']['newCommentsLinks']['node']['comment2']['2'];
$this
->assertIdentical($link_info['new_comment_count'], 1);
$this
->assertIdentical($link_info['first_new_comment_link'], $node
->url('canonical', [
'fragment' => 'new',
]));
}
/**
* Tests creating a comment field through the interface.
*/
public function testCommentFieldCreate() {
// Create user who can administer user fields.
$user = $this
->drupalCreateUser(array(
'administer user fields',
));
$this
->drupalLogin($user);
// Create comment field in account settings.
$edit = array(
'new_storage_type' => 'comment',
'label' => 'User comment',
'field_name' => 'user_comment',
);
$this
->drupalPostForm('admin/config/people/accounts/fields/add-field', $edit, 'Save and continue');
// Try to save the comment field without selecting a comment type.
$edit = array();
$this
->drupalPostForm('admin/config/people/accounts/fields/user.user.field_user_comment/storage', $edit, t('Save field settings'));
// We should get an error message.
$this
->assertText(t('An illegal choice has been detected. Please contact the site administrator.'));
// Create a comment type for users.
$bundle = CommentType::create(array(
'id' => 'user_comment_type',
'label' => 'user_comment_type',
'description' => '',
'target_entity_type_id' => 'user',
));
$bundle
->save();
// Select a comment type and try to save again.
$edit = array(
'settings[comment_type]' => 'user_comment_type',
);
$this
->drupalPostForm('admin/config/people/accounts/fields/user.user.field_user_comment/storage', $edit, t('Save field settings'));
// We shouldn't get an error message.
$this
->assertNoText(t('An illegal choice has been detected. Please contact the site administrator.'));
}
/**
* Tests that comment module works when installed after a content module.
*/
function testCommentInstallAfterContentModule() {
// Create a user to do module administration.
$this->adminUser = $this
->drupalCreateUser(array(
'access administration pages',
'administer modules',
));
$this
->drupalLogin($this->adminUser);
// Drop default comment field added in CommentTestBase::setup().
FieldStorageConfig::loadByName('node', 'comment')
->delete();
if ($field_storage = FieldStorageConfig::loadByName('node', 'comment_forum')) {
$field_storage
->delete();
}
// Purge field data now to allow comment module to be uninstalled once the
// field has been deleted.
field_purge_batch(10);
// Uninstall the comment module.
$edit = array();
$edit['uninstall[comment]'] = TRUE;
$this
->drupalPostForm('admin/modules/uninstall', $edit, t('Uninstall'));
$this
->drupalPostForm(NULL, array(), t('Uninstall'));
$this
->rebuildContainer();
$this
->assertFalse($this->container
->get('module_handler')
->moduleExists('comment'), 'Comment module uninstalled.');
// Install core content type module (book).
$edit = array();
$edit['modules[Core][book][enable]'] = 'book';
$this
->drupalPostForm('admin/modules', $edit, t('Install'));
// Now install the comment module.
$edit = array();
$edit['modules[Core][comment][enable]'] = 'comment';
$this
->drupalPostForm('admin/modules', $edit, t('Install'));
$this
->rebuildContainer();
$this
->assertTrue($this->container
->get('module_handler')
->moduleExists('comment'), 'Comment module enabled.');
// Create nodes of each type.
$this
->addDefaultCommentField('node', 'book');
$book_node = $this
->drupalCreateNode(array(
'type' => 'book',
));
$this
->drupalLogout();
// Try to post a comment on each node. A failure will be triggered if the
// comment body is missing on one of these forms, due to postComment()
// asserting that the body is actually posted correctly.
$this->webUser = $this
->drupalCreateUser(array(
'access content',
'access comments',
'post comments',
'skip comment approval',
));
$this
->drupalLogin($this->webUser);
$this
->postComment($book_node, $this
->randomMachineName(), $this
->randomMachineName());
}
}
Classes
Name![]() |
Description |
---|---|
CommentFieldsTest | Tests fields on comments. |