role_expire-8.x-1.x-dev/tests/src/Functional/UiRoleExpireTest.php

tests/src/Functional/UiRoleExpireTest.php
<?php

namespace Drupal\Tests\role_expire\Functional;

use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\role_expire\Traits\AssertRoleExpireTrait;

/**
 * Tests that the Role expire interface is available.
 *
 * @code
 * vendor/bin/phpunit ../modules/role_expire/tests/src/Functional/UiRoleExpireTest.php
 * @endcode
 *
 * @group role_expire
 *
 * Remember: each test run on a separate Drupal instance.
 *
 * https://www.drupal.org/docs/8/testing/types-of-tests-in-drupal-8
 * https://www.drupal.org/docs/8/phpunit/phpunit-browser-test-tutorial
 * http://www.pixelite.co.nz/article/writing-phpunit-tests-for-your-custom-modules-in-drupal-8/
 * https://www.drupal.org/docs/8/api/configuration-api/configuration-schemametadata
 * https://api.drupal.org/api/drupal/vendor%21behat%21mink%21src%21Element%21DocumentElement.php/class/DocumentElement/8.6.x
 * The rules module has a lot of tests that can serve as an example.
 * Example: UiPageTest.php.
 */
class UiRoleExpireTest extends BrowserTestBase {

  use AssertRoleExpireTrait;

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = ['role_expire'];

  /**
   * Default theme.
   *
   * @var string
   */
  protected $defaultTheme = 'stark';

  /**
   * Tests that users can assign a default role after a role expires.
   */
  public function testRoleExpireAdminPage(): void {
    $account = $this->drupalCreateUser(['administer role expire']);
    $this->drupalLogin($account);

    $this->drupalGet('admin/config/people/role-expire');
    $this->assertSession()->statusCodeEquals(200);

    // Test that we can set default roles after a roles expires.
    $this->assertSession()->pageTextContains('Role to assign after the role');
  }

  /**
   * Tests that users can assign an expiration date/time on user roles.
   */
  public function testRoleExpireEditUserFields(): void {
    $account = $this->drupalCreateUser(['edit users role expire']);
    $this->drupalLogin($account);

    $this->drupalGet('user/' . $account->id() . '/edit');
    $this->assertSession()->statusCodeEquals(200);

    // Test that we can set expiration for user roles.
    $this->assertSession()->pageTextContains('role expiration date/time');
  }

  /**
   * Tests that users can assign a default expiration date/time on roles.
   */
  public function testRoleExpireEditRoleFields(): void {
    $account = $this->drupalCreateUser(['administer permissions', 'edit role expire default duration']);
    $this->drupalLogin($account);

    $this->drupalGet('admin/people/roles/manage/anonymous');
    $this->assertSession()->statusCodeEquals(200);

    // Test that the default duration field is available.
    $this->assertSession()->pageTextContains('Default duration for the role');
  }

  /**
   * Tests users can assign default roles to assign after each role expires.
   */
  public function testRoleExpireAdminPageAction(): void {
    $account = $this->drupalCreateUser(['administer permissions', 'administer role expire']);
    $this->drupalLogin($account);

    // Create two roles.
    $this->createRoleWithOptionalExpirationUi('test role', 'test_role');
    $this->createRoleWithOptionalExpirationUi('test role two', 'test_role_two');

    // We assign a role to assign after each role expires.
    $test_def = 'test_role_two';
    $test_two_def = 'test_role';
    $this->drupalGet('admin/config/people/role-expire');
    $this->getSession()->getPage()->selectFieldOption('edit-test-role', $test_def);
    $this->getSession()->getPage()->selectFieldOption('edit-test-role-two', $test_two_def);
    $this->getSession()->getPage()->pressButton('Save configuration');
    $this->assertSession()->statusCodeEquals(200);

    $this->drupalGet('admin/config/people/role-expire');
    $this->assertSession()->statusCodeEquals(200);

    $stored_value = $this->getSession()->getPage()->findField('edit-test-role')->getValue();
    $this->assertEquals($test_def, $stored_value);

    $stored_value = $this->getSession()->getPage()->findField('edit-test-role-two')->getValue();
    $this->assertEquals($test_two_def, $stored_value);
  }

  /**
   * Tests that users can disable expiration for specific roles.
   */
  public function testRoleExpireAdminPageActionDisable(): void {
    $account = $this->drupalCreateUser(['administer permissions', 'administer role expire', 'edit users role expire']);
    $this->drupalLogin($account);

    // Create two roles.
    $this->createRoleWithOptionalExpirationUi('test role', 'test_role');
    $this->createRoleWithOptionalExpirationUi('test role two', 'test_role_two');

    // First role enabled and second one disabled.
    $test_def = 1;
    $test_two_def = 0;
    $this->drupalGet('admin/config/people/role-expire');
    $this->getSession()->getPage()->checkField('edit-disable-test-role');
    $this->getSession()->getPage()->uncheckField('edit-disable-test-role-two');

    $this->getSession()->getPage()->pressButton('Save configuration');
    $this->assertSession()->statusCodeEquals(200);

    $this->drupalGet('admin/config/people/role-expire');
    $this->assertSession()->statusCodeEquals(200);

    $stored_value = $this->getSession()->getPage()->findField('edit-disable-test-role')->getValue();
    $this->assertEquals($test_def, $stored_value);

    $stored_value = $this->getSession()->getPage()->findField('edit-disable-test-role-two')->getValue();
    $this->assertEquals($test_two_def, $stored_value);

    // Assign both roles to our user.
    $this->drupalGet('user/' . $account->id() . '/edit');
    $this->getSession()->getPage()->checkField('edit-roles-test-role');
    $this->getSession()->getPage()->checkField('edit-roles-test-role-two');
    $this->getSession()->getPage()->pressButton('Save');

    // Check if role expiration disabling is working as expected.
    $this->drupalGet('user/' . $account->id() . '/edit');
    $this->assertSession()->pageTextNotContains('test role role expiration date/time');
    $this->assertSession()->pageTextContains('test role two role expiration date/time');
  }

  /**
   * Tests we can add a role with default expire and assign it to a new user.
   */
  public function testRoleExpireEditUserFieldsAction(): void {
    $account = $this->drupalCreateUser(
      ['administer permissions',
        'edit users role expire',
        'edit role expire default duration',
      ]
    );
    $this->drupalLogin($account);

    // Create a role with an expiration date.
    $value_to_store = '2 days';
    $this->createRoleWithOptionalExpirationUi('test role', 'test_role', $value_to_store);

    // Assign the role to that user.
    $this->drupalGet('user/' . $account->id() . '/edit');
    $this->assertSession()->statusCodeEquals(200);
    $this->getSession()->getPage()->checkField('edit-roles-test-role');
    $this->getSession()->getPage()->pressButton('Save');

    // Check that the user has the role and it has the default expiration date.
    $expected_date = date('Y-m-d', strtotime('2 days'));
    $this->drupalGet('user/' . $account->id() . '/edit');
    $stored_value = $this->getSession()->getPage()->findField('edit-role-expire-test-role')->getValue();
    $stored_date = substr($stored_value, 0, 10);
    $this->assertEquals($expected_date, $stored_date);

    // Test that we can set expiration for user roles.
    $this->assertSession()->pageTextContains('role expiration date/time');
  }

  /**
   * Tests that users can create a role with default expiration date/time.
   */
  public function testRoleExpireEditRoleFieldsAction(): void {
    $account = $this->drupalCreateUser(['administer permissions', 'edit role expire default duration']);
    $this->drupalLogin($account);

    $value_to_store = '2 days';
    $this->createRoleWithOptionalExpirationUi('test role', 'test_role', $value_to_store);

    $this->drupalGet('admin/people/roles/manage/test_role');
    $this->assertSession()->statusCodeEquals(200);

    $stored_value = $this->getSession()->getPage()->findField('Default duration for the role')->getValue();
    $this->assertEquals($value_to_store, $stored_value);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc