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\UncacheableEntityPermissionProvider;
10 use Drupal\Tests\UnitTestCase;
11 use Drupal\user\EntityOwnerInterface;
14 * @coversDefaultClass \Drupal\entity\UncacheableEntityPermissionProvider
17 class UncacheableEntityPermissionProviderTest 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 UncacheableEntityPermissionProvider($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 any green_entity' => 'View any 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 any blue_entity' => 'View any blue entities',
106 'view own blue_entity' => 'View own blue entities',
108 $data[] = [$entity_type->reveal(), $expected_permissions];
110 // Content entity type with bundles.
111 $entity_type = $this->prophesize(ContentEntityTypeInterface::class);
112 $entity_type->getProvider()->willReturn('entity_module_test');
113 $entity_type->id()->willReturn('white_entity');
114 $entity_type->getSingularLabel()->willReturn('white entity');
115 $entity_type->getPluralLabel()->willReturn('white entities');
116 $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(FALSE);
117 $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(FALSE);
118 $entity_type->getPermissionGranularity()->willReturn('bundle');
119 $expected_permissions = [
120 'administer white_entity' => 'Administer white entities',
121 'access white_entity overview' => 'Access the white entities overview page',
122 'create first white_entity' => 'First: Create white entities',
123 'update first white_entity' => 'First: Update white entities',
124 'delete first white_entity' => 'First: Delete white entities',
125 'create second white_entity' => 'Second: Create white entities',
126 'update second white_entity' => 'Second: Update white entities',
127 'delete second white_entity' => 'Second: Delete white entities',
128 'view any white_entity' => 'View any white entities',
129 'view any first white_entity' => 'First: View any white entities',
130 'view any second white_entity' => 'Second: View any white entities',
132 $data[] = [$entity_type->reveal(), $expected_permissions];
134 // Content entity type with bundles and owner.
135 $entity_type = $this->prophesize(ContentEntityTypeInterface::class);
136 $entity_type->getProvider()->willReturn('entity_module_test');
137 $entity_type->id()->willReturn('black_entity');
138 $entity_type->getSingularLabel()->willReturn('black entity');
139 $entity_type->getPluralLabel()->willReturn('black entities');
140 $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(TRUE);
141 $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(FALSE);
142 $entity_type->getPermissionGranularity()->willReturn('bundle');
143 $expected_permissions = [
144 'administer black_entity' => 'Administer black entities',
145 'access black_entity overview' => 'Access the black entities overview page',
146 'create third black_entity' => 'Third: Create black entities',
147 'update any third black_entity' => 'Third: Update any black entity',
148 'update own third black_entity' => 'Third: Update own black entities',
149 'delete any third black_entity' => 'Third: Delete any black entity',
150 'delete own third black_entity' => 'Third: Delete own black entities',
151 'view any black_entity' => 'View any black entities',
152 'view own black_entity' => 'View own black entities',
153 'view any third black_entity' => 'Third: View any black entities',
154 'view own third black_entity' => 'Third: View own black entities',
156 $data[] = [$entity_type->reveal(), $expected_permissions];
158 // Content entity type with bundles and owner and entity published.
159 $entity_type = $this->prophesize(ContentEntityTypeInterface::class);
160 $entity_type->getProvider()->willReturn('entity_module_test');
161 $entity_type->id()->willReturn('pink_entity');
162 $entity_type->getSingularLabel()->willReturn('pink entity');
163 $entity_type->getPluralLabel()->willReturn('pink entities');
164 $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(TRUE);
165 $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(TRUE);
166 $entity_type->getPermissionGranularity()->willReturn('bundle');
167 $expected_permissions = [
168 'administer pink_entity' => 'Administer pink entities',
169 'access pink_entity overview' => 'Access the pink entities overview page',
170 'view own unpublished pink_entity' => 'View own unpublished pink entities',
171 'create third pink_entity' => 'Third: Create pink entities',
172 'update any third pink_entity' => 'Third: Update any pink entity',
173 'update own third pink_entity' => 'Third: Update own pink entities',
174 'delete any third pink_entity' => 'Third: Delete any pink entity',
175 'delete own third pink_entity' => 'Third: Delete own pink entities',
176 'view any pink_entity' => 'View any pink entities',
177 'view own pink_entity' => 'View own pink entities',
178 'view any third pink_entity' => 'Third: View any pink entities',
179 'view own third pink_entity' => 'Third: View own pink entities',
181 $data[] = [$entity_type->reveal(), $expected_permissions];