function TableDragTest::testDragAndDrop

Same name in other branches
  1. 9 core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php \Drupal\FunctionalJavascriptTests\TableDrag\TableDragTest::testDragAndDrop()
  2. 8.9.x core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php \Drupal\FunctionalJavascriptTests\TableDrag\TableDragTest::testDragAndDrop()
  3. 11.x core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php \Drupal\FunctionalJavascriptTests\TableDrag\TableDragTest::testDragAndDrop()

Tests draggable table drag'n'drop.

File

core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php, line 103

Class

TableDragTest
Tests draggable table.

Namespace

Drupal\FunctionalJavascriptTests\TableDrag

Code

public function testDragAndDrop() : void {
    $this->state
        ->set('tabledrag_test_table', array_flip(range(1, 3)));
    $this->drupalGet('tabledrag_test');
    $session = $this->getSession();
    $page = $session->getPage();
    // Confirm touchevents detection is loaded with Tabledrag
    $this->assertNotNull($this->assertSession()
        ->waitForElement('css', 'html.no-touchevents'));
    $weight_select1 = $page->findField("table[1][weight]");
    $weight_select2 = $page->findField("table[2][weight]");
    $weight_select3 = $page->findField("table[3][weight]");
    // Check that initially the rows are in the correct order.
    $this->assertOrder([
        'Row with id 1',
        'Row with id 2',
        'Row with id 3',
    ]);
    // Check that the 'unsaved changes' text is not present in the message area.
    $this->assertSession()
        ->pageTextNotContains('You have unsaved changes.');
    $row1 = $this->findRowById(1)
        ->find('css', 'a.tabledrag-handle');
    $row2 = $this->findRowById(2)
        ->find('css', 'a.tabledrag-handle');
    $row3 = $this->findRowById(3)
        ->find('css', 'a.tabledrag-handle');
    // Drag row1 over row2.
    $row1->dragTo($row2);
    // Check that the 'unsaved changes' text was added in the message area.
    $this->assertSession()
        ->waitForText('You have unsaved changes.');
    // Check that row1 and row2 were swapped.
    $this->assertOrder([
        'Row with id 2',
        'Row with id 1',
        'Row with id 3',
    ]);
    // Check that weights were changed.
    $this->assertGreaterThan($weight_select2->getValue(), $weight_select1->getValue());
    $this->assertGreaterThan($weight_select2->getValue(), $weight_select3->getValue());
    $this->assertGreaterThan($weight_select1->getValue(), $weight_select3->getValue());
    // Now move the last row (row3) in the second position. row1 should go last.
    $row3->dragTo($row1);
    // Check that the order is: row2, row3 and row1.
    $this->assertOrder([
        'Row with id 2',
        'Row with id 3',
        'Row with id 1',
    ]);
}

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