You are here

public function RestrictIpAdminUiTest::testRestrictIpAdminPage in Restrict IP 8

Same name and namespace in other branches
  1. 8.2 tests/src/Functional/RestrictIpAdminUiTest.php \Drupal\Tests\restrict_ip\Functional\RestrictIpAdminUiTest::testRestrictIpAdminPage()
  2. 3.x tests/src/Functional/RestrictIpAdminUiTest.php \Drupal\Tests\restrict_ip\Functional\RestrictIpAdminUiTest::testRestrictIpAdminPage()

* Test that the admin UI page is properly linked to, that all the required elements * exist, and that the form is working properly

File

tests/src/Functional/RestrictIpAdminUiTest.php, line 21

Class

RestrictIpAdminUiTest
@group restrict_ip

Namespace

Drupal\Tests\restrict_ip\Functional

Code

public function testRestrictIpAdminPage() {
  $account = $this
    ->drupalCreateUser([
    'administer restricted ip addresses',
    'access administration pages',
    'administer modules',
  ]);
  $this
    ->drupalLogin($account);

  // Test link exists on admin page (restrict_ip.links.menu.yml)
  $this
    ->drupalGet('admin/config');
  $this
    ->assertStatusCodeEquals(200);
  $this
    ->assertSession()
    ->pageTextContains('Administer whitelisted IP addresses and related settings');
  $this
    ->clickLink('Restrict IP');

  // Test admin page exists
  $this
    ->assertSession()
    ->addressMatches('/\\/admin\\/config\\/people\\/restrict_ip$/');
  $this
    ->assertStatusCodeEquals(200);
  $this
    ->assertSession()
    ->pageTextContains('Enter the list of allowed IP addresses below');

  // Test that enable checkbox exists
  $this
    ->assertElementExists('#edit-enable');
  $this
    ->assertElementAttributeExists('#edit-enable', 'type');
  $this
    ->assertElementAttributeContains('#edit-enable', 'type', 'checkbox');

  // Test that enable Allowed IP address textarea exists
  $this
    ->assertElementExists('#edit-address-list');
  $this
    ->assertElementAttributeExists('#edit-address-list', 'class');
  $this
    ->assertElementAttributeContains('#edit-address-list', 'class', 'form-textarea');

  // Test that enable Allowed IP address textarea exists
  $this
    ->assertElementExists('#edit-mail-address');
  $this
    ->assertElementAttributeExists('#edit-mail-address', 'type');
  $this
    ->assertElementAttributeContains('#edit-mail-address', 'type', 'text');

  // Test that the log accessess attempts checkbox doesn't exist
  $this
    ->assertSession()
    ->elementNotExists('css', '#edit-dblog');

  // Enable dblog module
  $this
    ->drupalGet('admin/modules');
  $this
    ->assertStatusCodeEquals(200);
  $this
    ->checkCheckbox('edit-modules-core-dblog-enable');
  $this
    ->click('#edit-submit');
  $this
    ->drupalGet('admin/config/people/restrict_ip');

  // Test that the log accessess attempts checkbox now exists
  $this
    ->assertElementExists('#edit-dblog');
  $this
    ->assertElementAttributeExists('#edit-dblog', 'type');
  $this
    ->assertElementAttributeContains('#edit-dblog', 'type', 'checkbox');

  // Test that allow role bypass checkbox exists
  $this
    ->assertElementExists('#edit-allow-role-bypass');
  $this
    ->assertElementAttributeExists('#edit-allow-role-bypass', 'type');
  $this
    ->assertElementAttributeContains('#edit-allow-role-bypass', 'type', 'checkbox');

  // Test that provide link to login page radio exists
  $this
    ->assertElementExists('#edit-bypass-action-provide-link-login-page');
  $this
    ->assertElementAttributeExists('#edit-bypass-action-provide-link-login-page', 'type');
  $this
    ->assertElementAttributeContains('#edit-bypass-action-provide-link-login-page', 'type', 'radio');

  // Test that redirect to login page radio exists
  $this
    ->assertElementExists('#edit-bypass-action-redirect-login-page');
  $this
    ->assertElementAttributeExists('#edit-bypass-action-redirect-login-page', 'type');
  $this
    ->assertElementAttributeContains('#edit-bypass-action-redirect-login-page', 'type', 'radio');

  // Test that check IP addresses on all paths radio exists
  $this
    ->assertElementExists('#edit-white-black-list-0');
  $this
    ->assertElementAttributeExists('#edit-white-black-list-0', 'type');
  $this
    ->assertElementAttributeContains('#edit-white-black-list-0', 'type', 'radio');

  // Test that check IP addresses on whitelisted paths radio exists
  $this
    ->assertElementExists('#edit-white-black-list-1');
  $this
    ->assertElementAttributeExists('#edit-white-black-list-1', 'type');
  $this
    ->assertElementAttributeContains('#edit-white-black-list-1', 'type', 'radio');

  // Test that check IP addresses on blacklisted paths radio exists
  $this
    ->assertElementExists('#edit-white-black-list-2');
  $this
    ->assertElementAttributeExists('#edit-white-black-list-2', 'type');
  $this
    ->assertElementAttributeContains('#edit-white-black-list-2', 'type', 'radio');

  // Test that whitelisted pages textarea exists
  $this
    ->assertElementExists('textarea#edit-page-whitelist');

  // Test that blacklisted pages textarea exists
  $this
    ->assertElementExists('textarea#edit-page-blacklist');

  // Fill in form values and submit
  $this
    ->fillTextValue('edit-address-list', '// Address 1' . PHP_EOL . '1.1.1.1' . PHP_EOL . '# Address 2' . PHP_EOL . '2.2.2.2' . PHP_EOL . '/**' . PHP_EOL . ' * Address 3' . PHP_EOL . ' */' . PHP_EOL . '3.3.3.3');
  $this
    ->fillTextValue('edit-mail-address', 'dave@example.com');
  $this
    ->checkCheckbox('edit-dblog');
  $this
    ->checkCheckbox('edit-allow-role-bypass');
  $this
    ->selectRadio('edit-bypass-action-redirect-login-page');
  $this
    ->selectRadio('edit-white-black-list-1');
  $this
    ->fillTextValue('edit-page-whitelist', 'page/1' . PHP_EOL . '/page/2');
  $this
    ->fillTextValue('edit-page-blacklist', 'page/3' . PHP_EOL . '/page/4');
  $this
    ->click('#edit-submit');

  // Check form values contain proper values
  $this
    ->assertSession()
    ->elementExists('css', '#edit-address-list');
  $this
    ->assertTextValue('edit-address-list', '1.1.1.1' . PHP_EOL . '2.2.2.2' . PHP_EOL . '3.3.3.3');
  $this
    ->assertTextValue('edit-mail-address', 'dave@example.com');
  $this
    ->assertCheckboxChecked('edit-dblog');
  $this
    ->assertCheckboxChecked('edit-allow-role-bypass');
  $this
    ->assertRadioSelected('edit-bypass-action-redirect-login-page');
}