diff -u b/core/lib/Drupal/Core/Field/WidgetBase.php b/core/lib/Drupal/Core/Field/WidgetBase.php --- b/core/lib/Drupal/Core/Field/WidgetBase.php +++ b/core/lib/Drupal/Core/Field/WidgetBase.php @@ -161,7 +161,7 @@ switch ($cardinality) { case FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED: $field_state = static::getWidgetState($parents, $field_name, $form_state); - $max = max(0, $field_state['items_count'] - 1); + $max = $field_state['items_count']; $is_multiple = TRUE; break; @@ -179,7 +179,7 @@ switch ($cardinality) { case FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED: $field_state = static::getWidgetState($parents, $field_name, $form_state); - $max = $field_state['items_count']; + $max = (isset($form['#parents'][0]) && $form['#parents'][0] === 'default_value_input') ? max(0, $field_state['items_count'] - 1) : $field_state['items_count']; $is_multiple = TRUE; break; only in patch2: unchanged: --- a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldDefaultValueTest.php +++ b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldDefaultValueTest.php @@ -147,11 +147,14 @@ public function testEntityReferenceDefaultConfigValue() { $field->save(); // Set created node as default_value. + $this->drupalGet('admin/structure/types/manage/reference_content/fields/node.reference_content.' . $field_name); $field_edit = [ 'default_value_input[' . $field_name . '][0][target_id]' => $referenced_node_type->label() . ' (' . $referenced_node_type->id() . ')', + ]; + $this->submitForm($field_edit, 'Add another item'); + $field_edit = [ 'default_value_input[' . $field_name . '][1][target_id]' => $referenced_node_type2->label() . ' (' . $referenced_node_type2->id() . ')', ]; - $this->drupalGet('admin/structure/types/manage/reference_content/fields/node.reference_content.' . $field_name); $this->submitForm($field_edit, 'Save settings'); // Check that the field has a dependency on the default value. only in patch2: unchanged: --- a/core/modules/system/tests/src/FunctionalJavascript/Form/RebuildTest.php +++ b/core/modules/system/tests/src/FunctionalJavascript/Form/RebuildTest.php @@ -52,8 +52,7 @@ protected function setUp(): void { * followed by a non-Ajax submission, which triggers a validation error. */ public function testPreserveFormActionAfterAJAX() { - $page = $this->getSession()->getPage(); - // Create a multi-valued field for 'page' nodes to use for Ajax testing. + // Create a multivalued field for 'page' nodes to use for Ajax testing. $field_name = 'field_ajax_test'; FieldStorageConfig::create([ 'field_name' => $field_name, @@ -96,7 +95,10 @@ public function testPreserveFormActionAfterAJAX() { // submission and verify it worked by ensuring the updated page has two text // field items in the field for which we just added an item. $this->drupalGet('node/add/page'); - $page->find('css', '[value="Add another item"]')->click(); + $field_edit = [ + 'title[0][value]' => $this->randomString(), + ]; + $this->submitForm($field_edit, 'Add another item'); $this->assertSession()->assertWaitOnAjaxRequest(); $this->assertSession()->elementsCount('xpath', '//div[contains(@class, "field--name-field-ajax-test")]//input[@type="text"]', 2);