cas-8.x-1.x-dev/tests/src/Functional/CasAutoAssignedRolesTest.php

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

declare(strict_types=1);

namespace Drupal\Tests\cas\Functional;

use Drupal\cas\CasPropertyBag;
use Drupal\user\Entity\Role;

/**
 * Tests CAS admin settings form.
 *
 * @group cas
 */
class CasAutoAssignedRolesTest extends CasBrowserTestBase {

  /**
   * Tests Standard installation profile.
   */
  public function testCasAutoAssignedRoles(): void {
    $this->drupalLogin($this->drupalCreateUser(['administer account settings']));
    $role_1 = $this->drupalCreateRole([]);
    $role_2 = $this->drupalCreateRole([]);
    $edit = [
      'user_accounts[auto_register]' => TRUE,
      'user_accounts[auto_assigned_roles_enable]' => TRUE,
      'user_accounts[auto_assigned_roles][]' => [$role_1, $role_2],
      'user_accounts[email_hostname]' => 'sample.com',
    ];
    $this->drupalGet('/admin/config/people/cas');
    $this->submitForm($edit, 'Save configuration');

    $this->assertEquals([$role_1, $role_2], $this->config('cas.settings')->get('user_accounts.auto_assigned_roles'));

    $cas_property_bag = new CasPropertyBag('test_cas_user_name');
    // Until we come up with a good way to mock the cURL request that goes to
    // the CAS server to validate the ticket, we can instead just invoke the
    // login method of the user manager service directly. Not truly a functional
    // test, but good enough for now.
    \Drupal::service('cas.user_manager')->login($cas_property_bag, 'fake_ticket_string');
    $user = user_load_by_name('test_cas_user_name');
    $this->assertTrue($user->hasRole($role_1), 'The user has the auto assigned role: ' . $role_1);
    $this->assertTrue($user->hasRole($role_2), 'The user has the auto assigned role: ' . $role_2);

    // Removing the role should remove it from our configuration as well.
    Role::load($role_2)->delete();
    $this->assertEquals([$role_1], $this->config('cas.settings')->get('user_accounts.auto_assigned_roles'));

    // If we manually remove one of the roles from the user we just logged in
    // for the first time, it should not be re-added if we log them in again.
    $user = user_load_by_name('test_cas_user_name');
    $user->removeRole($role_1);
    $user->save();
    \Drupal::service('cas.user_manager')->login($cas_property_bag, 'fake_ticket_string2');
    $this->assertFalse($user->hasRole($role_1), 'The user should not have been re-assigned role: ' . $role_1);
  }

}

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

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