Skip to content

Commit

Permalink
Make FallbackLoaderTest more robust.
Browse files Browse the repository at this point in the history
  • Loading branch information
demiankatz committed Feb 21, 2025
1 parent 1aee520 commit 82d3dba
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 21 deletions.
64 changes: 64 additions & 0 deletions module/VuFind/src/VuFindTest/Feature/RetryClickTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php

/**
* Trait adding functionality to retry failed clicks.
*
* PHP version 8
*
* Copyright (C) Villanova University 2025.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category VuFind
* @package Tests
* @author Demian Katz <[email protected]>
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @link https://vufind.org/wiki/development:testing:unit_tests Wiki
*/

namespace VuFindTest\Feature;

use Behat\Mink\Element\Element;
use Behat\Mink\Session;

/**
* Trait adding functionality to retry failed clicks.
*
* @category VuFind
* @package Tests
* @author Demian Katz <[email protected]>
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @link https://vufind.org/wiki/development:testing:unit_tests Wiki
*/
trait RetryClickTrait
{
/**
* After a failed button click has been detected, resize the window and try again.
*
* @param Session $session Mink session
* @param Element $page Current page element
* @param string $selector Selector to click
*
* @return void
*/
protected function retryClickWithResizedWindow(Session $session, Element $page, string $selector): void
{
// For some reason, the click action does not always succeed here; resizing
// the window and retrying seems to prevent intermittent test failures.
echo "\n\nMink click failed; retrying with resized window!\n";
$session->resizeWindow(1280, 200, 'current');
$this->clickCss($page, $selector);
$session->resizeWindow(1280, 768, 'current');
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
namespace VuFindTest\Mink;

use Behat\Mink\Element\Element;
use Behat\Mink\Session;

/**
* Mink bulk action test class.
Expand All @@ -46,6 +45,7 @@
final class BulkTest extends \VuFindTest\Integration\MinkTestCase
{
use \VuFindTest\Feature\LiveDatabaseTrait;
use \VuFindTest\Feature\RetryClickTrait;
use \VuFindTest\Feature\UserCreationTrait;

/**
Expand Down Expand Up @@ -293,25 +293,6 @@ public static function topOrBottomProvider(): array
];
}

/**
* After a failed button click has been detected, resize the window and try again.
*
* @param Session $session Mink session
* @param Element $page Current page element
* @param string $selector Selector to click
*
* @return void
*/
protected function retryClickWithResizedWindow(Session $session, Element $page, string $selector): void
{
// For some reason, the click action does not always succeed here; resizing
// the window and retrying seems to prevent intermittent test failures.
echo "\n\nMink click failed; retrying with resized window!\n";
$session->resizeWindow(1280, 200, 'current');
$this->clickCss($page, $selector);
$session->resizeWindow(1280, 768, 'current');
}

/**
* Test that the export control works.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
final class FallbackLoaderTest extends \VuFindTest\Integration\MinkTestCase
{
use \VuFindTest\Feature\LiveDatabaseTrait;
use \VuFindTest\Feature\RetryClickTrait;
use \VuFindTest\Feature\UserCreationTrait;

/**
Expand Down Expand Up @@ -128,7 +129,19 @@ protected function addComment(Element $page, string $comment): void
$this->clickCss($page, '.record-tabs .usercomments a');
$this->findCss($page, '.comment-form');
$this->findCssAndSetValue($page, 'form.comment-form [name="comment"]', $comment);
$this->clickCss($page, 'form.comment-form .btn-primary');
$buttonSelector = 'form.comment-form .btn-primary';
$this->clickCss($page, $buttonSelector);
$commentSelector = '.comment-text';
try {
// We don't want to wait the full default timeout here since that wastes a lot
// of time if a click failed to register; however, we shouldn't wait for too
// short of a time, or else a slow response can break the test by causing a
// double form submission.
$this->findCss($page, $commentSelector, 1500);
} catch (\Exception $e) {
$this->retryClickWithResizedWindow($this->getMinkSession(), $page, $buttonSelector);
}
$this->assertEquals($comment, $this->findCssAndGetText($page, $commentSelector));
}

/**
Expand Down

0 comments on commit 82d3dba

Please sign in to comment.