Mercurial > hg > isophonics-drupal-site
diff core/tests/Drupal/FunctionalJavascriptTests/Ajax/ThrobberTest.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/ThrobberTest.php Thu Feb 28 13:21:36 2019 +0000 @@ -0,0 +1,106 @@ +<?php + +namespace Drupal\FunctionalJavascriptTests\Ajax; + +use Drupal\FunctionalJavascriptTests\WebDriverTestBase; + +/** + * Tests the throbber. + * + * @group Ajax + */ +class ThrobberTest extends WebDriverTestBase { + + /** + * {@inheritdoc} + */ + public static $modules = [ + 'node', + 'views', + 'views_ui', + 'views_ui_test_field', + 'hold_test', + ]; + + /** + * {@inheritdoc} + */ + public function setUp() { + parent::setUp(); + + $admin_user = $this->drupalCreateUser([ + 'administer views', + ]); + $this->drupalLogin($admin_user); + } + + /** + * Tests theming throbber element. + */ + public function testThemingThrobberElement() { + $session = $this->getSession(); + $web_assert = $this->assertSession(); + $page = $session->getPage(); + + $custom_ajax_progress_indicator_fullscreen = <<<JS + Drupal.theme.ajaxProgressIndicatorFullscreen = function () { + return '<div class="custom-ajax-progress-fullscreen"></div>'; + }; +JS; + $custom_ajax_progress_throbber = <<<JS + Drupal.theme.ajaxProgressThrobber = function (message) { + return '<div class="custom-ajax-progress-throbber"></div>'; + }; +JS; + $custom_ajax_progress_message = <<<JS + Drupal.theme.ajaxProgressMessage = function (message) { + return '<div class="custom-ajax-progress-message">Hold door!</div>'; + }; +JS; + + $this->drupalGet('admin/structure/views/view/content'); + $this->waitForNoElement('.ajax-progress-fullscreen'); + + // Test theming fullscreen throbber. + $session->executeScript($custom_ajax_progress_indicator_fullscreen); + hold_test_response(TRUE); + $page->clickLink('Content: Published (grouped)'); + $this->assertNotNull($web_assert->waitForElement('css', '.custom-ajax-progress-fullscreen'), 'Custom ajaxProgressIndicatorFullscreen.'); + hold_test_response(FALSE); + $this->waitForNoElement('.custom-ajax-progress-fullscreen'); + + // Test theming throbber message. + $web_assert->waitForElementVisible('css', '[data-drupal-selector="edit-options-group-info-add-group"]'); + $session->executeScript($custom_ajax_progress_message); + hold_test_response(TRUE); + $page->pressButton('Add another item'); + $this->assertNotNull($web_assert->waitForElement('css', '.ajax-progress-throbber .custom-ajax-progress-message'), 'Custom ajaxProgressMessage.'); + hold_test_response(FALSE); + $this->waitForNoElement('.ajax-progress-throbber'); + + // Test theming throbber. + $web_assert->waitForElementVisible('css', '[data-drupal-selector="edit-options-group-info-group-items-3-title"]'); + $session->executeScript($custom_ajax_progress_throbber); + hold_test_response(TRUE); + $page->pressButton('Add another item'); + $this->assertNotNull($web_assert->waitForElement('css', '.custom-ajax-progress-throbber'), 'Custom ajaxProgressThrobber.'); + hold_test_response(FALSE); + $this->waitForNoElement('.custom-ajax-progress-throbber'); + } + + /** + * Waits for an element to be removed from the page. + * + * @param string $selector + * CSS selector. + * @param int $timeout + * (optional) Timeout in milliseconds, defaults to 10000. + * + * @todo Remove in https://www.drupal.org/node/2892440. + */ + protected function waitForNoElement($selector, $timeout = 10000) { + $condition = "(typeof jQuery !== 'undefined' && jQuery('$selector').length === 0)"; + $this->assertJsCondition($condition, $timeout); + } + +}