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