Merge pull request #8731 from nextcloud/acceptance-header-tests
Header acceptance features
This commit is contained in:
commit
dc5d4f96b0
|
@ -570,6 +570,13 @@ pipeline:
|
||||||
when:
|
when:
|
||||||
matrix:
|
matrix:
|
||||||
TESTS-ACCEPTANCE: app-theming
|
TESTS-ACCEPTANCE: app-theming
|
||||||
|
acceptance-header:
|
||||||
|
image: nextcloudci/integration-php7.0:integration-php7.0-6
|
||||||
|
commands:
|
||||||
|
- tests/acceptance/run-local.sh --timeout-multiplier 10 --nextcloud-server-domain acceptance-header --selenium-server selenium:4444 allow-git-repository-modifications features/header.feature
|
||||||
|
when:
|
||||||
|
matrix:
|
||||||
|
TESTS-ACCEPTANCE: header
|
||||||
acceptance-login:
|
acceptance-login:
|
||||||
image: nextcloudci/integration-php7.0:integration-php7.0-6
|
image: nextcloudci/integration-php7.0:integration-php7.0-6
|
||||||
commands:
|
commands:
|
||||||
|
@ -739,6 +746,8 @@ matrix:
|
||||||
TESTS-ACCEPTANCE: app-files
|
TESTS-ACCEPTANCE: app-files
|
||||||
- TESTS: acceptance
|
- TESTS: acceptance
|
||||||
TESTS-ACCEPTANCE: app-theming
|
TESTS-ACCEPTANCE: app-theming
|
||||||
|
- TESTS: acceptance
|
||||||
|
TESTS-ACCEPTANCE: header
|
||||||
- TESTS: acceptance
|
- TESTS: acceptance
|
||||||
TESTS-ACCEPTANCE: login
|
TESTS-ACCEPTANCE: login
|
||||||
- TESTS: jsunit
|
- TESTS: jsunit
|
||||||
|
|
|
@ -11,6 +11,7 @@ default:
|
||||||
|
|
||||||
- AppNavigationContext
|
- AppNavigationContext
|
||||||
- CommentsAppContext
|
- CommentsAppContext
|
||||||
|
- ContactsMenuContext
|
||||||
- FeatureContext
|
- FeatureContext
|
||||||
- FileListContext
|
- FileListContext
|
||||||
- FilesAppContext
|
- FilesAppContext
|
||||||
|
|
|
@ -9,15 +9,6 @@ Feature: access-levels
|
||||||
And I see that the "Help" item in the Settings menu is shown
|
And I see that the "Help" item in the Settings menu is shown
|
||||||
And I see that the "Log out" item in the Settings menu is shown
|
And I see that the "Log out" item in the Settings menu is shown
|
||||||
|
|
||||||
Scenario: admin users can see admin-level items in the Settings menu
|
|
||||||
Given I am logged in as the admin
|
|
||||||
When I open the Settings menu
|
|
||||||
Then I see that the Settings menu is shown
|
|
||||||
And I see that the "Settings" item in the Settings menu is shown
|
|
||||||
And I see that the "Users" item in the Settings menu is shown
|
|
||||||
And I see that the "Help" item in the Settings menu is shown
|
|
||||||
And I see that the "Log out" item in the Settings menu is shown
|
|
||||||
|
|
||||||
Scenario: regular users cannot see admin-level items on the Settings page
|
Scenario: regular users cannot see admin-level items on the Settings page
|
||||||
Given I am logged in
|
Given I am logged in
|
||||||
When I visit the settings page
|
When I visit the settings page
|
||||||
|
|
|
@ -0,0 +1,147 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv) (skjnldsv@protonmail.com)
|
||||||
|
*
|
||||||
|
* @license GNU AGPL version 3 or any later version
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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 Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
use Behat\Behat\Context\Context;
|
||||||
|
|
||||||
|
class ContactsMenuContext implements Context, ActorAwareInterface {
|
||||||
|
|
||||||
|
use ActorAware;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Locator
|
||||||
|
*/
|
||||||
|
public static function contactsMenuButton() {
|
||||||
|
return Locator::forThe()->xpath("//*[@id = 'header']//*[@id = 'contactsmenu']")->
|
||||||
|
describedAs("Contacts menu button");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Locator
|
||||||
|
*/
|
||||||
|
public static function contactsMenu() {
|
||||||
|
return Locator::forThe()->css(".menu")->
|
||||||
|
descendantOf(self::contactsMenuButton())->
|
||||||
|
describedAs("Contacts menu");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Locator
|
||||||
|
*/
|
||||||
|
public static function contactsMenuSearchInput() {
|
||||||
|
return Locator::forThe()->id("contactsmenu-search")->
|
||||||
|
descendantOf(self::contactsMenu())->
|
||||||
|
describedAs("Contacts menu search input");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Locator
|
||||||
|
*/
|
||||||
|
public static function noResultsMessage() {
|
||||||
|
return Locator::forThe()->xpath("//*[@class = 'emptycontent' and normalize-space() = 'No contacts found']")->
|
||||||
|
descendantOf(self::contactsMenu())->
|
||||||
|
describedAs("No results message in Contacts menu");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Locator
|
||||||
|
*/
|
||||||
|
private static function menuItemFor($contactName) {
|
||||||
|
return Locator::forThe()->xpath("//*[@class = 'contact' and normalize-space() = '$contactName']")->
|
||||||
|
descendantOf(self::contactsMenu())->
|
||||||
|
describedAs($contactName . " contact in Contacts menu");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When I open the Contacts menu
|
||||||
|
*/
|
||||||
|
public function iOpenTheContactsMenu() {
|
||||||
|
$this->actor->find(self::contactsMenuButton(), 10)->click();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When I search for the user :user
|
||||||
|
*/
|
||||||
|
public function iSearchForTheUser($user) {
|
||||||
|
$this->actor->find(self::contactsMenuSearchInput(), 10)->setValue($user . "\r");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then I see that the Contacts menu is shown
|
||||||
|
*/
|
||||||
|
public function iSeeThatTheContactsMenuIsShown() {
|
||||||
|
PHPUnit_Framework_Assert::assertTrue(
|
||||||
|
$this->actor->find(self::contactsMenu(), 10)->isVisible());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then I see that the Contacts menu search input is shown
|
||||||
|
*/
|
||||||
|
public function iSeeThatTheContactsMenuSearchInputIsShown() {
|
||||||
|
PHPUnit_Framework_Assert::assertTrue(
|
||||||
|
$this->actor->find(self::contactsMenuSearchInput(), 10)->isVisible());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then I see that the no results message in the Contacts menu is shown
|
||||||
|
*/
|
||||||
|
public function iSeeThatTheNoResultsMessageInTheContactsMenuIsShown() {
|
||||||
|
PHPUnit_Framework_Assert::assertTrue(
|
||||||
|
$this->actor->find(self::noResultsMessage(), 10)->isVisible());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then I see that the contact :contactName in the Contacts menu is shown
|
||||||
|
*/
|
||||||
|
public function iSeeThatTheContactInTheContactsMenuIsShown($contactName) {
|
||||||
|
PHPUnit_Framework_Assert::assertTrue(
|
||||||
|
$this->actor->find(self::menuItemFor($contactName), 10)->isVisible());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then I see that the contact :contactName in the Contacts menu is not shown
|
||||||
|
*/
|
||||||
|
public function iSeeThatTheContactInTheContactsMenuIsNotShown($contactName) {
|
||||||
|
$this->iSeeThatThecontactsMenuIsShown();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PHPUnit_Framework_Assert::assertFalse(
|
||||||
|
$this->actor->find(self::menuItemFor($contactName))->isVisible());
|
||||||
|
} catch (NoSuchElementException $exception) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then I see that the contact :contactName in the Contacts menu is eventually not shown
|
||||||
|
*/
|
||||||
|
public function iSeeThatTheContactInTheContactsMenuIsEventuallyNotShown($contactName) {
|
||||||
|
$this->iSeeThatThecontactsMenuIsShown();
|
||||||
|
|
||||||
|
if (!WaitFor::elementToBeEventuallyNotShown(
|
||||||
|
$this->actor,
|
||||||
|
self::menuItemFor($contactName),
|
||||||
|
$timeout = 10 * $this->actor->getFindTimeoutMultiplier())) {
|
||||||
|
PHPUnit_Framework_Assert::fail("The $contactName contact in Contacts menu is still shown after $timeout seconds");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,6 +3,7 @@
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @copyright Copyright (c) 2017, Daniel Calviño Sánchez (danxuliu@gmail.com)
|
* @copyright Copyright (c) 2017, Daniel Calviño Sánchez (danxuliu@gmail.com)
|
||||||
|
* @copyright Copyright (c) 2018, John Molakvoæ (skjnldsv) (skjnldsv@protonmail.com)
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
@ -75,6 +76,14 @@ class SettingsMenuContext implements Context, ActorAwareInterface {
|
||||||
describedAs($itemText . " item in Settings panel");
|
describedAs($itemText . " item in Settings panel");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function menuItems() {
|
||||||
|
return $this->actor->find(self::settingsMenu(), 10)
|
||||||
|
->getWrappedElement()->findAll('xpath', '//a');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @When I open the Settings menu
|
* @When I open the Settings menu
|
||||||
*/
|
*/
|
||||||
|
@ -116,6 +125,13 @@ class SettingsMenuContext implements Context, ActorAwareInterface {
|
||||||
$this->actor->find(self::settingsMenu(), 10)->isVisible());
|
$this->actor->find(self::settingsMenu(), 10)->isVisible());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then I see that the Settings menu has only :items items
|
||||||
|
*/
|
||||||
|
public function iSeeThatTheSettingsMenuHasOnlyXItems($items) {
|
||||||
|
PHPUnit_Framework_Assert::assertCount(intval($items), self::menuItems());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Then I see that the :itemText item in the Settings menu is shown
|
* @Then I see that the :itemText item in the Settings menu is shown
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -121,7 +121,7 @@ class ElementWrapper {
|
||||||
* @return \Behat\Mink\Element\Element the wrapped element.
|
* @return \Behat\Mink\Element\Element the wrapped element.
|
||||||
*/
|
*/
|
||||||
public function getWrappedElement() {
|
public function getWrappedElement() {
|
||||||
return $element;
|
return $this->element;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
Feature: header
|
||||||
|
|
||||||
|
Scenario: admin users can see admin-level items in the Settings menu
|
||||||
|
Given I am logged in as the admin
|
||||||
|
When I open the Settings menu
|
||||||
|
Then I see that the Settings menu is shown
|
||||||
|
And I see that the Settings menu has only 5 items
|
||||||
|
And I see that the "Settings" item in the Settings menu is shown
|
||||||
|
And I see that the "Apps" item in the Settings menu is shown
|
||||||
|
And I see that the "Users" item in the Settings menu is shown
|
||||||
|
And I see that the "Help" item in the Settings menu is shown
|
||||||
|
And I see that the "Log out" item in the Settings menu is shown
|
||||||
|
|
||||||
|
Scenario: normal users can see basic items in the Settings menu
|
||||||
|
Given I am logged in
|
||||||
|
When I open the Settings menu
|
||||||
|
Then I see that the Settings menu is shown
|
||||||
|
And I see that the Settings menu has only 3 items
|
||||||
|
And I see that the "Settings" item in the Settings menu is shown
|
||||||
|
And I see that the "Help" item in the Settings menu is shown
|
||||||
|
And I see that the "Log out" item in the Settings menu is shown
|
||||||
|
|
||||||
|
Scenario: other users are seen in the contacts menu
|
||||||
|
Given I am logged in as the admin
|
||||||
|
When I open the Contacts menu
|
||||||
|
Then I see that the Contacts menu is shown
|
||||||
|
And I see that the contact "user0" in the Contacts menu is shown
|
||||||
|
And I see that the contact "admin" in the Contacts menu is not shown
|
||||||
|
|
||||||
|
Scenario: just added users are seen in the contacts menu
|
||||||
|
Given I am logged in as the admin
|
||||||
|
And I open the User settings
|
||||||
|
And I click the New user button
|
||||||
|
And I see that the new user form is shown
|
||||||
|
And I create user user1 with password 123456acb
|
||||||
|
And I see that the list of users contains the user user1
|
||||||
|
When I open the Contacts menu
|
||||||
|
Then I see that the Contacts menu is shown
|
||||||
|
And I see that the contact "user0" in the Contacts menu is shown
|
||||||
|
And I see that the contact "user1" in the Contacts menu is shown
|
||||||
|
And I see that the contact "admin" in the Contacts menu is not shown
|
||||||
|
|
||||||
|
Scenario: search for other users in the contacts menu
|
||||||
|
Given I am logged in as the admin
|
||||||
|
And I open the User settings
|
||||||
|
And I click the New user button
|
||||||
|
And I see that the new user form is shown
|
||||||
|
And I create user user1 with password 123456acb
|
||||||
|
And I see that the list of users contains the user user1
|
||||||
|
And I open the Contacts menu
|
||||||
|
And I see that the Contacts menu is shown
|
||||||
|
And I see that the contact "user0" in the Contacts menu is shown
|
||||||
|
And I see that the contact "user1" in the Contacts menu is shown
|
||||||
|
And I see that the Contacts menu search input is shown
|
||||||
|
When I search for the user "user0"
|
||||||
|
# First check that "user1" is no longer shown to ensure that the search was
|
||||||
|
# made; checking that "user0" is shown or that "admin" is not shown does not
|
||||||
|
# guarantee that (as they were already being shown and not being shown,
|
||||||
|
# respectively, before the search started).
|
||||||
|
Then I see that the contact "user1" in the Contacts menu is eventually not shown
|
||||||
|
And I see that the contact "user0" in the Contacts menu is shown
|
||||||
|
And I see that the contact "admin" in the Contacts menu is not shown
|
||||||
|
|
||||||
|
Scenario: search for unknown users in the contacts menu
|
||||||
|
Given I am logged in as the admin
|
||||||
|
And I open the Contacts menu
|
||||||
|
And I see that the Contacts menu is shown
|
||||||
|
And I see that the contact "user0" in the Contacts menu is shown
|
||||||
|
And I see that the Contacts menu search input is shown
|
||||||
|
When I search for the user "unknownuser"
|
||||||
|
Then I see that the no results message in the Contacts menu is shown
|
||||||
|
And I see that the contact "user0" in the Contacts menu is not shown
|
||||||
|
And I see that the contact "admin" in the Contacts menu is not shown
|
||||||
|
|
Loading…
Reference in New Issue