Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / content_moderation / tests / src / Kernel / ModerationInformationTest.php
index a313bc9c3115b6b3c2efb1d136c4fa98ab4d9fce..bff2a972a5165683266c8eeb59c00813f20cf208 100644 (file)
@@ -2,9 +2,11 @@
 
 namespace Drupal\Tests\content_moderation\Kernel;
 
+use Drupal\entity_test\Entity\EntityTestMulRevPub;
 use Drupal\entity_test\Entity\EntityTestRev;
 use Drupal\KernelTests\KernelTestBase;
-use Drupal\workflows\Entity\Workflow;
+use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\Tests\content_moderation\Traits\ContentModerationTestTrait;
 
 /**
  * @coversDefaultClass \Drupal\content_moderation\ModerationInformation
@@ -12,10 +14,26 @@ use Drupal\workflows\Entity\Workflow;
  */
 class ModerationInformationTest extends KernelTestBase {
 
+  use ContentModerationTestTrait;
+
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['content_moderation', 'entity_test', 'user', 'workflows'];
+  public static $modules = [
+    'content_moderation',
+    'entity_test',
+    'user',
+    'workflows',
+    'language',
+    'content_translation',
+  ];
+
+  /**
+   * The moderation information service.
+   *
+   * @var \Drupal\content_moderation\ModerationInformationInterface
+   */
+  protected $moderationInformation;
 
   /**
    * {@inheritdoc}
@@ -24,8 +42,20 @@ class ModerationInformationTest extends KernelTestBase {
     parent::setUp();
 
     $this->installEntitySchema('entity_test_rev');
+    $this->installEntitySchema('entity_test_mulrevpub');
     $this->installEntitySchema('content_moderation_state');
     $this->installConfig(['content_moderation']);
+
+    $this->moderationInformation = $this->container->get('content_moderation.moderation_information');
+
+    ConfigurableLanguage::createFromLangcode('de')->save();
+
+    $workflow = $this->createEditorialWorkflow();
+    $workflow->getTypePlugin()->addEntityTypeAndBundle('entity_test_mulrevpub', 'entity_test_mulrevpub');
+    $workflow->getTypePlugin()->addEntityTypeAndBundle('entity_test_rev', 'entity_test_rev');
+    $workflow->save();
+
+    $this->container->get('content_translation.manager')->setEnabled('entity_test_mulrevpub', 'entity_test_mulrevpub', TRUE);
   }
 
   /**
@@ -33,10 +63,6 @@ class ModerationInformationTest extends KernelTestBase {
    * @covers ::getLatestRevisionId
    */
   public function testDefaultAndLatestRevisionId() {
-    $workflow = Workflow::load('editorial');
-    $workflow->getTypePlugin()->addEntityTypeAndBundle('entity_test_rev', 'entity_test_rev');
-    $workflow->save();
-
     $entity_test_rev = EntityTestRev::create([
       'name' => 'Default Revision',
       'moderation_state' => 'published',
@@ -47,18 +73,85 @@ class ModerationInformationTest extends KernelTestBase {
     $entity_test_rev->moderation_state = 'draft';
     $entity_test_rev->save();
 
-    /** @var \Drupal\content_moderation\ModerationInformationInterface $moderation_info */
-    $moderation_info = \Drupal::service('content_moderation.moderation_information');
-
     // Check that moderation information service returns the correct default
     // revision ID.
-    $default_revision_id = $moderation_info->getDefaultRevisionId('entity_test_rev', $entity_test_rev->id());
+    $default_revision_id = $this->moderationInformation->getDefaultRevisionId('entity_test_rev', $entity_test_rev->id());
     $this->assertSame(1, $default_revision_id);
 
     // Check that moderation information service returns the correct latest
     // revision ID.
-    $latest_revision_id = $moderation_info->getLatestRevisionId('entity_test_rev', $entity_test_rev->id());
+    $latest_revision_id = $this->moderationInformation->getLatestRevisionId('entity_test_rev', $entity_test_rev->id());
     $this->assertSame(2, $latest_revision_id);
   }
 
+  /**
+   * @covers ::isDefaultRevisionPublished
+   * @dataProvider isDefaultRevisionPublishedTestCases
+   */
+  public function testIsDefaultRevisionPublished($initial_state, $final_state, $initial_is_default_published, $final_is_default_published) {
+    $entity = EntityTestMulRevPub::create([
+      'moderation_state' => $initial_state,
+    ]);
+    $entity->save();
+    $this->assertEquals($initial_is_default_published, $this->moderationInformation->isDefaultRevisionPublished($entity));
+
+    $entity->moderation_state = $final_state;
+    $entity->save();
+    $this->assertEquals($final_is_default_published, $this->moderationInformation->isDefaultRevisionPublished($entity));
+  }
+
+  /**
+   * Test cases for ::testIsDefaultRevisionPublished.
+   */
+  public function isDefaultRevisionPublishedTestCases() {
+    return [
+      'Draft to draft' => [
+        'draft',
+        'draft',
+        FALSE,
+        FALSE,
+      ],
+      'Draft to published' => [
+        'draft',
+        'published',
+        FALSE,
+        TRUE,
+      ],
+      'Published to published' => [
+        'published',
+        'published',
+        TRUE,
+        TRUE,
+      ],
+      'Published to draft' => [
+        'published',
+        'draft',
+        TRUE,
+        TRUE,
+      ],
+    ];
+  }
+
+  /**
+   * @covers ::isDefaultRevisionPublished
+   */
+  public function testIsDefaultRevisionPublishedMultilingual() {
+    $entity = EntityTestMulRevPub::create([
+      'moderation_state' => 'draft',
+    ]);
+    $entity->save();
+    $this->assertEquals('draft', $entity->moderation_state->value);
+
+    $translated = $entity->addTranslation('de');
+    $translated->moderation_state = 'published';
+    $translated->save();
+    $this->assertEquals('published', $translated->moderation_state->value);
+
+    // Test a scenario where the default revision exists with the default
+    // language in a draft state and a non-default language in a published
+    // state. The method returns TRUE if any of the languages for the default
+    // revision are in a published state.
+    $this->assertEquals(TRUE, $this->moderationInformation->isDefaultRevisionPublished($entity));
+  }
+
 }