View source
<?php
declare (strict_types=1);
namespace Drupal\Tests\authorization_drupal_roles\Kernel;
use Drupal\authorization\Entity\AuthorizationProfile;
use Drupal\Core\Form\FormState;
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
use Drupal\user\Entity\Role;
use Drupal\user\Entity\User;
class DrupalRolesIntegrationTest extends EntityKernelTestBase {
protected static $modules = [
'authorization',
'authorization_drupal_roles',
];
public function testGrant() : void {
$profile = AuthorizationProfile::create([
'status' => 'true',
'description' => 'test',
'id' => 'test',
'provider' => 'dummy',
'consumer' => 'authorization_drupal_roles',
]);
$consumer = $profile
->getConsumer();
$account = User::create([
'name' => 'hpotter',
]);
$account
->set('authorization_drupal_roles_roles', [
'student',
'gryffindor',
]);
$consumer
->grantSingleAuthorization($account, 'student');
$savedData = [
0 => [
'value' => 'student',
],
1 => [
'value' => 'gryffindor',
],
];
self::assertEquals($savedData, $account
->get('authorization_drupal_roles_roles')
->getValue());
self::assertEquals([
'anonymous',
'student',
], $account
->getRoles());
$consumer
->grantSingleAuthorization($account, 'wizard');
$savedData = [
0 => [
'value' => 'student',
],
1 => [
'value' => 'gryffindor',
],
2 => [
'value' => 'wizard',
],
];
self::assertEquals($account
->get('authorization_drupal_roles_roles')
->getValue(), $savedData);
}
public function testRevocation() : void {
$profile = AuthorizationProfile::create([
'status' => 'true',
'description' => 'test',
'id' => 'test',
'provider' => 'dummy',
'consumer' => 'authorization_drupal_roles',
]);
$consumer = $profile
->getConsumer();
$account = User::create([
'name' => 'hpotter',
]);
$roles_granted = [
'student',
'gryffindor',
'staff',
];
$account
->set('authorization_drupal_roles_roles', $roles_granted);
$account
->addRole('student');
$account
->addRole('gryffindor');
$account
->addRole('staff');
$active_roles = [
'staff',
];
$consumer
->revokeGrants($account, $active_roles);
self::assertEquals([
0 => [
'value' => 'staff',
],
], $account
->get('authorization_drupal_roles_roles')
->getValue());
self::assertEquals([
'anonymous',
'staff',
], $account
->getRoles());
}
public function testForm() : void {
$profile = AuthorizationProfile::create([
'status' => 'true',
'description' => 'test',
'id' => 'test',
'provider' => 'dummy',
'consumer' => 'authorization_drupal_roles',
]);
$profile
->setConsumerMappings([
[
'role' => 'test0',
],
[
'role' => 'test1',
],
[
'role' => 'test2',
],
]);
$consumer = $profile
->getConsumer();
$form = [];
$formState = new FormState();
$form = $consumer
->buildConfigurationForm($form, $formState);
self::assertStringContainsString('no settings', (string) $form['description']['#markup']);
$roleId = $this
->drupalCreateRole([]);
$form = [];
$formState = new FormState();
$row = $consumer
->buildRowForm($form, $formState, 2);
self::assertStringContainsString('test2', $row['role']['#default_value']);
self::assertArrayHasKey($roleId, $row['role']['#options']);
}
public function testFilterProposals() : void {
$profile = AuthorizationProfile::create([
'status' => 'true',
'description' => 'test',
'id' => 'test',
'provider' => 'dummy',
'consumer' => 'authorization_drupal_roles',
]);
$consumer = $profile
->getConsumer();
$proposals = [
'student' => 'student',
'user' => 'user',
];
$consumerMapping = [
'role' => 'source',
];
$result = $consumer
->filterProposals($proposals, $consumerMapping);
$this
->assertEquals($proposals, $result);
$consumerMapping = [
'role' => 'staff',
];
$result = $consumer
->filterProposals($proposals, $consumerMapping);
$this
->assertEquals([
'staff' => 'staff',
], $result);
$consumerMapping = [
'role' => 'none',
];
$result = $consumer
->filterProposals($proposals, $consumerMapping);
$this
->assertEquals([], $result);
$proposals = [];
$consumerMapping = [
'role' => 'student',
];
$result = $consumer
->filterProposals($proposals, $consumerMapping);
$this
->assertEquals([], $result);
$consumer
->createConsumerTarget('Complex ?targêt');
$role = Role::load('complex_target');
self::assertEquals('Complex ?targêt', $role
->label());
}
}