You are here

public function BulkFormTest::testBulkForm in Drupal 8

Same name in this branch
  1. 8 core/modules/views/tests/src/Functional/BulkFormTest.php \Drupal\Tests\views\Functional\BulkFormTest::testBulkForm()
  2. 8 core/modules/node/tests/src/Functional/Views/BulkFormTest.php \Drupal\Tests\node\Functional\Views\BulkFormTest::testBulkForm()
  3. 8 core/modules/user/tests/src/Functional/Views/BulkFormTest.php \Drupal\Tests\user\Functional\Views\BulkFormTest::testBulkForm()
Same name and namespace in other branches
  1. 9 core/modules/user/tests/src/Functional/Views/BulkFormTest.php \Drupal\Tests\user\Functional\Views\BulkFormTest::testBulkForm()

Tests the user bulk form.

File

core/modules/user/tests/src/Functional/Views/BulkFormTest.php, line 39

Class

BulkFormTest
Tests a user bulk form.

Namespace

Drupal\Tests\user\Functional\Views

Code

public function testBulkForm() {

  // Log in as a user without 'administer users'.
  $this
    ->drupalLogin($this
    ->drupalCreateUser([
    'administer permissions',
  ]));
  $user_storage = $this->container
    ->get('entity_type.manager')
    ->getStorage('user');

  // Create an user which actually can change users.
  $this
    ->drupalLogin($this
    ->drupalCreateUser([
    'administer users',
  ]));
  $this
    ->drupalGet('test-user-bulk-form');
  $result = $this
    ->cssSelect('#edit-action option');
  $this
    ->assertTrue(count($result) > 0);

  // Test submitting the page with no selection.
  $edit = [
    'action' => 'user_block_user_action',
  ];
  $this
    ->drupalPostForm('test-user-bulk-form', $edit, t('Apply to selected items'));
  $this
    ->assertText(t('No users selected.'));

  // Assign a role to a user.
  $account = $user_storage
    ->load($this->users[0]
    ->id());
  $roles = user_role_names(TRUE);
  unset($roles[RoleInterface::AUTHENTICATED_ID]);
  $role = key($roles);
  $this
    ->assertFalse($account
    ->hasRole($role), 'The user currently does not have a custom role.');
  $edit = [
    'user_bulk_form[1]' => TRUE,
    'action' => 'user_add_role_action.' . $role,
  ];
  $this
    ->drupalPostForm(NULL, $edit, t('Apply to selected items'));

  // Re-load the user and check their roles.
  $user_storage
    ->resetCache([
    $account
      ->id(),
  ]);
  $account = $user_storage
    ->load($account
    ->id());
  $this
    ->assertTrue($account
    ->hasRole($role), 'The user now has the custom role.');
  $edit = [
    'user_bulk_form[1]' => TRUE,
    'action' => 'user_remove_role_action.' . $role,
  ];
  $this
    ->drupalPostForm(NULL, $edit, t('Apply to selected items'));

  // Re-load the user and check their roles.
  $user_storage
    ->resetCache([
    $account
      ->id(),
  ]);
  $account = $user_storage
    ->load($account
    ->id());
  $this
    ->assertFalse($account
    ->hasRole($role), 'The user no longer has the custom role.');

  // Block a user using the bulk form.
  $this
    ->assertTrue($account
    ->isActive(), 'The user is not blocked.');
  $this
    ->assertRaw($account
    ->label(), 'The user is found in the table.');
  $edit = [
    'user_bulk_form[1]' => TRUE,
    'action' => 'user_block_user_action',
  ];
  $this
    ->drupalPostForm(NULL, $edit, t('Apply to selected items'));

  // Re-load the user and check their status.
  $user_storage
    ->resetCache([
    $account
      ->id(),
  ]);
  $account = $user_storage
    ->load($account
    ->id());
  $this
    ->assertTrue($account
    ->isBlocked(), 'The user is blocked.');
  $this
    ->assertNoRaw($account
    ->label(), 'The user is not found in the table.');

  // Remove the user status filter from the view.
  $view = Views::getView('test_user_bulk_form');
  $view
    ->removeHandler('default', 'filter', 'status');
  $view->storage
    ->save();

  // Ensure the anonymous user is found.
  $this
    ->drupalGet('test-user-bulk-form');
  $this
    ->assertText($this
    ->config('user.settings')
    ->get('anonymous'));

  // Attempt to block the anonymous user.
  $edit = [
    'user_bulk_form[0]' => TRUE,
    'action' => 'user_block_user_action',
  ];
  $this
    ->drupalPostForm(NULL, $edit, t('Apply to selected items'));
  $anonymous_account = $user_storage
    ->load(0);
  $this
    ->assertTrue($anonymous_account
    ->isBlocked(), 'Ensure the anonymous user got blocked.');

  // Test the list of available actions with a value that contains a dot.
  $this
    ->drupalLogin($this
    ->drupalCreateUser([
    'administer permissions',
    'administer views',
    'administer users',
  ]));
  $action_id = 'user_add_role_action.' . $role;
  $edit = [
    'options[include_exclude]' => 'exclude',
    "options[selected_actions][{$action_id}]" => $action_id,
  ];
  $this
    ->drupalPostForm('admin/structure/views/nojs/handler/test_user_bulk_form/default/field/user_bulk_form', $edit, t('Apply'));
  $this
    ->drupalPostForm(NULL, [], t('Save'));
  $this
    ->drupalGet('test-user-bulk-form');
  $this
    ->assertNoOption('edit-action', $action_id);
  $edit['options[include_exclude]'] = 'include';
  $this
    ->drupalPostForm('admin/structure/views/nojs/handler/test_user_bulk_form/default/field/user_bulk_form', $edit, t('Apply'));
  $this
    ->drupalPostForm(NULL, [], t('Save'));
  $this
    ->drupalGet('test-user-bulk-form');
  $this
    ->assertOption('edit-action', $action_id);
}