CommentUpdateTest.php

Namespace

Drupal\Tests\comment\Functional\Update

File

core/modules/comment/tests/src/Functional/Update/CommentUpdateTest.php

View source
<?php

namespace Drupal\Tests\comment\Functional\Update;

use Drupal\FunctionalTests\Update\UpdatePathTestBase;

/**
 * Tests that comment settings are properly updated during database updates.
 *
 * @group comment
 * @group legacy
 */
class CommentUpdateTest extends UpdatePathTestBase {
    
    /**
     * {@inheritdoc}
     */
    protected function setDatabaseDumpFiles() {
        $this->databaseDumpFiles = [
            __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8-rc1.filled.standard.php.gz',
        ];
    }
    
    /**
     * Tests comment_update_8200().
     *
     * @see comment_update_8200()
     */
    public function testCommentUpdate8101() {
        // Load the 'node.article.default' entity view display config, and check
        // that component 'comment' does not contain the 'view_mode' setting.
        $config = $this->config('core.entity_view_display.node.article.default');
        $this->assertNull($config->get('content.comment.settings.view_mode'));
        // Load the 'node.forum.default' entity view display config, and check that
        // component 'comment_forum' does not contain the 'view_mode' setting.
        $config = $this->config('core.entity_view_display.node.forum.default');
        $this->assertNull($config->get('content.comment_forum.settings.view_mode'));
        // Run updates.
        $this->runUpdates();
        // Check that 'node.article.default' entity view display setting 'view_mode'
        // has the value 'default'.
        $config = $this->config('core.entity_view_display.node.article.default');
        $this->assertIdentical($config->get('content.comment.settings.view_mode'), 'default');
        // Check that 'node.forum.default' entity view display setting 'view_mode'
        // has the value 'default'.
        $config = $this->config('core.entity_view_display.node.forum.default');
        $this->assertIdentical($config->get('content.comment_forum.settings.view_mode'), 'default');
    }
    
    /**
     * Tests that the comment entity type has a 'published' entity key.
     *
     * @see comment_update_8301()
     */
    public function testPublishedEntityKey() {
        // Check that the 'published' entity key does not exist prior to the update.
        $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('comment');
        $this->assertFalse($entity_type->getKey('published'));
        // Run updates.
        $this->runUpdates();
        // Check that the entity key exists and it has the correct value.
        $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('comment');
        $this->assertEqual('status', $entity_type->getKey('published'));
        // Check that the {comment_field_data} table status index has been created.
        $this->assertTrue(\Drupal::database()->schema()
            ->indexExists('comment_field_data', 'comment__status_comment_type'));
    }
    
    /**
     * Tests that the comment entity type has an 'owner' entity key.
     *
     * @see comment_update_8700()
     */
    public function testOwnerEntityKey() {
        // Check that the 'owner' entity key does not exist prior to the update.
        $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('comment');
        $this->assertFalse($entity_type->getKey('owner'));
        // Run updates.
        $this->runUpdates();
        // Check that the entity key exists and it has the correct value.
        $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('comment');
        $this->assertEquals('uid', $entity_type->getKey('owner'));
    }
    
    /**
     * Tests whether the 'entity_type' and 'field_name' columns are required.
     *
     * @see comment_update_8701()
     */
    public function testCommentEntityTypeAndFieldNameRequired() {
        $database = \Drupal::database();
        $this->assertEquals(2, $database->query('SELECT count(*) FROM {comment_field_data}')
            ->fetchField());
        if ($database->driver() === 'mysql') {
            $table_description = $database->query('DESCRIBE {comment_field_data}')
                ->fetchAllAssoc('Field');
            $this->assertEquals('YES', $table_description['entity_type']->Null);
            $this->assertEquals('YES', $table_description['field_name']->Null);
        }
        $this->runUpdates();
        $this->assertEquals(2, $database->query('SELECT count(*) FROM {comment_field_data}')
            ->fetchField());
        if ($database->driver() === 'mysql') {
            $table_description = $database->query('DESCRIBE {comment_field_data}')
                ->fetchAllAssoc('Field');
            $this->assertEquals('NO', $table_description['entity_type']->Null);
            $this->assertEquals('NO', $table_description['field_name']->Null);
        }
    }
    
    /**
     * Test the update hook requirements check for 8701.
     *
     * @see comment_update_8701()
     * @see comment_requirements()
     */
    public function testCommentEntityTypeAndFieldUpdateRequirementsCheck() {
        require_once __DIR__ . '/../../../fixtures/update/drupal-8.empty-comment-fields.3052147.php';
        $this->writeSettings([
            'settings' => [
                'update_free_access' => (object) [
                    'value' => TRUE,
                    'required' => TRUE,
                ],
            ],
        ]);
        $this->drupalGet($this->updateUrl);
        $this->assertSession()
            ->pageTextContains('Errors found');
        $this->assertSession()
            ->elementContains('css', '.system-status-report__entry--error', 'The comment_update_8701() function requires that the <em class="placeholder">entity_type</em> and <em class="placeholder">field_name</em> fields have values for all comment entities.');
    }

}

Classes

Title Deprecated Summary
CommentUpdateTest Tests that comment settings are properly updated during database updates.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.