From cc80e9de93e817368baffc97a5fca9cc5e71a928 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= <adam@phenaproxima.net>
Date: Mon, 10 Mar 2025 09:31:59 -0400
Subject: [PATCH 1/2] Remove all calls to pressWithWait()

---
 .../ProjectBrowserPluginTest.php              |  4 +-
 .../ProjectBrowserUiJsonApiTest.php           | 29 ++++++------
 .../ProjectBrowserUiTest.php                  | 46 +++++++++++--------
 .../ProjectBrowserUiTestTrait.php             | 25 ----------
 4 files changed, 45 insertions(+), 59 deletions(-)

diff --git a/tests/src/FunctionalJavascript/ProjectBrowserPluginTest.php b/tests/src/FunctionalJavascript/ProjectBrowserPluginTest.php
index 33e2e95f4..45f13a734 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserPluginTest.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserPluginTest.php
@@ -90,13 +90,13 @@ final class ProjectBrowserPluginTest extends WebDriverTestBase {
     $page->selectFieldOption('development_status', 'Show projects under active development');
 
     // Clear all filters.
-    $this->pressWithWait('Clear filters');
+    $page->pressButton('Clear filters');
     $this->assertEquals('Show all', $this->getElementText(self::SECURITY_OPTION_SELECTOR . self::OPTION_CHECKED));
     $this->assertEquals('Show all', $this->getElementText(self::MAINTENANCE_OPTION_SELECTOR . self::OPTION_CHECKED));
     $this->assertEquals('Show all', $this->getElementText(self::DEVELOPMENT_OPTION_SELECTOR . self::OPTION_CHECKED));
 
     // Reset to recommended filters.
-    $this->pressWithWait('Recommended filters');
+    $page->pressButton('Recommended filters');
     $this->assertEquals('Show projects covered by a security policy', $this->getElementText(self::SECURITY_OPTION_SELECTOR . self::OPTION_CHECKED));
     $this->assertEquals('Show actively maintained projects', $this->getElementText(self::MAINTENANCE_OPTION_SELECTOR . self::OPTION_CHECKED));
     $this->assertEquals('Show all', $this->getElementText(self::DEVELOPMENT_OPTION_SELECTOR . self::OPTION_CHECKED));
diff --git a/tests/src/FunctionalJavascript/ProjectBrowserUiJsonApiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserUiJsonApiTest.php
index 8379f1c21..37e4a6e32 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserUiJsonApiTest.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserUiJsonApiTest.php
@@ -150,7 +150,8 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
     $assert_session->pageTextNotContains(' 0 Results');
     $this->assertSession()->elementExists('css', '.pb-filter__multi-dropdown')->blur();
 
-    $this->pressWithWait('Clear filters', ' Results');
+    $this->getSession()->getPage()->pressButton('Clear filters');
+    $this->assertPageHasText(' Results');
     $assert_session->pageTextNotContains(' 0 Results');
 
     // Open category drop-down.
@@ -229,10 +230,11 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
     $assert_session = $this->assertSession();
 
     $this->drupalGet('admin/modules/browse/drupalorg_jsonapi');
-    $this->svelteInitHelper('text', 'Token');
-    $this->pressWithWait('Clear filters');
-    $this->pressWithWait('Recommended filters');
-    $assert_session->pageTextContains(' Results');
+    $this->waitForProject('Token');
+    $page = $this->getSession()->getPage();
+    $page->pressButton('Clear filters');
+    $page->pressButton('Recommended filters');
+    $this->assertPageHasText(' Results');
     $assert_session->pageTextNotContains(' 0 Results');
 
     // Make sure the second filter applied is the security covered filter.
@@ -249,7 +251,8 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
     $page->selectFieldOption('development_status', 'true');
 
     // Clear all filters.
-    $this->pressWithWait('Clear filters', 'Results');
+    $page->pressButton('Clear filters');
+    $this->assertPageHasText(' Results');
 
     // Click the Actively maintained filter.
     $page->selectFieldOption('maintenance_status', 'true');
@@ -264,16 +267,14 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
    * Tests sorting criteria.
    */
   public function testSortingCriteria(): void {
-    $assert_session = $this->assertSession();
     // Clear filters.
     $this->drupalGet('admin/modules/browse/drupalorg_jsonapi');
-    $this->svelteInitHelper('text', 'Clear Filters');
-    $this->pressWithWait('Clear filters');
+    $this->assertElementIsVisible('named', ['button', 'Clear filters'])->press();
 
     // Select 'Recently created' option.
     $this->sortBy('created');
-    $assert_session->pageTextContains(' Results');
-    $assert_session->pageTextNotContains(' 0 Results');
+    $this->assertPageHasText(' Results');
+    $this->assertSession()->pageTextNotContains(' 0 Results');
   }
 
   /**
@@ -308,9 +309,9 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
     $assert_session = $this->assertSession();
     // Clear filters.
     $this->drupalGet('admin/modules/browse/drupalorg_jsonapi');
-    $this->svelteInitHelper('text', 'Clear Filters');
-    $this->pressWithWait('Clear filters', 'Results');
-    $this->pressWithWait('Recommended filters');
+    $this->assertElementIsVisible('named', ['button', 'Clear filters'])->press();
+    $this->assertPageHasText('Results');
+    $this->getSession()->getPage()->pressButton('Recommended filters');
 
     // Check that the actively maintained tag is present.
     $this->assertTrue($assert_session->optionExists('maintenance_status', 'Show actively maintained projects')->isSelected());
diff --git a/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php
index 40633b893..4d036f43f 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php
@@ -153,7 +153,8 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
     // Use blur event to close drop-down so Clear is visible.
     $assert_session->elementExists('css', '.pb-filter__multi-dropdown')->blur();
 
-    $this->pressWithWait('Clear filters', '25 Results');
+    $this->getSession()->getPage()->pressButton('Clear filters');
+    $this->assertPageHasText('25 Results');
 
     // Open category drop-down again by pressing space.
     $assert_session->elementExists('css', '.pb-filter__multi-dropdown')->keyDown(' ');
@@ -316,8 +317,8 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
       ));
     };
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
-    $this->svelteInitHelper('css', '.pb-project.pb-project--list');
-    $this->pressWithWait('Clear filters');
+    $this->assertElementIsVisible('css', '.pb-project.pb-project--list');
+    $page->pressButton('Clear filters');
     $await_n_projects(12);
     $page->selectFieldOption('num-projects', '24');
     $await_n_projects(24);
@@ -330,9 +331,9 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
     $page = $this->getSession()->getPage();
 
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
-    $this->svelteInitHelper('text', 'Astronaut Simulator');
-    $this->pressWithWait('Clear filters');
-    $this->pressWithWait('Recommended filters');
+    $this->waitForProject('Astronaut Simulator');
+    $page->pressButton('Clear filters');
+    $page->pressButton('Recommended filters');
     $this->assertProjectsVisible([
       'Cream cheese on a bagel',
       'Pinky and the Brain',
@@ -407,7 +408,8 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
     ]);
 
     // Clear all filters.
-    $this->pressWithWait('Clear filters', '25 Results');
+    $page->pressButton('Clear filters');
+    $this->assertPageHasText('25 Results');
 
     // Click the Actively maintained filter.
     $page->selectFieldOption('maintenance_status', 'true');
@@ -435,7 +437,7 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
     // Clear filters.
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
     $this->svelteInitHelper('text', 'Clear Filters');
-    $this->pressWithWait('Clear filters');
+    $this->getSession()->getPage()->pressButton('Clear filters');
     $assert_session->elementsCount('css', '#pb-sort option', 4);
     $this->assertEquals('Most popular', $this->getElementText('#pb-sort option:nth-child(1)'));
     $this->assertEquals('A-Z', $this->getElementText('#pb-sort option:nth-child(2)'));
@@ -525,8 +527,9 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
   public function testSearchForSpecialChar(): void {
     // Clear filters.
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
-    $this->svelteInitHelper('text', '10 Results');
-    $this->pressWithWait('Clear filters', '25 Results');
+    $this->assertPageHasText('10 Results');
+    $this->getSession()->getPage()->pressButton('Clear filters');
+    $this->assertPageHasText('25 Results');
 
     // Fill in the search field.
     $this->inputSearchField('', TRUE);
@@ -620,11 +623,13 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
    * Tests recommended filters.
    */
   public function testRecommendedFilter(): void {
+    $page = $this->getSession()->getPage();
+
     // Clear filters.
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
-    $this->svelteInitHelper('text', 'Clear Filters');
-    $this->pressWithWait('Clear filters', '25 Results');
-    $this->pressWithWait('Recommended filters');
+    $this->assertElementIsVisible('named', ['button', 'Clear filters'])->press();
+    $this->assertPageHasText('25 Results');
+    $page->pressButton('Recommended filters');
 
     // Check that the actively maintained tag is present.
     $this->assertEquals('Show actively maintained projects', $this->getElementText(self::MAINTENANCE_OPTION_SELECTOR . self::OPTION_CHECKED));
@@ -750,7 +755,7 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
     $assert_session = $this->assertSession();
 
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
-    $this->pressWithWait('Clear filters');
+    $this->getSession()->getPage()->pressButton('Clear filters');
     $this->assertProjectsVisible([
       'Jazz',
       'Eggman',
@@ -1034,10 +1039,13 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
    * Tests clicking the X next to search, or clear filters resets search.
    */
   public function testClearSearch(): void {
+    $page = $this->getSession()->getPage();
+
     // Clear filters.
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
-    $this->svelteInitHelper('text', '10 Results');
-    $this->pressWithWait('Clear filters', '25 Results');
+    $this->assertPageHasText('10 Results');
+    $page->pressButton('Clear filters');
+    $this->assertPageHasText('25 Results');
 
     // Fill in the search field.
     $search_field = $this->assertElementIsVisible('css', '#pb-text');
@@ -1050,7 +1058,8 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
     $this->assertEquals($search_field->getValue(), 'Tooth Fairy');
 
     // Click "X" button and make sure search now empty.
-    $this->pressWithWait('clear-text', '25 Results');
+    $this->assertElementIsVisible('css', '#clear-text')->press();
+    $this->assertPageHasText('25 Results');
     $this->assertEquals($search_field->getValue(), '');
 
     // Run search again.
@@ -1061,7 +1070,8 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
     ]);
 
     // Click Clear Filters button and make sure search empty again.
-    $this->pressWithWait('Clear filters', '25 Results');
+    $page->pressButton('Clear filters');
+    $this->assertPageHasText('25 Results');
     $this->assertEquals($search_field->getValue(), '');
 
     // Ensure that clearing filters will preserve the result count, even if
diff --git a/tests/src/FunctionalJavascript/ProjectBrowserUiTestTrait.php b/tests/src/FunctionalJavascript/ProjectBrowserUiTestTrait.php
index a44f54809..1414eb566 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserUiTestTrait.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserUiTestTrait.php
@@ -156,31 +156,6 @@ trait ProjectBrowserUiTestTrait {
     }
   }
 
-  /**
-   * Click an element with waits for Svelte to refresh.
-   *
-   * @param string $locator
-   *   Locator to be used by pressButton().
-   * @param string $wait_for_text
-   *   When non-empty, wait for this text to be present after click.
-   * @param bool $bypass_wait
-   *   When TRUE, do not wait for a rerender after entering a search string.
-   */
-  protected function pressWithWait(string $locator, string $wait_for_text = '', bool $bypass_wait = FALSE): void {
-    if ($bypass_wait) {
-      $this->getSession()->getPage()->pressButton($locator);
-    }
-    else {
-      $this->preFilterWait();
-      $this->getSession()->getPage()->pressButton($locator);
-      $this->postFilterWait();
-    }
-
-    if (!empty($wait_for_text)) {
-      $this->assertPageHasText($wait_for_text);
-    }
-  }
-
   /**
    * Opens the advanced filter element.
    */
-- 
GitLab


From 050ddd967451bb72fa5aa4adcfbcab9448c9675a Mon Sep 17 00:00:00 2001
From: Tim Plunkett <git@plnktt.com>
Date: Mon, 10 Mar 2025 12:21:09 -0400
Subject: [PATCH 2/2] Improve readability

---
 .../ProjectBrowserUiJsonApiTest.php           | 21 ++++++++++++-------
 .../ProjectBrowserUiTest.php                  | 18 +++++++++++-----
 2 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/tests/src/FunctionalJavascript/ProjectBrowserUiJsonApiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserUiJsonApiTest.php
index 37e4a6e32..889ad3816 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserUiJsonApiTest.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserUiJsonApiTest.php
@@ -121,6 +121,7 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
    * Tests category filtering.
    */
   public function testCategoryFiltering(): void {
+    $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
 
     $this->drupalGet('admin/modules/browse/drupalorg_jsonapi');
@@ -134,7 +135,7 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
     $assert_session->fieldExists('E-commerce')->check();
 
     // Use blur event to close drop-down so Clear is visible.
-    $this->assertSession()->elementExists('css', '.pb-filter__multi-dropdown')->blur();
+    $assert_session->elementExists('css', '.pb-filter__multi-dropdown')->blur();
 
     $module_category_e_commerce_filter_selector = 'p.filter-applied:nth-child(1)';
     // Make sure the 'E-commerce' module category filter is applied.
@@ -148,9 +149,9 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
     $assert_session->fieldExists('E-commerce')->uncheck();
     $this->assertPageHasText(' Results');
     $assert_session->pageTextNotContains(' 0 Results');
-    $this->assertSession()->elementExists('css', '.pb-filter__multi-dropdown')->blur();
+    $assert_session->elementExists('css', '.pb-filter__multi-dropdown')->blur();
 
-    $this->getSession()->getPage()->pressButton('Clear filters');
+    $page->pressButton('Clear filters');
     $this->assertPageHasText(' Results');
     $assert_session->pageTextNotContains(' 0 Results');
 
@@ -267,6 +268,8 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
    * Tests sorting criteria.
    */
   public function testSortingCriteria(): void {
+    $assert_session = $this->assertSession();
+
     // Clear filters.
     $this->drupalGet('admin/modules/browse/drupalorg_jsonapi');
     $this->assertElementIsVisible('named', ['button', 'Clear filters'])->press();
@@ -274,7 +277,7 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
     // Select 'Recently created' option.
     $this->sortBy('created');
     $this->assertPageHasText(' Results');
-    $this->assertSession()->pageTextNotContains(' 0 Results');
+    $assert_session->pageTextNotContains(' 0 Results');
   }
 
   /**
@@ -306,12 +309,14 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
    * Tests recommended filters.
    */
   public function testRecommendedFilter(): void {
+    $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
+
     // Clear filters.
     $this->drupalGet('admin/modules/browse/drupalorg_jsonapi');
     $this->assertElementIsVisible('named', ['button', 'Clear filters'])->press();
     $this->assertPageHasText('Results');
-    $this->getSession()->getPage()->pressButton('Recommended filters');
+    $page->pressButton('Recommended filters');
 
     // Check that the actively maintained tag is present.
     $this->assertTrue($assert_session->optionExists('maintenance_status', 'Show actively maintained projects')->isSelected());
@@ -376,7 +381,9 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
    * Tests the view mode toggle keeps its state.
    */
   public function testToggleViewState(): void {
+    $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
+
     $viewSwitches = [
       [
         'selector' => '.pb-display__button[value="Grid"]',
@@ -391,12 +398,12 @@ final class ProjectBrowserUiJsonApiTest extends WebDriverTestBase {
     foreach ($viewSwitches as $selector) {
       $this->drupalGet('admin/modules/browse/drupalorg_jsonapi');
       $this->svelteInitHelper('css', $selector['selector']);
-      $this->getSession()->getPage()->pressButton($selector['value']);
+      $page->pressButton($selector['value']);
       $this->svelteInitHelper('text', 'Token');
       $assert_session->waitForButton('Token')->click();
       $this->svelteInitHelper('text', 'Close');
       $assert_session->waitForButton('Close')->click();
-      $this->assertSession()->elementExists('css', $selector['selector'] . '.pb-display__button--selected');
+      $assert_session->elementExists('css', $selector['selector'] . '.pb-display__button--selected');
     }
   }
 
diff --git a/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php
index 4d036f43f..6ddcf877a 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserUiTest.php
@@ -117,6 +117,7 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
    * Tests category filtering.
    */
   public function testCategoryFiltering(): void {
+    $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
 
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
@@ -153,7 +154,7 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
     // Use blur event to close drop-down so Clear is visible.
     $assert_session->elementExists('css', '.pb-filter__multi-dropdown')->blur();
 
-    $this->getSession()->getPage()->pressButton('Clear filters');
+    $page->pressButton('Clear filters');
     $this->assertPageHasText('25 Results');
 
     // Open category drop-down again by pressing space.
@@ -433,11 +434,13 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
    * Tests sorting criteria.
    */
   public function testSortingCriteria(): void {
+    $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
+
     // Clear filters.
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
     $this->svelteInitHelper('text', 'Clear Filters');
-    $this->getSession()->getPage()->pressButton('Clear filters');
+    $page->pressButton('Clear filters');
     $assert_session->elementsCount('css', '#pb-sort option', 4);
     $this->assertEquals('Most popular', $this->getElementText('#pb-sort option:nth-child(1)'));
     $this->assertEquals('A-Z', $this->getElementText('#pb-sort option:nth-child(2)'));
@@ -525,10 +528,12 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
    * Tests search with strings that need URI encoding.
    */
   public function testSearchForSpecialChar(): void {
+    $page = $this->getSession()->getPage();
+
     // Clear filters.
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
     $this->assertPageHasText('10 Results');
-    $this->getSession()->getPage()->pressButton('Clear filters');
+    $page->pressButton('Clear filters');
     $this->assertPageHasText('25 Results');
 
     // Fill in the search field.
@@ -752,10 +757,11 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
    * Tests the pagination and filtering.
    */
   public function testPaginationWithFilters(): void {
+    $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
 
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
-    $this->getSession()->getPage()->pressButton('Clear filters');
+    $page->pressButton('Clear filters');
     $this->assertProjectsVisible([
       'Jazz',
       'Eggman',
@@ -904,12 +910,14 @@ final class ProjectBrowserUiTest extends WebDriverTestBase {
    * Test that items with 0 active installs don't show, and >0 do.
    */
   public function testActiveInstallVisibility(): void {
+    $page = $this->getSession()->getPage();
+
     $this->drupalGet('admin/modules/browse/project_browser_test_mock');
     $this->svelteInitHelper('css', '.pb-search-results');
 
     $this->assertElementIsVisible('css', '.pb-project');
     // Find the first and last .pb-project elements.
-    $projects = $this->getSession()->getPage()->findAll('css', '.pb-project');
+    $projects = $page->findAll('css', '.pb-project');
 
     // Assert that there are pb-project elements on the page.
     $this->assertNotEmpty($projects, 'No .pb-project elements found on the page.');
-- 
GitLab