From ad36d819e167852024f2a3bf54cc4a0932523388 Mon Sep 17 00:00:00 2001
From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org>
Date: Wed, 23 Aug 2017 13:08:02 +0900
Subject: [PATCH] Issue #2868880 by Lendude, michielnugter, vaplas: Random
 fails in ContextualFilterTest::testAddContextualFilterUI

---
 .../views/Handler/ContextualFilterTest.php    | 38 ++++++++++++-------
 1 file changed, 25 insertions(+), 13 deletions(-)

diff --git a/core/modules/views/tests/src/FunctionalJavascript/Plugin/views/Handler/ContextualFilterTest.php b/core/modules/views/tests/src/FunctionalJavascript/Plugin/views/Handler/ContextualFilterTest.php
index 8cca9c36010e..dd1d1ae26480 100644
--- a/core/modules/views/tests/src/FunctionalJavascript/Plugin/views/Handler/ContextualFilterTest.php
+++ b/core/modules/views/tests/src/FunctionalJavascript/Plugin/views/Handler/ContextualFilterTest.php
@@ -24,7 +24,6 @@ class ContextualFilterTest extends JavascriptTestBase {
    */
   public static $testViews = ['test_field_body'];
 
-
   /**
    * {@inheritdoc}
    */
@@ -33,9 +32,14 @@ protected function setUp() {
 
     ViewTestData::createTestViews(get_class($this), ['views_test_config']);
 
-    // Disable automatic live preview to make the sequence of calls clearer.
+    // Always show advanced column.
     \Drupal::configFactory()->getEditable('views.settings')->set('ui.show.advanced_column', TRUE)->save();
 
+    // Disable automatic live preview to make the sequence of calls clearer. And
+    // prevent errors on saving the view with the preview ajax load that are
+    // cancelled.
+    \Drupal::configFactory()->getEditable('views.settings')->set('ui.always_live_preview', FALSE)->save();
+
     $account = $this->drupalCreateUser(['administer views']);
     $this->drupalLogin($account);
   }
@@ -44,32 +48,40 @@ protected function setUp() {
    * Test adding a contextual filter handler through the UI.
    */
   public function testAddContextualFilterUI() {
-    $web_assert = $this->assertSession();
-
     $this->drupalGet('/admin/structure/views/view/test_field_body');
-    $web_assert->assertWaitOnAjaxRequest();
 
+    $web_assert = $this->assertSession();
     $page = $this->getSession()->getPage();
 
     $page->clickLink('views-add-argument');
-    $web_assert->assertWaitOnAjaxRequest();
 
-    $page->checkField('name[node_field_data.nid]');
+    $field = $web_assert->waitForField('name[node_field_data.nid]');
+    $this->assertNotEmpty($field);
+    $field->check();
+
     $add_button = $page->find('css', '.ui-dialog-buttonset .button--primary');
     $add_button->click();
-    $web_assert->assertWaitOnAjaxRequest();
 
-    $page->fillField('options[default_action]', 'default');
+    $field_action = $web_assert->waitForField('options[default_action]');
+    $this->assertNotEmpty($field_action);
+    $field_action->setValue('default');
+
     $page->selectFieldOption('options[default_argument_type]', 'node');
     $add_button = $page->find('css', '.ui-dialog-buttonset .button--primary');
     $add_button->click();
-    $web_assert->assertWaitOnAjaxRequest();
+
+    // Wait for the dialog to close.
+    $page->waitFor(10, function () use ($page) {
+      $field = $page->find('css', '.ui-dialog-buttonset .button--primary');
+      return empty($field);
+    });
+
     $page->pressButton('edit-actions-submit');
-    $web_assert->assertWaitOnAjaxRequest();
+
     $page->clickLink('Content: ID');
     // Check that the dialog opens.
-    $web_assert->assertWaitOnAjaxRequest();
-    $page->pressButton('Close');
+    $field_action = $web_assert->waitForField('options[default_action]');
+    $this->assertNotEmpty($field_action);
   }
 
 }
-- 
GitLab