RequirementsTest.php

Same filename in this branch
  1. 9 core/modules/system/tests/src/Kernel/Module/RequirementsTest.php
Same filename in other branches
  1. 10 core/modules/file/tests/src/Kernel/RequirementsTest.php
  2. 10 core/modules/mysql/tests/src/Functional/RequirementsTest.php
  3. 10 core/modules/system/tests/src/Kernel/Module/RequirementsTest.php
  4. 11.x core/modules/file/tests/src/Kernel/RequirementsTest.php
  5. 11.x core/modules/mysql/tests/src/Functional/RequirementsTest.php
  6. 11.x core/modules/system/tests/src/Kernel/Module/RequirementsTest.php

Namespace

Drupal\Tests\mysql\Functional

File

core/modules/mysql/tests/src/Functional/RequirementsTest.php

View source
<?php

namespace Drupal\Tests\mysql\Functional;

use Drupal\Core\Database\Database;
use Drupal\Tests\BrowserTestBase;

/**
 * Tests isolation level warning when the config is set in settings.php.
 *
 * @group mysql
 */
class RequirementsTest extends BrowserTestBase {
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'mysql',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'stark';
    
    /**
     * {@inheritdoc}
     */
    protected function setUp() : void {
        parent::setUp();
        // The isolation_level option is only available for MySQL.
        $connectionInfo = Database::getConnectionInfo();
        if ($connectionInfo['default']['driver'] !== 'mysql') {
            $this->markTestSkipped("This test does not support the {$connectionInfo['default']['driver']} database driver.");
        }
    }
    
    /**
     * Test the isolation level warning message on status page.
     */
    public function testIsolationLevelWarningNotDisplaying() {
        $admin_user = $this->drupalCreateUser([
            'administer site configuration',
            'access site reports',
        ]);
        $this->drupalLogin($admin_user);
        // Set the isolation level to a level that produces a warning.
        $this->writeIsolationLevelSettings('REPEATABLE READ');
        // Check the message is not a warning.
        $this->drupalGet('admin/reports/status');
        $elements = $this->xpath('//details[@class="system-status-report__entry"]//div[contains(text(), :text)]', [
            ':text' => 'For the best performance and to minimize locking issues, the READ-COMMITTED',
        ]);
        $this->assertCount(1, $elements);
        $this->assertStringStartsWith('REPEATABLE-READ', $elements[0]->getParent()
            ->getText());
        // Ensure it is a warning.
        $this->assertStringContainsString('warning', $elements[0]->getParent()
            ->getParent()
            ->find('css', 'summary')
            ->getAttribute('class'));
        // Rollback the isolation level to read committed.
        $this->writeIsolationLevelSettings('READ COMMITTED');
        // Check the message is not a warning.
        $this->drupalGet('admin/reports/status');
        $elements = $this->xpath('//details[@class="system-status-report__entry"]//div[contains(text(), :text)]', [
            ':text' => 'For the best performance and to minimize locking issues, the READ-COMMITTED',
        ]);
        $this->assertCount(1, $elements);
        $this->assertStringStartsWith('READ-COMMITTED', $elements[0]->getParent()
            ->getText());
        // Ensure it is a not a warning.
        $this->assertStringNotContainsString('warning', $elements[0]->getParent()
            ->getParent()
            ->find('css', 'summary')
            ->getAttribute('class'));
    }
    
    /**
     * Writes the isolation level in settings.php.
     *
     * @param string $isolation_level
     *   The isolation level.
     */
    private function writeIsolationLevelSettings(string $isolation_level) {
        $settings['databases']['default']['default']['init_commands'] = (object) [
            'value' => [
                'isolation' => "SET SESSION TRANSACTION ISOLATION LEVEL {$isolation_level}",
            ],
            'required' => TRUE,
        ];
        $this->writeSettings($settings);
    }

}

Classes

Title Deprecated Summary
RequirementsTest Tests isolation level warning when the config is set in settings.php.

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