X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fcontent_moderation%2Ftests%2Fsrc%2FKernel%2FModerationInformationTest.php;fp=web%2Fcore%2Fmodules%2Fcontent_moderation%2Ftests%2Fsrc%2FKernel%2FModerationInformationTest.php;h=bff2a972a5165683266c8eeb59c00813f20cf208;hp=a313bc9c3115b6b3c2efb1d136c4fa98ab4d9fce;hb=0bf8d09d2542548982e81a441b1f16e75873a04f;hpb=74df008bdbb3a11eeea356744f39b802369bda3c diff --git a/web/core/modules/content_moderation/tests/src/Kernel/ModerationInformationTest.php b/web/core/modules/content_moderation/tests/src/Kernel/ModerationInformationTest.php index a313bc9c3..bff2a972a 100644 --- a/web/core/modules/content_moderation/tests/src/Kernel/ModerationInformationTest.php +++ b/web/core/modules/content_moderation/tests/src/Kernel/ModerationInformationTest.php @@ -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)); + } + }