View source
<?php
namespace Drupal\Tests\feeds\Kernel\Feeds\Target;
use Drupal\feeds\Plugin\Type\Processor\ProcessorInterface;
use Drupal\Tests\feeds\Kernel\FeedsKernelTestBase;
use Drupal\user\UserInterface;
class UserRoleTest extends FeedsKernelTestBase {
public static $modules = [
'field',
'user',
'feeds',
'feeds_test_alter_source',
];
protected $feedType;
protected $userStorage;
protected $roleStorage;
protected function setUp() {
parent::setUp();
$this
->installEntitySchema('user');
$this->feedType = $this
->createFeedTypeForCsv([
'name' => 'name',
'mail' => 'mail',
'role_ids' => 'role_ids',
'role_labels' => 'role_labels',
], [
'id' => 'user_import',
'processor' => 'entity:user',
'processor_configuration' => [
'update_existing' => ProcessorInterface::UPDATE_EXISTING,
'authorize' => FALSE,
],
'mappings' => [
[
'target' => 'name',
'map' => [
'value' => 'name',
],
],
[
'target' => 'mail',
'map' => [
'value' => 'mail',
],
'unique' => [
'value' => TRUE,
],
],
],
]);
$this->userStorage = $this->container
->get('entity_type.manager')
->getStorage('user');
$this->roleStorage = $this->container
->get('entity_type.manager')
->getStorage('user_role');
}
protected function assertHasRole(UserInterface $account, $rid, $message = '') {
$this
->assertTrue($account
->hasRole($rid), $message);
}
protected function assertNotHasRole(UserInterface $account, $rid, $message = '') {
$this
->assertFalse($account
->hasRole($rid), $message);
}
protected function assertRoleCount($expected_number_of_roles, UserInterface $account, $message = '') {
$this
->assertEquals($expected_number_of_roles, count($account
->getRoles(TRUE)), $message);
}
public function testWithoutRoleCreation() {
$this
->createRole([], 'manager');
$this->feedType
->addMapping([
'target' => 'roles',
'map' => [
'target_id' => 'role_ids',
],
]);
$this->feedType
->save();
$feed = $this
->createFeed($this->feedType
->id(), [
'source' => $this
->resourcesPath() . '/csv/users_roles.csv',
]);
$feed
->import();
$account = user_load_by_name('Morticia');
$this
->assertNotHasRole($account, 'editor', 'Morticia does not have the editor role.');
$this
->assertRoleCount(0, $account, 'Morticia has no special roles.');
$account = user_load_by_name('Fester');
$this
->assertHasRole($account, 'manager', 'Fester has the manager role.');
$this
->assertRoleCount(1, $account, 'Fester has one role.');
$account = user_load_by_name('Gomez');
$this
->assertHasRole($account, 'manager', 'Gomez has the manager role.');
$this
->assertNotHasRole($account, 'tester', 'Gomez does not have the tester role.');
$this
->assertRoleCount(1, $account, 'Gomez has one role.');
$account = user_load_by_name('Pugsley');
$this
->assertRoleCount(0, $account, 'Pugsley has no special roles.');
$roles = $this->roleStorage
->loadMultiple();
$this
->assertEquals(1, count($roles), 'Only one role exists.');
}
public function testWithRoleCreation() {
$this
->createRole([], 'manager');
$this->feedType
->addMapping([
'target' => 'roles',
'map' => [
'target_id' => 'role_ids',
],
'settings' => [
'autocreate' => TRUE,
],
]);
$this->feedType
->save();
$feed = $this
->createFeed($this->feedType
->id(), [
'source' => $this
->resourcesPath() . '/csv/users_roles.csv',
]);
$feed
->import();
$account = user_load_by_name('Morticia');
$this
->assertHasRole($account, 'editor', 'Morticia has the editor role.');
$this
->assertRoleCount(1, $account, 'Morticia has one role.');
$account = user_load_by_name('Fester');
$this
->assertHasRole($account, 'manager', 'Fester has the manager role.');
$this
->assertRoleCount(1, $account, 'Fester has one role.');
$account = user_load_by_name('Gomez');
$this
->assertHasRole($account, 'manager', 'Gomez has the manager role.');
$this
->assertHasRole($account, 'tester', 'Gomez has the tester role.');
$this
->assertRoleCount(2, $account, 'Gomez has two roles.');
$account = user_load_by_name('Pugsley');
$this
->assertRoleCount(0, $account, 'Pugsley has no special roles.');
$roles = $this->roleStorage
->loadMultiple();
$this
->assertEquals(3, count($roles), 'Three roles exist.');
$this
->assertEquals('editor', $roles['editor']
->label());
$this
->assertEquals('tester', $roles['tester']
->label());
}
public function testRoleCreationUsingLabel() {
$this->feedType
->addMapping([
'target' => 'roles',
'map' => [
'target_id' => 'role_labels',
],
'settings' => [
'reference_by' => 'label',
'autocreate' => TRUE,
],
]);
$this->feedType
->save();
$feed = $this
->createFeed($this->feedType
->id(), [
'source' => $this
->resourcesPath() . '/csv/users_roles.csv',
]);
$feed
->import();
$account = user_load_by_name('Morticia');
$this
->assertHasRole($account, 'article_editor', 'Morticia got the Article Editor role.');
$this
->assertRoleCount(1, $account, 'Morticia has one role.');
$account = user_load_by_name('Gomez');
$this
->assertHasRole($account, 'account_manager', 'Gomez has the manager role.');
$this
->assertHasRole($account, 'software_tester', 'Gomez has the tester role.');
$this
->assertRoleCount(2, $account, 'Gomez has two roles.');
$roles = $this->roleStorage
->loadMultiple();
$this
->assertEquals(3, count($roles), 'Three roles exist.');
$this
->assertEquals('Article Editor', $roles['article_editor']
->label());
$this
->assertEquals('Account Manager', $roles['account_manager']
->label());
$this
->assertEquals('Software Tester', $roles['software_tester']
->label());
}
public function testImportByRoleLabels() {
$this
->createRole([], 'account_manager', 'Account Manager');
$this
->createRole([], 'software_tester', 'Software Tester');
$this->feedType
->addMapping([
'target' => 'roles',
'map' => [
'target_id' => 'role_labels',
],
'settings' => [
'reference_by' => 'label',
],
]);
$this->feedType
->save();
$feed = $this
->createFeed($this->feedType
->id(), [
'source' => $this
->resourcesPath() . '/csv/users_roles.csv',
]);
$feed
->import();
$account = user_load_by_name('Morticia');
$this
->assertNotHasRole($account, 'editor', 'Morticia does not have the editor role.');
$this
->assertRoleCount(0, $account, 'Morticia has no special roles.');
$account = user_load_by_name('Fester');
$this
->assertHasRole($account, 'account_manager', 'Fester has the manager role.');
$this
->assertRoleCount(1, $account, 'Fester has one role.');
$account = user_load_by_name('Gomez');
$this
->assertHasRole($account, 'account_manager', 'Gomez has the manager role.');
$this
->assertHasRole($account, 'software_tester', 'Gomez has the tester role.');
$this
->assertRoleCount(2, $account, 'Gomez has two roles.');
$account = user_load_by_name('Pugsley');
$this
->assertRoleCount(0, $account, 'Pugsley has no special roles.');
$roles = $this->roleStorage
->loadMultiple();
$this
->assertEquals(2, count($roles), 'Two roles exist.');
}
public function testWithAllowedRoles() {
$this
->createRole([], 'manager');
$this
->createRole([], 'editor');
$this->feedType
->addMapping([
'target' => 'roles',
'map' => [
'target_id' => 'role_ids',
],
'settings' => [
'allowed_roles' => [
'manager' => FALSE,
'editor' => 'editor',
],
'autocreate' => TRUE,
],
]);
$this->feedType
->save();
$feed = $this
->createFeed($this->feedType
->id(), [
'source' => $this
->resourcesPath() . '/csv/users_roles.csv',
]);
$feed
->import();
$account = user_load_by_name('Morticia');
$this
->assertHasRole($account, 'editor', 'Morticia has the editor role.');
$this
->assertRoleCount(1, $account, 'Morticia has one role.');
$account = user_load_by_name('Fester');
$this
->assertNotHasRole($account, 'manager', 'Fester does not have the manager role.');
$this
->assertRoleCount(0, $account, 'Fester has no special roles.');
$account = user_load_by_name('Gomez');
$this
->assertNotHasRole($account, 'manager', 'Gomez does not have the manager role.');
$this
->assertHasRole($account, 'tester', 'Gomez has the tester role.');
$this
->assertRoleCount(1, $account, 'Gomez has one role.');
}
public function testRevokeRoles() {
$this
->createRole([], 'manager');
$this
->createRole([], 'editor');
$this
->createRole([], 'tester');
$this->feedType
->addMapping([
'target' => 'roles',
'map' => [
'target_id' => 'role_ids',
],
'settings' => [
'allowed_roles' => [
'manager' => FALSE,
'editor' => 'editor',
'tester' => 'tester',
],
'revoke_roles' => TRUE,
],
]);
$this->feedType
->save();
$this->userStorage
->create([
'name' => 'Morticia',
'mail' => 'morticia@example.com',
'pass' => 'mort',
'status' => 1,
'roles' => [
'manager',
'editor',
],
])
->save();
$this->userStorage
->create([
'name' => 'Pugsley',
'mail' => 'pugsley@example.com',
'pass' => 'pugs',
'status' => 1,
'roles' => [
'manager',
'editor',
'tester',
],
])
->save();
$this->userStorage
->create([
'name' => 'Gomez',
'mail' => 'gomez@example.com',
'pass' => 'gome',
'status' => 1,
'roles' => [
'editor',
],
])
->save();
$feed = $this
->createFeed($this->feedType
->id(), [
'source' => $this
->resourcesPath() . '/csv/users_roles.csv',
]);
$feed
->import();
$account = user_load_by_name('Morticia');
$this
->assertHasRole($account, 'manager', 'Morticia still has the manager role.');
$this
->assertHasRole($account, 'editor', 'Morticia has the editor role.');
$this
->assertRoleCount(2, $account, 'Morticia has two roles.');
$account = user_load_by_name('Pugsley');
$this
->assertHasRole($account, 'manager', 'Pugsley still has the manager role.');
$this
->assertNotHasRole($account, 'editor', 'Pugsley no longer has the editor role.');
$this
->assertNotHasRole($account, 'tester', 'Pugsley no longer has the tester role.');
$this
->assertRoleCount(1, $account, 'Pugsley has one role.');
$account = user_load_by_name('Gomez');
$this
->assertNotHasRole($account, 'editor', 'Gomez no longer has the editor role.');
$this
->assertHasRole($account, 'tester', 'Gomez has the tester role.');
$this
->assertRoleCount(1, $account, 'Gomez has one role.');
}
public function testNoRevokeRoles() {
$this
->createRole([], 'manager');
$this
->createRole([], 'editor');
$this->feedType
->addMapping([
'target' => 'roles',
'map' => [
'target_id' => 'role_ids',
],
'settings' => [
'allowed_roles' => [
'manager' => FALSE,
'editor' => 'editor',
],
'revoke_roles' => FALSE,
],
]);
$this->feedType
->save();
$this->userStorage
->create([
'name' => 'Pugsley',
'mail' => 'pugsley@example.com',
'pass' => 'pugs',
'status' => 1,
'roles' => [
'manager',
'editor',
],
])
->save();
$feed = $this
->createFeed($this->feedType
->id(), [
'source' => $this
->resourcesPath() . '/csv/users_roles.csv',
]);
$feed
->import();
$account = user_load_by_name('Pugsley');
$this
->assertHasRole($account, 'manager', 'Pugsley still has the manager role.');
$this
->assertHasRole($account, 'editor', 'Pugsley still has the editor role.');
$this
->assertRoleCount(2, $account, 'Pugsley has two roles.');
}
}