From 1e7cb6ac40bcf28b17a9a20ca4861dba6cc3a39a Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Tue, 15 May 2018 09:14:15 +0100
Subject: [PATCH] Issue #2971779 by timmillwood, amateescu, alexpott, Sam152:
 Disallow moderation of internal entity types

---
 .../content_moderation/src/EntityTypeInfo.php |  2 +-
 .../tests/src/Kernel/EntityTypeInfoTest.php   | 30 +++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/core/modules/content_moderation/src/EntityTypeInfo.php b/core/modules/content_moderation/src/EntityTypeInfo.php
index 80ce9d55df52..f54943d427dd 100644
--- a/core/modules/content_moderation/src/EntityTypeInfo.php
+++ b/core/modules/content_moderation/src/EntityTypeInfo.php
@@ -130,7 +130,7 @@ public static function create(ContainerInterface $container) {
   public function entityTypeAlter(array &$entity_types) {
     foreach ($entity_types as $entity_type_id => $entity_type) {
       // The ContentModerationState entity type should never be moderated.
-      if ($entity_type->isRevisionable() && $entity_type_id != 'content_moderation_state') {
+      if ($entity_type->isRevisionable() && !$entity_type->isInternal()) {
         $entity_types[$entity_type_id] = $this->addModerationToEntityType($entity_type);
       }
     }
diff --git a/core/modules/content_moderation/tests/src/Kernel/EntityTypeInfoTest.php b/core/modules/content_moderation/tests/src/Kernel/EntityTypeInfoTest.php
index a5791c8840bb..09990fe796a8 100644
--- a/core/modules/content_moderation/tests/src/Kernel/EntityTypeInfoTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/EntityTypeInfoTest.php
@@ -61,4 +61,34 @@ public function testEntityBaseFieldInfo() {
     $this->assertTrue($base_fields['moderation_state']->isTranslatable());
   }
 
+  /**
+   * Test the correct entity types have moderation added.
+   *
+   * @covers ::entityTypeAlter
+   *
+   * @dataProvider providerTestEntityTypeAlter
+   */
+  public function testEntityTypeAlter($entity_type_id, $moderatable) {
+    $entity_types = $this->entityTypeManager->getDefinitions();
+    $this->assertSame($moderatable, $entity_types[$entity_type_id]->hasHandlerClass('moderation'));
+  }
+
+  /**
+   * Provides test data for testEntityTypeAlter().
+   *
+   * @return array
+   *   An array of test cases, where each test case is an array with the
+   *   following values:
+   *   - An entity type ID.
+   *   - Whether the entity type is moderatable or not.
+   */
+  public function providerTestEntityTypeAlter() {
+    $tests = [];
+    $tests['non_internal_non_revisionable'] = ['entity_test', FALSE];
+    $tests['non_internal_revisionable'] = ['entity_test_rev', TRUE];
+    $tests['internal_non_revisionable'] = ['entity_test_no_label', FALSE];
+    $tests['internal_revisionable'] = ['content_moderation_state', FALSE];
+    return $tests;
+  }
+
 }
-- 
GitLab