UpdateSettingsFormTest.php

Same filename and directory in other branches
  1. 10 core/modules/update/tests/src/Functional/UpdateSettingsFormTest.php

Namespace

Drupal\Tests\update\Functional

File

core/modules/update/tests/src/Functional/UpdateSettingsFormTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\update\Functional;

use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\Url;
use Drupal\Tests\BrowserTestBase;

/**
 * Tests the update_settings form.
 *
 * @group update
 * @group Form
 */
class UpdateSettingsFormTest extends BrowserTestBase {
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'update',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'stark';
    
    /**
     * Tests the update_settings form.
     */
    public function testUpdateSettingsForm() : void {
        $url = Url::fromRoute('update.settings');
        // Users without the appropriate permissions should not be able to access.
        $this->drupalGet($url);
        $this->assertSession()
            ->pageTextContains('Access denied');
        // Users with permission should be able to access the form.
        $permissions = [
            'administer site configuration',
        ];
        $account = $this->setUpCurrentUser([
            'name' => 'system_admin',
            'pass' => 'adminPass',
        ], $permissions);
        $this->drupalLogin($account);
        $this->drupalGet($url);
        $this->assertSession()
            ->fieldExists('update_notify_emails');
        $values_to_enter = [
            'http://example.com',
            'sofie@example.com',
            'http://example.com/also-not-an-email-address',
            'dries@example.com',
        ];
        // Fill in `http://example.com` as the email address to notify. We expect
        // this to trigger a validation error, because it's not an email address,
        // and for the corresponding form item to be highlighted.
        $this->assertSession()
            ->fieldExists('update_notify_emails')
            ->setValue($values_to_enter[0]);
        $this->submitForm([], 'Save configuration');
        $this->assertSession()
            ->statusMessageNotExists(MessengerInterface::TYPE_STATUS);
        $this->assertSession()
            ->statusMessageNotExists(MessengerInterface::TYPE_WARNING);
        $this->assertSession()
            ->statusMessageContains('"http://example.com" is not a valid email address.', MessengerInterface::TYPE_ERROR);
        $this->assertTrue($this->assertSession()
            ->fieldExists('update_notify_emails')
            ->hasClass('error'));
        $this->assertSame([], $this->config('update.settings')
            ->get('notification.emails'));
        // Next, set an invalid email addresses, but make sure it's second entry.
        $this->assertSession()
            ->fieldExists('update_notify_emails')
            ->setValue(implode("\n", array_slice($values_to_enter, 1, 2)));
        $this->submitForm([], 'Save configuration');
        $this->assertSession()
            ->statusMessageNotExists(MessengerInterface::TYPE_STATUS);
        $this->assertSession()
            ->statusMessageNotExists(MessengerInterface::TYPE_WARNING);
        $this->assertSession()
            ->statusMessageContains('"http://example.com/also-not-an-email-address" is not a valid email address.', MessengerInterface::TYPE_ERROR);
        $this->assertTrue($this->assertSession()
            ->fieldExists('update_notify_emails')
            ->hasClass('error'));
        $this->assertSame([], $this->config('update.settings')
            ->get('notification.emails'));
        // Next, set multiple invalid email addresses, and assert the same as above
        // except the message should be adjusted now.
        $this->assertSession()
            ->fieldExists('update_notify_emails')
            ->setValue(implode("\n", $values_to_enter));
        $this->submitForm([], 'Save configuration');
        $this->assertSession()
            ->statusMessageNotExists(MessengerInterface::TYPE_STATUS);
        $this->assertSession()
            ->statusMessageNotExists(MessengerInterface::TYPE_WARNING);
        $this->assertSession()
            ->statusMessageContains('http://example.com, http://example.com/also-not-an-email-address are not valid email addresses.', MessengerInterface::TYPE_ERROR);
        $this->assertTrue($this->assertSession()
            ->fieldExists('update_notify_emails')
            ->hasClass('error'));
        $this->assertSame([], $this->config('update.settings')
            ->get('notification.emails'));
        // Now fill in valid email addresses, now the form should be saved
        // successfully.
        $this->assertSession()
            ->fieldExists('update_notify_emails')
            ->setValue("{$values_to_enter[1]}\r\n{$values_to_enter[3]}");
        $this->submitForm([], 'Save configuration');
        $this->assertSession()
            ->statusMessageContains('The configuration options have been saved.', MessengerInterface::TYPE_STATUS);
        $this->assertSession()
            ->statusMessageNotExists(MessengerInterface::TYPE_WARNING);
        $this->assertSession()
            ->statusMessageNotExists(MessengerInterface::TYPE_ERROR);
        $this->assertFalse($this->assertSession()
            ->fieldExists('update_notify_emails')
            ->hasClass('error'));
        $this->assertSame([
            'sofie@example.com',
            'dries@example.com',
        ], $this->config('update.settings')
            ->get('notification.emails'));
    }

}

Classes

Title Deprecated Summary
UpdateSettingsFormTest Tests the update_settings form.

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