function BulkFormTest::testBulkForm

Same name in this branch
  1. 10 core/modules/node/tests/src/Functional/Views/BulkFormTest.php \Drupal\Tests\node\Functional\Views\BulkFormTest::testBulkForm()
  2. 10 core/modules/views/tests/src/Functional/BulkFormTest.php \Drupal\Tests\views\Functional\BulkFormTest::testBulkForm()
Same name and namespace in other branches
  1. 9 core/modules/node/tests/src/Functional/Views/BulkFormTest.php \Drupal\Tests\node\Functional\Views\BulkFormTest::testBulkForm()
  2. 9 core/modules/views/tests/src/Functional/BulkFormTest.php \Drupal\Tests\views\Functional\BulkFormTest::testBulkForm()
  3. 9 core/modules/user/tests/src/Functional/Views/BulkFormTest.php \Drupal\Tests\user\Functional\Views\BulkFormTest::testBulkForm()
  4. 8.9.x core/modules/node/tests/src/Functional/Views/BulkFormTest.php \Drupal\Tests\node\Functional\Views\BulkFormTest::testBulkForm()
  5. 8.9.x core/modules/views/tests/src/Functional/BulkFormTest.php \Drupal\Tests\views\Functional\BulkFormTest::testBulkForm()
  6. 8.9.x core/modules/user/tests/src/Functional/Views/BulkFormTest.php \Drupal\Tests\user\Functional\Views\BulkFormTest::testBulkForm()
  7. 11.x core/modules/node/tests/src/Functional/Views/BulkFormTest.php \Drupal\Tests\node\Functional\Views\BulkFormTest::testBulkForm()
  8. 11.x core/modules/views/tests/src/Functional/BulkFormTest.php \Drupal\Tests\views\Functional\BulkFormTest::testBulkForm()
  9. 11.x 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 40

Class

BulkFormTest
Tests a user bulk form.

Namespace

Drupal\Tests\user\Functional\Views

Code

public function testBulkForm() : void {
  // 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 a user which actually can change users.
  $this->drupalLogin($this->drupalCreateUser([
    'administer users',
  ]));
  $this->drupalGet('test-user-bulk-form');
  $this->assertNotEmpty($this->cssSelect('#edit-action option'));
  // Test submitting the page with no selection.
  $edit = [
    'action' => 'user_block_user_action',
  ];
  $this->drupalGet('test-user-bulk-form');
  $this->submitForm($edit, 'Apply to selected items');
  $this->assertSession()
    ->pageTextContains('No users selected.');
  // Assign a role to a user.
  $account = $user_storage->load($this->users[0]
    ->id());
  $roles = Role::loadMultiple();
  unset($roles[RoleInterface::ANONYMOUS_ID]);
  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->submitForm($edit, '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->submitForm($edit, '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->assertSession()
    ->pageTextContains($account->label());
  $edit = [
    'user_bulk_form[1]' => TRUE,
    'action' => 'user_block_user_action',
  ];
  $this->submitForm($edit, '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->assertSession()
    ->pageTextNotContains($account->label());
  // 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->assertSession()
    ->pageTextContains($this->config('user.settings')
    ->get('anonymous'));
  // Attempt to block the anonymous user.
  $edit = [
    'user_bulk_form[0]' => TRUE,
    'action' => 'user_block_user_action',
  ];
  $this->submitForm($edit, '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->drupalGet('admin/structure/views/nojs/handler/test_user_bulk_form/default/field/user_bulk_form');
  $this->submitForm($edit, 'Apply');
  $this->submitForm([], 'Save');
  $this->drupalGet('test-user-bulk-form');
  $this->assertSession()
    ->optionNotExists('edit-action', $action_id);
  $edit['options[include_exclude]'] = 'include';
  $this->drupalGet('admin/structure/views/nojs/handler/test_user_bulk_form/default/field/user_bulk_form');
  $this->submitForm($edit, 'Apply');
  $this->submitForm([], 'Save');
  $this->drupalGet('test-user-bulk-form');
  $this->assertSession()
    ->optionExists('edit-action', $action_id);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.