block_inactive_users-8.x-1.4/tests/src/Kernel/BlockUsersTest.php

tests/src/Kernel/BlockUsersTest.php
<?php

namespace Drupal\Tests\block_inactive_users\Kernel;

use Drupal\Core\Test\AssertMailTrait;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
use Drupal\user\Entity\User;

/**
 * Checks that automatic block of old users works as expected.
 *
 * @category Drupal
 * @package Drupal\Tests\block_inactive_users\Kernel
 * @author Rodrigue Tusse
 * @license GPL-3.0+ https://www.gnu.org/licenses/gpl-3.0.txt
 * @link https://www.drupal.org/project/block_inactive_users
 * @group block_inactive_users
 */
class BlockUsersTest extends KernelTestBase {

  use UserCreationTrait;
  use AssertMailTrait;

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = ['block_inactive_users', 'system', 'user'];

  /**
   * {@inheritdoc}
   *
   * @return void
   *   No return value.
   */
  protected function setUp() : void {
    parent::setUp();
    $this->installSchema('system', ['sequences']);
    $this->installEntitySchema('user');
    $this->installConfig(['block_inactive_users']);
  }

  /**
   * Users that haven't logged in in 3 months should be blocked.
   *
   * @return void
   *   No return value.
   */
  public function testInactiveUsers() {
    /**
* @var \Drupal\Core\Config\Config $config
*/
    $config = $this
      ->container
      ->get('config.factory')
      ->getEditable('block_inactive_users.settings');
    $config->set('block_inactive_users_include_never_accessed', TRUE);
    $config->set('block_inactive_users_exclude_roles', []);
    $config->set('block_inactive_users_idle_time', 3);
    $config->set('block_inactive_users_idle_time_unit', 'months');
    $config->save();

    $new_user = $this->createUser();
    $active = $this->createUser();
    $never_login = $this->createUser();
    $inactive = $this->createUser();

    $this->assertFalse($new_user->isBlocked());
    $this->assertFalse($active->isBlocked());
    $this->assertFalse($never_login->isBlocked());
    $this->assertFalse($inactive->isBlocked());

    /**
* @var \Drupal\Core\Database\Connection $connection
*/
    $connection = \Drupal::service('database');

    $connection->update('users_field_data')
      ->fields(
              [
                'created' => strtotime('-1 year'),
                'login' => strtotime('-5 days'),
                'access' => strtotime('-5 days'),
              ]
          )
      ->condition('uid', $active->id())
      ->execute();

    $connection->update('users_field_data')
      ->fields(
              [
                'created' => strtotime('-1 year'),
                'login' => strtotime('-120 days'),
                'access' => strtotime('-120 days'),
              ]
          )
      ->condition('uid', $inactive->id())
      ->execute();

    $connection->update('users_field_data')
      ->fields(
              [
                'created' => strtotime('-1 year'),
                'login' => NULL,
              ]
          )
      ->condition('uid', $never_login->id())
      ->execute();

    block_inactive_users_block_users();

    $new_user = User::load($new_user->id());
    $active = User::load($active->id());
    $inactive = User::load($inactive->id());
    $never_login = User::load($never_login->id());

    $this->assertFalse($new_user->isBlocked());
    $this->assertFalse($active->isBlocked());
    $this->assertTrue($inactive->isBlocked());
    $this->assertTrue($never_login->isBlocked());

    // Now test with days as the unit (e.g. 100 days).
    $config->set('block_inactive_users_idle_time', 100);
    $config->set('block_inactive_users_idle_time_unit', 'days');
    $config->save();

    // Unblock users for retest.
    $inactive->activate();
    $inactive->save();
    $never_login->activate();
    $never_login->save();

    // Set inactive user to 120 days ago (should be blocked),
    // active to 5 days ago (should not be blocked).
    $connection->update('users_field_data')
      ->fields(
              [
                'login' => strtotime('-120 days'),
                'access' => strtotime('-120 days'),
              ]
          )
      ->condition('uid', $inactive->id())
      ->execute();
    $connection->update('users_field_data')
      ->fields(
              [
                'login' => strtotime('-5 days'),
                'access' => strtotime('-5 days'),
              ]
          )
      ->condition('uid', $active->id())
      ->execute();
    // Ensure never_login user has access field set to 0 (never logged in).
    $connection->update('users_field_data')
      ->fields(
              [
                'login' => 0,
                'access' => 0,
              ]
          )
      ->condition('uid', $never_login->id())
      ->execute();

    block_inactive_users_block_users();

    $inactive = User::load($inactive->id());
    $active = User::load($active->id());
    $never_login = User::load($never_login->id());

    $this->assertTrue($inactive->isBlocked(), 'Inactive user is blocked when using days as unit.');
    $this->assertFalse($active->isBlocked(), 'Active user is not blocked when using days as unit.');
    $this->assertTrue($never_login->isBlocked(), 'Never login user is blocked when using days as unit.');

    // Verify that re-saving a blocked user does not update the
    // last access time.
    $original_last_access_time = $inactive->getLastAccessedTime();
    $inactive->save();
    $inactive = User::load($inactive->id());
    $this->assertEquals($original_last_access_time, $inactive->getLastAccessedTime());

    // Verify that re-activating a blocked user updates last access time and the
    // user is not re-blocked when we re-run the block users function.
    $inactive->activate();
    $inactive->save();
    block_inactive_users_block_users();
    $inactive = User::load($inactive->id());
    $this->assertFalse($inactive->isBlocked());
    $this->assertEquals(\Drupal::time()->getRequestTime(), $inactive->getLastAccessedTime());
  }

  /**
   * Test warning email.
   *
   * @return void
   *   No return value.
   */
  public function testWarnUsers() {
    $config = $this
      ->container
      ->get('config.factory')
      ->getEditable('block_inactive_users.settings');

    $config
      ->set('block_inactive_users_include_never_accessed', TRUE)
      ->set('block_inactive_users_exclude_roles', [])
      ->save();

    // Create unused user 1 since the module excludes user 1 from ban.
    $this->createUser();
    $warn_user = $this->createUser();

    // Create login time that falls within warning window
    // (5 days shy of 3 months).
    $last_login = strtotime('+5 days', strtotime('-3 months'));

    /**
* @var \Drupal\Core\Database\Connection $connection
*/
    $connection = \Drupal::service('database');

    $connection->update('users_field_data')
      ->fields(
              [
                'created' => strtotime('-1 year'),
                'login' => $last_login,
                'access' => $last_login,
              ]
          )
      ->condition('uid', $warn_user->id())
      ->execute();

    // Warn user.
    $this
      ->container
      ->get('block_inactive_users.deactivate_users')
      ->warn();

    // Verifiy correct email recieved.
    $site_name = $this
      ->container
      ->get('config.factory')
      ->get('system.site')
      ->get('name');

    // Confirm email send.
    $this
      ->assertMailString('subject', "Pending account block on {$site_name}", 1);
  }

}

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

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