diff --git a/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php b/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php index f20f3a503be99ede6eb78293f4774c4820b1c38d..b31833a728b3202df81697f0cca2ecd809b2c6ff 100644 --- a/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php +++ b/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php @@ -142,6 +142,13 @@ public function isComputed() { return $this->getBaseFieldDefinition()->isComputed(); } + /** + * {@inheritdoc} + */ + public function getClass() { + return $this->getBaseFieldDefinition()->getClass(); + } + /** * Gets the base field definition. * diff --git a/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php b/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php index db80eea1a607773b76f1791dd94f3324e7a1ee30..e52bf961374400651b000612e82a0348a96eab80 100644 --- a/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php +++ b/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php @@ -398,6 +398,37 @@ public function testMultilingualModeration() { $this->assertEquals(6, $english_node->getRevisionId()); } + /** + * Tests moderation when the moderation_state field has a config override. + */ + public function testModerationWithFieldConfigOverride() { + NodeType::create([ + 'type' => 'test_type', + ])->save(); + + $workflow = Workflow::load('editorial'); + $workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'test_type'); + $workflow->save(); + + $fields = $this->container->get('entity_field.manager')->getFieldDefinitions('node', 'test_type'); + $field_config = $fields['moderation_state']->getConfig('test_type'); + $field_config->setLabel('Field Override!'); + $field_config->save(); + + $node = Node::create([ + 'title' => 'Test node', + 'type' => 'test_type', + ]); + $node->save(); + $this->assertFalse($node->isPublished()); + $this->assertEquals('draft', $node->moderation_state->value); + + $node->moderation_state = 'published'; + $node->save(); + $this->assertTrue($node->isPublished()); + $this->assertEquals('published', $node->moderation_state->value); + } + /** * Tests that entities with special languages can be moderated. */ diff --git a/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php b/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php new file mode 100644 index 0000000000000000000000000000000000000000..404c2f0b6b2b3e617fc83dff0668b19568b3d713 --- /dev/null +++ b/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php @@ -0,0 +1,65 @@ +installEntitySchema('base_field_override'); + } + + /** + * @covers ::getClass + * + * @dataProvider getClassTestCases + */ + public function testGetClass($field_type, $base_field_class, $expected_override_class) { + $base_field = BaseFieldDefinition::create($field_type) + ->setName('Test Field') + ->setTargetEntityTypeId('entity_test'); + if ($base_field_class) { + $base_field->setClass($base_field_class); + } + $override = BaseFieldOverride::createFromBaseFieldDefinition($base_field, 'test_bundle'); + $this->assertEquals($expected_override_class, ltrim($override->getClass(), '\\')); + } + + /** + * Test cases for ::testGetClass. + */ + public function getClassTestCases() { + return [ + 'String (default class)' => [ + 'string', + FALSE, + FieldItemList::class, + ], + 'String (overriden class)' => [ + 'string', + static::class, + static::class, + ], + ]; + } + +}