Added Entity and Entity Reference Revisions which got dropped somewhere along the...
[yaffs-website] / web / modules / contrib / entity / tests / src / Unit / EntityPermissionProviderTest.php
1 <?php
2
3 namespace Drupal\Tests\entity\Unit;
4
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;
12
13 /**
14  * @coversDefaultClass \Drupal\entity\EntityPermissionProvider
15  * @group entity
16  */
17 class EntityPermissionProviderTest extends UnitTestCase {
18
19   /**
20    * The entity permission provider.
21    *
22    * @var \Drupal\entity\EntityPermissionProviderInterface
23    */
24   protected $permissionProvider;
25
26   /**
27    * {@inheritdoc}
28    */
29   protected function setUp() {
30     parent::setUp();
31
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'],
36     ]);
37     $entity_type_bundle_info->getBundleInfo('black_entity')->willReturn([
38       'third' => ['label' => 'Third'],
39     ]);
40     $entity_type_bundle_info->getBundleInfo('pink_entity')->willReturn([
41       'third' => ['label' => 'Third'],
42     ]);
43     $this->permissionProvider = new EntityPermissionProvider($entity_type_bundle_info->reveal());
44     $this->permissionProvider->setStringTranslation($this->getStringTranslationStub());
45   }
46
47   /**
48    * @covers ::buildPermissions
49    *
50    * @dataProvider entityTypeProvider
51    */
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']);
58     }
59   }
60
61   /**
62    * Data provider for testBuildPermissions().
63    *
64    * @return array
65    *   A list of testBuildPermissions method arguments.
66    */
67   public function entityTypeProvider() {
68     $data = [];
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->hasLinkTemplate('collection')->willReturn(FALSE);
76     $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(FALSE);
77     $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(FALSE);
78     $entity_type->getPermissionGranularity()->willReturn('entity_type');
79     $expected_permissions = [
80       'administer green_entity' => 'Administer green entities',
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',
85     ];
86     $data[] = [$entity_type->reveal(), $expected_permissions];
87
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->hasLinkTemplate('collection')->willReturn(TRUE);
95     $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(TRUE);
96     $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(FALSE);
97     $entity_type->getPermissionGranularity()->willReturn('entity_type');
98     $expected_permissions = [
99       'administer blue_entity' => 'Administer blue entities',
100       'access blue_entity overview' => 'Access the blue entities overview page',
101       'create blue_entity' => 'Create blue entities',
102       'update any blue_entity' => 'Update any blue entity',
103       'update own blue_entity' => 'Update own blue entities',
104       'delete any blue_entity' => 'Delete any blue entity',
105       'delete own blue_entity' => 'Delete own blue entities',
106       'view blue_entity' => 'View blue entities',
107     ];
108     $data[] = [$entity_type->reveal(), $expected_permissions];
109
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->hasLinkTemplate('collection')->willReturn(TRUE);
117     $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(FALSE);
118     $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(FALSE);
119     $entity_type->getPermissionGranularity()->willReturn('bundle');
120     $expected_permissions = [
121       'administer white_entity' => 'Administer white entities',
122       'access white_entity overview' => 'Access the white entities overview page',
123       'create first white_entity' => 'First: Create white entities',
124       'update first white_entity' => 'First: Update white entities',
125       'delete first white_entity' => 'First: Delete white entities',
126       'create second white_entity' => 'Second: Create white entities',
127       'update second white_entity' => 'Second: Update white entities',
128       'delete second white_entity' => 'Second: Delete white entities',
129       'view white_entity' => 'View white entities',
130       'view first white_entity' => 'First: View white entities',
131       'view second white_entity' => 'Second: View white entities',
132     ];
133     $data[] = [$entity_type->reveal(), $expected_permissions];
134
135     // Content entity type with bundles and owner.
136     $entity_type = $this->prophesize(ContentEntityTypeInterface::class);
137     $entity_type->getProvider()->willReturn('entity_module_test');
138     $entity_type->id()->willReturn('black_entity');
139     $entity_type->getSingularLabel()->willReturn('black entity');
140     $entity_type->getPluralLabel()->willReturn('black entities');
141     $entity_type->hasLinkTemplate('collection')->willReturn(TRUE);
142     $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(TRUE);
143     $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(FALSE);
144     $entity_type->getPermissionGranularity()->willReturn('bundle');
145     $expected_permissions = [
146       'administer black_entity' => 'Administer black entities',
147       'access black_entity overview' => 'Access the black entities overview page',
148       'create third black_entity' => 'Third: Create black entities',
149       'update any third black_entity' => 'Third: Update any black entity',
150       'update own third black_entity' => 'Third: Update own black entities',
151       'delete any third black_entity' => 'Third: Delete any black entity',
152       'delete own third black_entity' => 'Third: Delete own black entities',
153       'view black_entity' => 'View black entities',
154       'view third black_entity' => 'Third: View black entities',
155     ];
156     $data[] = [$entity_type->reveal(), $expected_permissions];
157
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->hasLinkTemplate('collection')->willReturn(TRUE);
165     $entity_type->entityClassImplements(EntityOwnerInterface::class)->willReturn(TRUE);
166     $entity_type->entityClassImplements(EntityPublishedInterface::class)->willReturn(TRUE);
167     $entity_type->getPermissionGranularity()->willReturn('bundle');
168     $expected_permissions = [
169       'administer pink_entity' => 'Administer pink entities',
170       'access pink_entity overview' => 'Access the pink entities overview page',
171       'view own unpublished pink_entity' => 'View own unpublished pink entities',
172       'create third pink_entity' => 'Third: Create pink entities',
173       'update any third pink_entity' => 'Third: Update any pink entity',
174       'update own third pink_entity' => 'Third: Update own pink entities',
175       'delete any third pink_entity' => 'Third: Delete any pink entity',
176       'delete own third pink_entity' => 'Third: Delete own pink entities',
177       'view pink_entity' => 'View pink entities',
178       'view third pink_entity' => 'Third: View pink entities',
179     ];
180     $data[] = [$entity_type->reveal(), $expected_permissions];
181
182     return $data;
183   }
184
185 }