From b9c288ba3e545af706bb41632e10741d18b239cb Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Tue, 23 May 2017 15:37:20 +0100 Subject: [PATCH] Issue #2843767 by arshadcn, Wim Leers, tstoeckler: EntityResource: Provide comprehensive test coverage for BaseFieldOverride entity + add missing access control handler --- .../BaseFieldOverrideAccessControlHandler.php | 23 ++++ .../Core/Field/Entity/BaseFieldOverride.php | 3 +- .../BaseFieldOverrideHalJsonAnonTest.php | 30 +++++ .../BaseFieldOverrideHalJsonBasicAuthTest.php | 35 ++++++ .../BaseFieldOverrideHalJsonCookieTest.php | 35 ++++++ .../BaseFieldOverrideJsonAnonTest.php | 24 ++++ .../BaseFieldOverrideJsonBasicAuthTest.php | 34 ++++++ .../BaseFieldOverrideJsonCookieTest.php | 29 +++++ .../BaseFieldOverrideResourceTestBase.php | 111 ++++++++++++++++++ 9 files changed, 323 insertions(+), 1 deletion(-) create mode 100644 core/lib/Drupal/Core/Field/BaseFieldOverrideAccessControlHandler.php create mode 100644 core/modules/hal/tests/src/Functional/EntityResource/BaseFieldOverride/BaseFieldOverrideHalJsonAnonTest.php create mode 100644 core/modules/hal/tests/src/Functional/EntityResource/BaseFieldOverride/BaseFieldOverrideHalJsonBasicAuthTest.php create mode 100644 core/modules/hal/tests/src/Functional/EntityResource/BaseFieldOverride/BaseFieldOverrideHalJsonCookieTest.php create mode 100644 core/modules/rest/tests/src/Functional/EntityResource/BaseFieldOverride/BaseFieldOverrideJsonAnonTest.php create mode 100644 core/modules/rest/tests/src/Functional/EntityResource/BaseFieldOverride/BaseFieldOverrideJsonBasicAuthTest.php create mode 100644 core/modules/rest/tests/src/Functional/EntityResource/BaseFieldOverride/BaseFieldOverrideJsonCookieTest.php create mode 100644 core/modules/rest/tests/src/Functional/EntityResource/BaseFieldOverride/BaseFieldOverrideResourceTestBase.php diff --git a/core/lib/Drupal/Core/Field/BaseFieldOverrideAccessControlHandler.php b/core/lib/Drupal/Core/Field/BaseFieldOverrideAccessControlHandler.php new file mode 100644 index 000000000000..a1e734b46842 --- /dev/null +++ b/core/lib/Drupal/Core/Field/BaseFieldOverrideAccessControlHandler.php @@ -0,0 +1,23 @@ +orIf(AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getTargetEntityTypeId() . ' fields')); + } + +} diff --git a/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php b/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php index c2d0cb5ddbad..f20f3a503be9 100644 --- a/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php +++ b/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php @@ -16,7 +16,8 @@ use Drupal\Core\Field\FieldException; * id = "base_field_override", * label = @Translation("Base field override"), * handlers = { - * "storage" = "Drupal\Core\Field\BaseFieldOverrideStorage" + * "storage" = "Drupal\Core\Field\BaseFieldOverrideStorage", + * "access" = "Drupal\Core\Field\BaseFieldOverrideAccessControlHandler", * }, * config_prefix = "base_field_override", * entity_keys = { diff --git a/core/modules/hal/tests/src/Functional/EntityResource/BaseFieldOverride/BaseFieldOverrideHalJsonAnonTest.php b/core/modules/hal/tests/src/Functional/EntityResource/BaseFieldOverride/BaseFieldOverrideHalJsonAnonTest.php new file mode 100644 index 000000000000..552437a40162 --- /dev/null +++ b/core/modules/hal/tests/src/Functional/EntityResource/BaseFieldOverride/BaseFieldOverrideHalJsonAnonTest.php @@ -0,0 +1,30 @@ +grantPermissionsToTestedRole(['administer node fields']); + } + + /** + * {@inheritdoc} + */ + protected function createEntity() { + $camelids = NodeType::create([ + 'name' => 'Camelids', + 'type' => 'camelids', + ]); + $camelids->save(); + + $entity = BaseFieldOverride::create([ + 'field_name' => 'promote', + 'entity_type' => 'node', + 'bundle' => 'camelids', + ]); + $entity->save(); + + return $entity; + } + + /** + * {@inheritdoc} + */ + protected function getExpectedNormalizedEntity() { + return [ + 'bundle' => 'camelids', + 'default_value' => [], + 'default_value_callback' => '', + 'dependencies' => [ + 'config' => [ + 'node.type.camelids', + ], + ], + 'description' => '', + 'entity_type' => 'node', + 'field_name' => 'promote', + 'field_type' => 'boolean', + 'id' => 'node.camelids.promote', + 'label' => NULL, + 'langcode' => 'en', + 'required' => FALSE, + 'settings' => [ + 'on_label' => 'On', + 'off_label' => 'Off', + ], + 'status' => TRUE, + 'translatable' => TRUE, + 'uuid' => $this->entity->uuid(), + ]; + } + + /** + * {@inheritdoc} + */ + protected function getNormalizedPostEntity() { + // @todo Update in https://www.drupal.org/node/2300677. + } + + /** + * {@inheritdoc} + */ + protected function getExpectedCacheContexts() { + return [ + 'user.permissions', + ]; + } + + /** + * {@inheritdoc} + */ + protected function getExpectedUnauthorizedAccessMessage($method) { + if ($this->config('rest.settings')->get('bc_entity_resource_permissions')) { + return parent::getExpectedUnauthorizedAccessMessage($method); + } + + return "The 'administer node fields' permission is required."; + } + +}