X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fsystem%2Ftests%2Fsrc%2FKernel%2FDateFormatAccessControlHandlerTest.php;fp=web%2Fcore%2Fmodules%2Fsystem%2Ftests%2Fsrc%2FKernel%2FDateFormatAccessControlHandlerTest.php;h=01b09dc6bbd4cbb0bd424eb199f7a787f0ea4dcd;hp=0000000000000000000000000000000000000000;hb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;hpb=aea91e65e895364e460983b890e295aa5d5540a5 diff --git a/web/core/modules/system/tests/src/Kernel/DateFormatAccessControlHandlerTest.php b/web/core/modules/system/tests/src/Kernel/DateFormatAccessControlHandlerTest.php new file mode 100644 index 000000000..01b09dc6b --- /dev/null +++ b/web/core/modules/system/tests/src/Kernel/DateFormatAccessControlHandlerTest.php @@ -0,0 +1,149 @@ +installEntitySchema('date_format'); + $this->installEntitySchema('user'); + $this->installSchema('system', 'sequences'); + $this->accessControlHandler = $this->container->get('entity_type.manager')->getAccessControlHandler('date_format'); + } + + /** + * @covers ::checkAccess + * @covers ::checkCreateAccess + * @dataProvider testAccessProvider + */ + public function testAccess($which_user, $which_entity, $view_label_access_result, $view_access_result, $update_access_result, $delete_access_result, $create_access_result) { + // We must always create user 1, so that a "normal" user has a ID >1. + $root_user = $this->drupalCreateUser(); + + if ($which_user === 'user1') { + $user = $root_user; + } + else { + $permissions = ($which_user === 'admin') + ? ['administer site configuration'] + : []; + $user = $this->drupalCreateUser($permissions); + } + + $entity_values = ($which_entity === 'unlocked') + ? ['locked' => FALSE] + : ['locked' => TRUE]; + $entity_values['id'] = $this->randomMachineName(); + $entity = DateFormat::create($entity_values); + $entity->save(); + + static::assertEquals($view_label_access_result, $this->accessControlHandler->access($entity, 'view label', $user, TRUE)); + static::assertEquals($view_access_result, $this->accessControlHandler->access($entity, 'view', $user, TRUE)); + static::assertEquals($update_access_result, $this->accessControlHandler->access($entity, 'update', $user, TRUE)); + static::assertEquals($delete_access_result, $this->accessControlHandler->access($entity, 'delete', $user, TRUE)); + static::assertEquals($create_access_result, $this->accessControlHandler->createAccess(NULL, $user, [], TRUE)); + } + + public function testAccessProvider() { + $c = new ContainerBuilder(); + $cache_contexts_manager = $this->prophesize(CacheContextsManager::class); + $cache_contexts_manager->assertValidTokens()->willReturn(TRUE); + $cache_contexts_manager->reveal(); + $c->set('cache_contexts_manager', $cache_contexts_manager); + \Drupal::setContainer($c); + + return [ + 'permissionless + unlocked' => [ + 'permissionless', + 'unlocked', + AccessResult::allowed(), + AccessResult::neutral()->addCacheContexts(['user.permissions'])->setReason("The 'administer site configuration' permission is required."), + AccessResult::neutral()->addCacheContexts(['user.permissions'])->setReason("The 'administer site configuration' permission is required.")->addCacheTags(['rendered']), + AccessResult::neutral()->addCacheContexts(['user.permissions'])->setReason("The 'administer site configuration' permission is required.")->addCacheTags(['rendered']), + AccessResult::neutral()->addCacheContexts(['user.permissions'])->setReason("The 'administer site configuration' permission is required."), + ], + 'permissionless + locked' => [ + 'permissionless', + 'locked', + AccessResult::allowed(), + AccessResult::neutral()->addCacheContexts(['user.permissions'])->setReason("The 'administer site configuration' permission is required."), + AccessResult::forbidden()->addCacheTags(['rendered'])->setReason("The DateFormat config entity is locked."), + AccessResult::forbidden()->addCacheTags(['rendered'])->setReason("The DateFormat config entity is locked."), + AccessResult::neutral()->addCacheContexts(['user.permissions'])->setReason("The 'administer site configuration' permission is required."), + ], + 'admin + unlocked' => [ + 'admin', + 'unlocked', + AccessResult::allowed(), + AccessResult::allowed()->addCacheContexts(['user.permissions']), + AccessResult::allowed()->addCacheContexts(['user.permissions'])->addCacheTags(['rendered']), + AccessResult::allowed()->addCacheContexts(['user.permissions'])->addCacheTags(['rendered']), + AccessResult::allowed()->addCacheContexts(['user.permissions']), + ], + 'admin + locked' => [ + 'admin', + 'locked', + AccessResult::allowed(), + AccessResult::allowed()->addCacheContexts(['user.permissions']), + AccessResult::forbidden()->addCacheTags(['rendered'])->setReason("The DateFormat config entity is locked."), + AccessResult::forbidden()->addCacheTags(['rendered'])->setReason("The DateFormat config entity is locked."), + AccessResult::allowed()->addCacheContexts(['user.permissions']), + ], + 'user1 + unlocked' => [ + 'user1', + 'unlocked', + AccessResult::allowed(), + AccessResult::allowed()->addCacheContexts(['user.permissions']), + AccessResult::allowed()->addCacheContexts(['user.permissions'])->addCacheTags(['rendered']), + AccessResult::allowed()->addCacheContexts(['user.permissions'])->addCacheTags(['rendered']), + AccessResult::allowed()->addCacheContexts(['user.permissions']), + ], + 'user1 + locked' => [ + 'user1', + 'locked', + AccessResult::allowed(), + AccessResult::allowed()->addCacheContexts(['user.permissions']), + AccessResult::forbidden()->addCacheTags(['rendered'])->setReason("The DateFormat config entity is locked."), + AccessResult::forbidden()->addCacheTags(['rendered'])->setReason("The DateFormat config entity is locked."), + AccessResult::allowed()->addCacheContexts(['user.permissions']), + ], + ]; + } + +}