Merge pull request #39 from dpalou/MOBILE-3726

MOBILE-3726 behat: Add tests for external links
main
Noel De Martin 2021-10-13 16:08:36 +02:00 committed by GitHub
commit e5e1ae6df8
3 changed files with 79 additions and 5 deletions

View File

@ -518,6 +518,9 @@
near: { text: 'Notifications' },
})[0];
break;
case 'page menu':
foundButton = findElementsBasedOnText({ text: 'Display options' })[0];
break;
default:
return 'ERROR: Unsupported standard button type';
}

View File

@ -789,14 +789,16 @@ class behat_app extends behat_base {
/**
* Check that the app opened a new browser tab.
*
* @Given /^the app should( not)? have opened a browser tab$/
* @Given /^the app should( not)? have opened a browser tab(?: with url "(?P<pattern>[^"]+)")?$/
* @param bool $not
* @param string $urlpattern
*/
public function the_app_should_have_opened_a_browser_tab(bool $not = false) {
$this->spin(function() use ($not) {
$openedbrowsertab = count($this->getSession()->getWindowNames()) === 2;
public function the_app_should_have_opened_a_browser_tab(bool $not = false, ?string $urlpattern = null) {
$this->spin(function() use ($not, $urlpattern) {
$windownames = $this->getSession()->getWindowNames();
$openedbrowsertab = count($windownames) === 2;
if ($not === $openedbrowsertab) {
if ((!$not && !$openedbrowsertab) || ($not && $openedbrowsertab && is_null($urlpattern))) {
throw new ExpectationException(
$not
? 'Did not expect the app to have opened a browser tab'
@ -805,6 +807,22 @@ class behat_app extends behat_base {
);
}
if (!is_null($urlpattern)) {
$this->getSession()->switchToWindow($windownames[1]);
$windowurl = $this->getSession()->getCurrentUrl();
$windowhaspattern = preg_match("/$urlpattern/", $windowurl);
$this->getSession()->switchToWindow($windownames[0]);
if ($not === $windowhaspattern) {
throw new ExpectationException(
$not
? "Did not expect the app to have opened a browser tab with pattern '$urlpattern'"
: "Browser tab url does not match pattern '$urlpattern', it is '$windowurl'",
$this->getSession()->getDriver()
);
}
}
return true;
});
}
@ -895,6 +913,11 @@ class behat_app extends behat_base {
if (count($names) !== 2) {
throw new DriverException('Expected to see 2 tabs open, not ' . count($names));
}
// Make sure the browser tab is selected.
if ($this->getSession()->getWindowName() !== $names[1]) {
$this->getSession()->switchToWindow($names[1]);
}
$this->execute_script('window.close()');
$this->getSession()->switchToWindow($names[0]);
}

View File

@ -0,0 +1,48 @@
@app @javascript
Feature: It opens external links properly.
Background:
Given the following "users" exist:
| username |
| student1 |
And the following "courses" exist:
| fullname | shortname |
| Course 1 | C1 |
And the following "course enrolments" exist:
| user | course | role |
| student1 | C1 | student |
And the following "activities" exist:
| activity | name | intro | course | idnumber |
| forum | Test forum | Test forum | C1 | forum |
And the following forum discussions exist in course "Course 1":
| forum | user | name | message |
| Test forum | student1 | Forum topic | See <a href="https://moodle.org/">moodle.org</a> |
Scenario: Click an external link
When I enter the app
And I log in as "student1"
And I press "Course 1" near "Course overview" in the app
And I press "Test forum" in the app
And I press "Forum topic" in the app
And I press "moodle.org" in the app
Then I should find "You are about to leave the app" in the app
When I press "Cancel" in the app
And I press "moodle.org" in the app
And I press "OK" in the app
Then the app should have opened a browser tab with url "moodle.org"
When I close the browser tab opened by the app
And I press the back button in the app
And I press the page menu button in the app
And I press "Open in browser" in the app
Then the app should have opened a browser tab
When I close the browser tab opened by the app
And I press "Forum topic" in the app
And I press "moodle.org" in the app
And I select "Don't show again." in the app
And I press "OK" in the app
And I close the browser tab opened by the app
And I press "moodle.org" in the app
Then the app should have opened a browser tab with url "moodle.org"