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