From ed9e93f52fd7643264dde9887d30f30aa81ed766 Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Thu, 17 May 2018 09:56:58 +0100 Subject: [PATCH] Issue #2971157 by jhedstrom, Sam152: Moderation state set to default after entity is serialized --- .../Field/ModerationStateFieldItemList.php | 4 ++- .../ModerationStateFieldItemListTest.php | 34 ++++++++++++++++--- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php index 8d48f26ae478..8b7afc9ebf17 100644 --- a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php +++ b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php @@ -141,11 +141,13 @@ class ModerationStateFieldItemList extends FieldItemList { public function setValue($values, $notify = TRUE) { parent::setValue($values, $notify); + if (isset($this->list[0])) { + $this->valueComputed = TRUE; + } // If the parent created a field item and if the parent should be notified // about the change (e.g. this is not initialized with the current value), // update the moderated entity. if (isset($this->list[0]) && $notify) { - $this->valueComputed = TRUE; $this->updateModeratedEntity($this->list[0]->value); } } diff --git a/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php b/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php index d1ff5d2da841..ce78aa906331 100644 --- a/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php +++ b/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php @@ -211,13 +211,39 @@ class ModerationStateFieldItemListTest extends KernelTestBase { /** * Test the moderation_state field after an entity has been serialized. + * + * @dataProvider entityUnserializeTestCases */ - public function testEntityUnserialize() { - $this->testNode->moderation_state->value = 'draft'; + public function testEntityUnserialize($state, $default, $published) { + $this->testNode->moderation_state->value = $state; + + $this->assertEquals($state, $this->testNode->moderation_state->value); + $this->assertEquals($default, $this->testNode->isDefaultRevision()); + $this->assertEquals($published, $this->testNode->isPublished()); + $unserialized = unserialize(serialize($this->testNode)); - $this->assertEquals('Test title', $unserialized->title->value); - $this->assertEquals('draft', $unserialized->moderation_state->value); + $this->assertEquals($state, $unserialized->moderation_state->value); + $this->assertEquals($default, $unserialized->isDefaultRevision()); + $this->assertEquals($published, $unserialized->isPublished()); + } + + /** + * Test cases for ::testEntityUnserialize. + */ + public function entityUnserializeTestCases() { + return [ + 'Default draft state' => [ + 'draft', + TRUE, + FALSE, + ], + 'Non-default published state' => [ + 'published', + TRUE, + TRUE, + ], + ]; } }