From 608336e9252e56604b8d38dcdf7546f3ba98b310 Mon Sep 17 00:00:00 2001 From: Lee Rowlands <lee.rowlands@previousnext.com.au> Date: Thu, 23 Jul 2020 13:05:34 +1000 Subject: [PATCH] Issue #3016038 by dpi, acbramley, jibran, dww, phenaproxima, jungle, Mingsong: Unrecognised entity operation passed to Menu Link Content throws exceptions (cherry picked from commit 5920411ff90cc6e56dc52711e878d078b45fee82) --- .../MenuLinkContentAccessControlHandler.php | 3 ++ .../Unit/MenuLinkContentEntityAccessTest.php | 54 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 core/modules/menu_link_content/tests/src/Unit/MenuLinkContentEntityAccessTest.php diff --git a/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php b/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php index b663f2707194..0a7c8cc5a7b2 100644 --- a/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php +++ b/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php @@ -74,6 +74,9 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter case 'delete': return AccessResult::allowedIfHasPermission($account, 'administer menu') ->andIf(AccessResult::allowedIf(!$entity->isNew())->addCacheableDependency($entity)); + + default: + return parent::checkAccess($entity, $operation, $account); } } diff --git a/core/modules/menu_link_content/tests/src/Unit/MenuLinkContentEntityAccessTest.php b/core/modules/menu_link_content/tests/src/Unit/MenuLinkContentEntityAccessTest.php new file mode 100644 index 000000000000..ea39e96b8798 --- /dev/null +++ b/core/modules/menu_link_content/tests/src/Unit/MenuLinkContentEntityAccessTest.php @@ -0,0 +1,54 @@ +<?php + +namespace Drupal\Tests\menu_link_content\Unit; + +use Drupal\Core\Access\AccessManagerInterface; +use Drupal\Core\Access\AccessResultInterface; +use Drupal\Core\Entity\ContentEntityInterface; +use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Extension\ModuleHandlerInterface; +use Drupal\Core\Language\LanguageInterface; +use Drupal\Core\Session\AccountInterface; +use Drupal\menu_link_content\MenuLinkContentAccessControlHandler; +use Drupal\Tests\UnitTestCase; + +/** + * Tests menu link content entity access. + * + * @coversDefaultClass \Drupal\menu_link_content\MenuLinkContentAccessControlHandler + * @group menu_link_content + */ +class MenuLinkContentEntityAccessTest extends UnitTestCase { + + /** + * Tests an operation not implemented by the access control handler. + * + * @covers ::checkAccess + */ + public function testUnrecognizedOperation() { + $entityType = $this->createMock(EntityTypeInterface::class); + $accessManager = $this->createMock(AccessManagerInterface::class); + $moduleHandler = $this->createMock(ModuleHandlerInterface::class); + $moduleHandler->expects($this->any()) + ->method('invokeAll') + ->willReturn([]); + + $language = $this->createMock(LanguageInterface::class); + $language->expects($this->any()) + ->method('getId') + ->will($this->returnValue('de')); + + $entity = $this->createMock(ContentEntityInterface::class); + $entity->expects($this->any()) + ->method('language') + ->willReturn($language); + + $account = $this->createMock(AccountInterface::class); + + $accessControl = new MenuLinkContentAccessControlHandler($entityType, $accessManager); + $accessControl->setModuleHandler($moduleHandler); + $access = $accessControl->access($entity, 'not-an-op', $account, TRUE); + $this->assertInstanceOf(AccessResultInterface::class, $access); + } + +} -- GitLab