diff --git a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php index 8d48f26ae4787933204a0a085f47abebb034e22e..8b7afc9ebf17c7401960216d7878862a7d5a9b4f 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 @@ public function onChange($delta) { 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 d1ff5d2da841d8755adec668108f97aabc2ef8cc..ce78aa9063316fd7fac9130c685d77c72b1c0ff2 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 @@ public function testEntityWithNoWorkflow() { /** * 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, + ], + ]; } }