You are here

public function OnlyOneAdminSettingsTest::testConfigurationForm in Allow a content type only once (Only One) 8

Tests the configuration form, the permission and the link.

File

tests/src/Functional/OnlyOneAdminSettingsTest.php, line 29

Class

OnlyOneAdminSettingsTest
Test the onlyone_admin_settings configuration form.

Namespace

Drupal\Tests\onlyone\Functional

Code

public function testConfigurationForm() {

  // Going to the config page.
  $this
    ->drupalGet('/admin/config/content/onlyone/settings');

  // Checking that the page is not accesible for anonymous users.
  $this
    ->assertSession()
    ->statusCodeEquals(403);

  // Creating a user with the module permission.
  $account = $this
    ->drupalCreateUser([
    'administer onlyone',
    'access administration pages',
  ]);

  // Log in.
  $this
    ->drupalLogin($account);

  // Checking the module link.
  $this
    ->drupalGet('/admin/config/content');
  $this
    ->assertSession()
    ->linkByHrefExists('/admin/config/content/onlyone');

  // @TODO Check the module local task.
  // Going to the config page.
  $this
    ->drupalGet('/admin/config/content/onlyone/settings');

  // Checking that the request has succeeded.
  $this
    ->assertSession()
    ->statusCodeEquals(200);

  // Checking the page title.
  $this
    ->assertSession()
    ->elementTextContains('css', 'h1', 'Only One Settings');

  // Check that the checkbox is unchecked.
  $this
    ->assertSession()
    ->checkboxNotChecked('onlyone_new_menu_entry');

  // Form values to send (checking check checkbox).
  $edit = [
    'onlyone_new_menu_entry' => 1,
    'onlyone_redirect' => 1,
  ];

  // Sending the form.
  $this
    ->drupalPostForm(NULL, $edit, 'op');

  // Verifiying the save message.
  $this
    ->assertSession()
    ->pageTextContains('The configuration options have been saved.');

  // Getting the config factory service.
  $config_factory = $this->container
    ->get('config.factory');

  // Getting variables.
  $onlyone_new_menu_entry = $config_factory
    ->get('onlyone.settings')
    ->get('onlyone_new_menu_entry');
  $onlyone_redirect = $config_factory
    ->get('onlyone.settings')
    ->get('onlyone_redirect');

  // Verifiying that the config values are stored.
  $this
    ->assertTrue($onlyone_new_menu_entry, 'The configuration value for onlyone_new_menu_entry should be TRUE.');
  $this
    ->assertTrue($onlyone_redirect, 'The configuration value for onlyone_redirect should be TRUE.');

  // Form values to send (checking uncheck checkbox).
  $edit = [
    'onlyone_new_menu_entry' => 0,
    'onlyone_redirect' => 0,
  ];

  // Sending the form.
  $this
    ->drupalPostForm(NULL, $edit, 'op');

  // Getting variables.
  $onlyone_new_menu_entry = $config_factory
    ->get('onlyone.settings')
    ->get('onlyone_new_menu_entry');
  $onlyone_redirect = $config_factory
    ->get('onlyone.settings')
    ->get('onlyone_redirect');

  // Verifiying that the config values are stored.
  $this
    ->assertFalse($onlyone_new_menu_entry, 'The configuration value for onlyone_new_menu_entry should be FALSE.');
  $this
    ->assertFalse($onlyone_redirect, 'The configuration value for onlyone_redirect should be FALSE.');
}