123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- <?php
- namespace Drupal\Tests\block\FunctionalJavascript;
- use Behat\Mink\Element\NodeElement;
- use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
- /**
- * Tests the JavaScript functionality of the block add filter.
- *
- * @group block
- */
- class BlockFilterTest extends WebDriverTestBase {
- /**
- * {@inheritdoc}
- */
- public static $modules = ['user', 'block'];
- /**
- * {@inheritdoc}
- */
- protected function setUp() {
- parent::setUp();
- $admin_user = $this->drupalCreateUser([
- 'administer blocks',
- ]);
- $this->drupalLogin($admin_user);
- }
- /**
- * Tests block filter.
- */
- public function testBlockFilter() {
- $this->drupalGet('admin/structure/block');
- $assertSession = $this->assertSession();
- $session = $this->getSession();
- $page = $session->getPage();
- // Find the block filter field on the add-block dialog.
- $page->find('css', '#edit-blocks-region-header-title')->click();
- $filter = $assertSession->waitForElement('css', '.block-filter-text');
- // Get all block rows, for assertions later.
- $block_rows = $page->findAll('css', '.block-add-table tbody tr');
- // Test block filter reduces the number of visible rows.
- $filter->setValue('ad');
- $session->wait(10000, 'jQuery("#drupal-live-announce").html().indexOf("blocks are available") > -1');
- $visible_rows = $this->filterVisibleElements($block_rows);
- if (count($block_rows) > 0) {
- $this->assertNotEquals(count($block_rows), count($visible_rows));
- }
- // Test Drupal.announce() message when multiple matches are expected.
- $expected_message = count($visible_rows) . ' blocks are available in the modified list.';
- $assertSession->elementTextContains('css', '#drupal-live-announce', $expected_message);
- // Test Drupal.announce() message when only one match is expected.
- $filter->setValue('Powered by');
- $session->wait(10000, 'jQuery("#drupal-live-announce").html().indexOf("block is available") > -1');
- $visible_rows = $this->filterVisibleElements($block_rows);
- $this->assertEquals(1, count($visible_rows));
- $expected_message = '1 block is available in the modified list.';
- $assertSession->elementTextContains('css', '#drupal-live-announce', $expected_message);
- // Test Drupal.announce() message when no matches are expected.
- $filter->setValue('Pan-Galactic Gargle Blaster');
- $session->wait(10000, 'jQuery("#drupal-live-announce").html().indexOf("0 blocks are available") > -1');
- $visible_rows = $this->filterVisibleElements($block_rows);
- $this->assertEquals(0, count($visible_rows));
- $expected_message = '0 blocks are available in the modified list.';
- $assertSession->elementTextContains('css', '#drupal-live-announce', $expected_message);
- }
- /**
- * Removes any non-visible elements from the passed array.
- *
- * @param \Behat\Mink\Element\NodeElement[] $elements
- * An array of node elements.
- *
- * @return \Behat\Mink\Element\NodeElement[]
- */
- protected function filterVisibleElements(array $elements) {
- $elements = array_filter($elements, function (NodeElement $element) {
- return $element->isVisible();
- });
- return $elements;
- }
- }
|