ModerationInformationTest.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. namespace Drupal\Tests\content_moderation\Kernel;
  3. use Drupal\entity_test\Entity\EntityTestMulRevPub;
  4. use Drupal\entity_test\Entity\EntityTestRev;
  5. use Drupal\KernelTests\KernelTestBase;
  6. use Drupal\language\Entity\ConfigurableLanguage;
  7. use Drupal\Tests\content_moderation\Traits\ContentModerationTestTrait;
  8. /**
  9. * @coversDefaultClass \Drupal\content_moderation\ModerationInformation
  10. * @group content_moderation
  11. */
  12. class ModerationInformationTest extends KernelTestBase {
  13. use ContentModerationTestTrait;
  14. /**
  15. * {@inheritdoc}
  16. */
  17. public static $modules = [
  18. 'content_moderation',
  19. 'entity_test',
  20. 'user',
  21. 'workflows',
  22. 'language',
  23. 'content_translation',
  24. ];
  25. /**
  26. * The moderation information service.
  27. *
  28. * @var \Drupal\content_moderation\ModerationInformationInterface
  29. */
  30. protected $moderationInformation;
  31. /**
  32. * {@inheritdoc}
  33. */
  34. protected function setUp() {
  35. parent::setUp();
  36. $this->installEntitySchema('entity_test_rev');
  37. $this->installEntitySchema('entity_test_mulrevpub');
  38. $this->installEntitySchema('content_moderation_state');
  39. $this->installConfig(['content_moderation']);
  40. $this->moderationInformation = $this->container->get('content_moderation.moderation_information');
  41. ConfigurableLanguage::createFromLangcode('de')->save();
  42. $workflow = $this->createEditorialWorkflow();
  43. $workflow->getTypePlugin()->addEntityTypeAndBundle('entity_test_mulrevpub', 'entity_test_mulrevpub');
  44. $workflow->getTypePlugin()->addEntityTypeAndBundle('entity_test_rev', 'entity_test_rev');
  45. $workflow->save();
  46. $this->container->get('content_translation.manager')->setEnabled('entity_test_mulrevpub', 'entity_test_mulrevpub', TRUE);
  47. }
  48. /**
  49. * @covers ::getDefaultRevisionId
  50. * @covers ::getLatestRevisionId
  51. */
  52. public function testDefaultAndLatestRevisionId() {
  53. $entity_test_rev = EntityTestRev::create([
  54. 'name' => 'Default Revision',
  55. 'moderation_state' => 'published',
  56. ]);
  57. $entity_test_rev->save();
  58. $entity_test_rev->name = 'Pending revision';
  59. $entity_test_rev->moderation_state = 'draft';
  60. $entity_test_rev->save();
  61. // Check that moderation information service returns the correct default
  62. // revision ID.
  63. $default_revision_id = $this->moderationInformation->getDefaultRevisionId('entity_test_rev', $entity_test_rev->id());
  64. $this->assertSame(1, $default_revision_id);
  65. // Check that moderation information service returns the correct latest
  66. // revision ID.
  67. $latest_revision_id = $this->moderationInformation->getLatestRevisionId('entity_test_rev', $entity_test_rev->id());
  68. $this->assertSame(2, $latest_revision_id);
  69. }
  70. /**
  71. * @covers ::isDefaultRevisionPublished
  72. * @dataProvider isDefaultRevisionPublishedTestCases
  73. */
  74. public function testIsDefaultRevisionPublished($initial_state, $final_state, $initial_is_default_published, $final_is_default_published) {
  75. $entity = EntityTestMulRevPub::create([
  76. 'moderation_state' => $initial_state,
  77. ]);
  78. $entity->save();
  79. $this->assertEquals($initial_is_default_published, $this->moderationInformation->isDefaultRevisionPublished($entity));
  80. $entity->moderation_state = $final_state;
  81. $entity->save();
  82. $this->assertEquals($final_is_default_published, $this->moderationInformation->isDefaultRevisionPublished($entity));
  83. }
  84. /**
  85. * Test cases for ::testIsDefaultRevisionPublished.
  86. */
  87. public function isDefaultRevisionPublishedTestCases() {
  88. return [
  89. 'Draft to draft' => [
  90. 'draft',
  91. 'draft',
  92. FALSE,
  93. FALSE,
  94. ],
  95. 'Draft to published' => [
  96. 'draft',
  97. 'published',
  98. FALSE,
  99. TRUE,
  100. ],
  101. 'Published to published' => [
  102. 'published',
  103. 'published',
  104. TRUE,
  105. TRUE,
  106. ],
  107. 'Published to draft' => [
  108. 'published',
  109. 'draft',
  110. TRUE,
  111. TRUE,
  112. ],
  113. ];
  114. }
  115. /**
  116. * @covers ::isDefaultRevisionPublished
  117. */
  118. public function testIsDefaultRevisionPublishedMultilingual() {
  119. $entity = EntityTestMulRevPub::create([
  120. 'moderation_state' => 'draft',
  121. ]);
  122. $entity->save();
  123. $this->assertEquals('draft', $entity->moderation_state->value);
  124. $translated = $entity->addTranslation('de');
  125. $translated->moderation_state = 'published';
  126. $translated->save();
  127. $this->assertEquals('published', $translated->moderation_state->value);
  128. // Test a scenario where the default revision exists with the default
  129. // language in a draft state and a non-default language in a published
  130. // state. The method returns TRUE if any of the languages for the default
  131. // revision are in a published state.
  132. $this->assertEquals(TRUE, $this->moderationInformation->isDefaultRevisionPublished($entity));
  133. }
  134. }