3 namespace Drupal\Tests\entity\Unit;
5 use Drupal\Core\Entity\ContentEntityTypeInterface;
6 use Drupal\Core\Entity\EntityPublishedInterface;
7 use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
8 use Drupal\Core\Entity\EntityTypeInterface;
9 use Drupal\entity\EntityPermissionProvider;
10 use Drupal\Tests\UnitTestCase;
11 use Drupal\user\EntityOwnerInterface;
14 * @coversDefaultClass \Drupal\entity\EntityPermissionProvider
17 class EntityPermissionProviderTest extends UnitTestCase {
20 * The entity permission provider.
22 * @var \Drupal\entity\EntityPermissionProviderInterface
24 protected $permissionProvider;
29 protected function setUp() {
32 $entity_type_bundle_info = $this->prophesize(EntityTypeBundleInfoInterface::class);
33 $entity_type_bundle_info->getBundleInfo('white_entity')->willReturn([
34 'first' => ['label' => 'First'],
35 'second' => ['label' => 'Second'],
37 $entity_type_bundle_info->getBundleInfo('black_entity')->willReturn([
38 'third' => ['label' => 'Third'],
40 $entity_type_bundle_info->getBundleInfo('pink_entity')->willReturn([
41 'third' => ['label' => 'Third'],
43 $this->permissionProvider = new EntityPermissionProvider($entity_type_bundle_info->reveal());
44 $this->permissionProvider->setStringTranslation($this->getStringTranslationStub());
48 * @covers ::buildPermissions
50 * @dataProvider entityTypeProvider
52 public function testBuildPermissions(EntityTypeInterface $entity_type, array $expected_permissions) {
53 $permissions = $this->permissionProvider->buildPermissions($entity_type);
54 $this->assertEquals(array_keys($expected_permissions), array_keys($permissions));
55 foreach ($permissions as $name => $permission) {
56 $this->assertEquals('entity_module_test', $permission['provider']);
57 $this->assertEquals($expected_permissions[$name], $permission['title']);
62 * Data provider for testBuildPermissions().
65 * A list of testBuildPermissions method arguments.
67 public function entityTypeProvider() {
69 // Content entity type.
70 $entity_type = $this->prophesize(ContentEntityTypeInterface::class);
71 $entity_type->getProvider()->willReturn('entity_module_test');
72 $entity_type->id()->willReturn('green_entity');
73 $entity_type->getSingularLabel()->willReturn('green entity');
74 $entity_type->getPluralLabel()->willReturn('green entities');
75 $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(FALSE);
76 $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(FALSE);
77 $entity_type->getPermissionGranularity()->willReturn('entity_type');
78 $expected_permissions = [
79 'administer green_entity' => 'Administer green entities',
80 'access green_entity overview' => 'Access the green entities overview page',
81 'create green_entity' => 'Create green entities',
82 'update green_entity' => 'Update green entities',
83 'delete green_entity' => 'Delete green entities',
84 'view green_entity' => 'View green entities',
86 $data[] = [$entity_type->reveal(), $expected_permissions];
88 // Content entity type with owner.
89 $entity_type = $this->prophesize(ContentEntityTypeInterface::class);
90 $entity_type->getProvider()->willReturn('entity_module_test');
91 $entity_type->id()->willReturn('blue_entity');
92 $entity_type->getSingularLabel()->willReturn('blue entity');
93 $entity_type->getPluralLabel()->willReturn('blue entities');
94 $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(TRUE);
95 $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(FALSE);
96 $entity_type->getPermissionGranularity()->willReturn('entity_type');
97 $expected_permissions = [
98 'administer blue_entity' => 'Administer blue entities',
99 'access blue_entity overview' => 'Access the blue entities overview page',
100 'create blue_entity' => 'Create blue entities',
101 'update any blue_entity' => 'Update any blue entity',
102 'update own blue_entity' => 'Update own blue entities',
103 'delete any blue_entity' => 'Delete any blue entity',
104 'delete own blue_entity' => 'Delete own blue entities',
105 'view blue_entity' => 'View blue entities',
107 $data[] = [$entity_type->reveal(), $expected_permissions];
109 // Content entity type with bundles.
110 $entity_type = $this->prophesize(ContentEntityTypeInterface::class);
111 $entity_type->getProvider()->willReturn('entity_module_test');
112 $entity_type->id()->willReturn('white_entity');
113 $entity_type->getSingularLabel()->willReturn('white entity');
114 $entity_type->getPluralLabel()->willReturn('white entities');
115 $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(FALSE);
116 $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(FALSE);
117 $entity_type->getPermissionGranularity()->willReturn('bundle');
118 $expected_permissions = [
119 'administer white_entity' => 'Administer white entities',
120 'access white_entity overview' => 'Access the white entities overview page',
121 'create first white_entity' => 'First: Create white entities',
122 'update first white_entity' => 'First: Update white entities',
123 'delete first white_entity' => 'First: Delete white entities',
124 'create second white_entity' => 'Second: Create white entities',
125 'update second white_entity' => 'Second: Update white entities',
126 'delete second white_entity' => 'Second: Delete white entities',
127 'view white_entity' => 'View white entities',
129 $data[] = [$entity_type->reveal(), $expected_permissions];
131 // Content entity type with bundles and owner.
132 $entity_type = $this->prophesize(ContentEntityTypeInterface::class);
133 $entity_type->getProvider()->willReturn('entity_module_test');
134 $entity_type->id()->willReturn('black_entity');
135 $entity_type->getSingularLabel()->willReturn('black entity');
136 $entity_type->getPluralLabel()->willReturn('black entities');
137 $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(TRUE);
138 $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(FALSE);
139 $entity_type->getPermissionGranularity()->willReturn('bundle');
140 $expected_permissions = [
141 'administer black_entity' => 'Administer black entities',
142 'access black_entity overview' => 'Access the black entities overview page',
143 'create third black_entity' => 'Third: Create black entities',
144 'update any third black_entity' => 'Third: Update any black entity',
145 'update own third black_entity' => 'Third: Update own black entities',
146 'delete any third black_entity' => 'Third: Delete any black entity',
147 'delete own third black_entity' => 'Third: Delete own black entities',
148 'view black_entity' => 'View black entities',
150 $data[] = [$entity_type->reveal(), $expected_permissions];
152 // Content entity type with bundles and owner and entity published.
153 $entity_type = $this->prophesize(ContentEntityTypeInterface::class);
154 $entity_type->getProvider()->willReturn('entity_module_test');
155 $entity_type->id()->willReturn('pink_entity');
156 $entity_type->getSingularLabel()->willReturn('pink entity');
157 $entity_type->getPluralLabel()->willReturn('pink entities');
158 $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(TRUE);
159 $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(TRUE);
160 $entity_type->getPermissionGranularity()->willReturn('bundle');
161 $expected_permissions = [
162 'administer pink_entity' => 'Administer pink entities',
163 'access pink_entity overview' => 'Access the pink entities overview page',
164 'view own unpublished pink_entity' => 'View own unpublished pink entities',
165 'create third pink_entity' => 'Third: Create pink entities',
166 'update any third pink_entity' => 'Third: Update any pink entity',
167 'update own third pink_entity' => 'Third: Update own pink entities',
168 'delete any third pink_entity' => 'Third: Delete any pink entity',
169 'delete own third pink_entity' => 'Third: Delete own pink entities',
170 'view pink_entity' => 'View pink entities',
172 $data[] = [$entity_type->reveal(), $expected_permissions];