function MultipleValueWidgetTest::testFieldMultipleValueWidgetRemoveKeepsOrderWithTabledrag

Same name and namespace in other branches
  1. main core/modules/field/tests/src/FunctionalJavascript/MultipleValueWidgetTest.php \Drupal\Tests\field\FunctionalJavascript\MultipleValueWidgetTest::testFieldMultipleValueWidgetRemoveKeepsOrderWithTabledrag()

Tests that removing an item keeps the order set through drag and drop.

File

core/modules/field/tests/src/FunctionalJavascript/MultipleValueWidgetTest.php, line 237

Class

MultipleValueWidgetTest
Tests widget form for a multiple value field.

Namespace

Drupal\Tests\field\FunctionalJavascript

Code

public function testFieldMultipleValueWidgetRemoveKeepsOrderWithTabledrag() : void {
  $this->drupalGet('entity_test/add');
  $assert_session = $this->assertSession();
  $page = $this->getSession()
    ->getPage();
  $add_more_button = $page->findButton('field_unlimited_add_more');
  $field_0 = $page->findField('field_unlimited[0][value]');
  $field_0->setValue('1');
  $add_more_button->click();
  $field_1 = $assert_session->waitForField('field_unlimited[1][value]');
  $field_1->setValue('2');
  $add_more_button->click();
  $field_2 = $assert_session->waitForField('field_unlimited[2][value]');
  $field_2->setValue('3');
  // Drag the first row after the third row, so the items read 2, 3, 1.
  $dragged = $field_0->find('xpath', 'ancestor::tr[contains(@class, "draggable")]//a[starts-with(@class, "tabledrag-handle")]');
  $target = $field_2->find('xpath', 'ancestor::tr[contains(@class, "draggable")]');
  $dragged->dragTo($target);
  $this->assertSame([
    '2',
    '3',
    '1',
  ], $this->getItemValuesInDomOrder());
  // Remove the item "3" (delta 2), which is displayed in the middle.
  $page->findButton('field_unlimited_2_remove_button')
    ->click();
  $assert_session->assertWaitOnAjaxRequest();
  $this->assertSame([
    '2',
    '1',
  ], $this->getItemValuesInDomOrder());
  $assert_session->fieldValueEquals('field_unlimited[0][value]', '2');
  $assert_session->fieldValueEquals('field_unlimited[0][_weight]', '-1');
  $assert_session->fieldValueEquals('field_unlimited[1][value]', '1');
  $assert_session->fieldValueEquals('field_unlimited[1][_weight]', '0');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.