summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDaniel Calviño Sánchez <danxuliu@gmail.com>2018-07-21 16:02:59 +0200
committerDaniel Calviño Sánchez <danxuliu@gmail.com>2018-07-21 17:31:11 +0200
commit70262fb11a9e165fe3f6747c58acad99a8946904 (patch)
tree51d5798ddc15a37a3a83ef135bf432b989ac420c /tests
parentda0bdd1391d86046662e3e3cee046a48ffb58d22 (diff)
downloadnextcloud-server-70262fb11a9e165fe3f6747c58acad99a8946904.tar.gz
nextcloud-server-70262fb11a9e165fe3f6747c58acad99a8946904.zip
Adjust acceptance tests to the new share link UI
The share link UI no longer uses its own layout below the other shares; now it is shown as a share row with a menu for the actions (except enabling it, which is shown in the row itself), just like the other shares. The share link is no longer shown, either; now the link is got by clicking on a "Copy URL" menu item, which copies the link to the clipboard. As the clipboard is not accessible from the acceptance tests the URL is now extracted from the attributes of that menu item (although the menu item is clicked anyway to mimic the user behaviour). Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/acceptance/features/bootstrap/FilesAppContext.php90
1 files changed, 66 insertions, 24 deletions
diff --git a/tests/acceptance/features/bootstrap/FilesAppContext.php b/tests/acceptance/features/bootstrap/FilesAppContext.php
index 53d365b1b09..ab9fc8fe29c 100644
--- a/tests/acceptance/features/bootstrap/FilesAppContext.php
+++ b/tests/acceptance/features/bootstrap/FilesAppContext.php
@@ -187,21 +187,49 @@ class FilesAppContext implements Context, ActorAwareInterface {
/**
* @return Locator
*/
- public static function shareLinkCheckbox() {
- // forThe()->checkbox("Share link") can not be used here; that would
- // return the checkbox itself, but the element that the user interacts
- // with is the label.
- return Locator::forThe()->xpath("//label[normalize-space() = 'Share link']")->
+ public static function shareLinkRow() {
+ return Locator::forThe()->id("shareLink")->
descendantOf(self::detailsView())->
+ describedAs("Share link row in the details view in Files app");
+ }
+
+ /**
+ * @return Locator
+ */
+ public static function shareLinkCheckbox() {
+ // forThe()->checkbox("Enable") can not be used here; that would return
+ // the checkbox itself, but the element that the user interacts with is
+ // the label.
+ return Locator::forThe()->xpath("//label[normalize-space() = 'Enable']")->
+ descendantOf(self::shareLinkRow())->
describedAs("Share link checkbox in the details view in Files app");
}
/**
* @return Locator
*/
- public static function shareLinkField() {
- return Locator::forThe()->css(".linkText")->descendantOf(self::detailsView())->
- describedAs("Share link field in the details view in Files app");
+ public static function shareLinkMenuButton() {
+ return Locator::forThe()->css(".share-menu > .icon")->
+ descendantOf(self::shareLinkRow())->
+ describedAs("Share link menu button in the details view in Files app");
+ }
+
+ /**
+ * @return Locator
+ */
+ public static function shareLinkMenu() {
+ return Locator::forThe()->css(".share-menu > .menu")->
+ descendantOf(self::shareLinkRow())->
+ describedAs("Share link menu in the details view in Files app");
+ }
+
+ /**
+ * @return Locator
+ */
+ public static function copyUrlMenuItem() {
+ return Locator::forThe()->xpath("//a[normalize-space() = 'Copy URL']")->
+ descendantOf(self::shareLinkMenu())->
+ describedAs("Copy URL menu item in the share link menu in the details view in Files app");
}
/**
@@ -212,7 +240,7 @@ class FilesAppContext implements Context, ActorAwareInterface {
// that would return the radio button itself, but the element that the
// user interacts with is the label.
return Locator::forThe()->xpath("//label[normalize-space() = 'Allow upload and editing']")->
- descendantOf(self::detailsView())->
+ descendantOf(self::shareLinkMenu())->
describedAs("Allow upload and editing radio button in the details view in Files app");
}
@@ -224,7 +252,7 @@ class FilesAppContext implements Context, ActorAwareInterface {
// would return the checkbox itself, but the element that the user
// interacts with is the label.
return Locator::forThe()->xpath("//label[normalize-space() = 'Password protect']")->
- descendantOf(self::detailsView())->
+ descendantOf(self::shareLinkMenu())->
describedAs("Password protect checkbox in the details view in Files app");
}
@@ -232,7 +260,7 @@ class FilesAppContext implements Context, ActorAwareInterface {
* @return Locator
*/
public static function passwordProtectField() {
- return Locator::forThe()->css(".linkPassText")->descendantOf(self::detailsView())->
+ return Locator::forThe()->css(".linkPassText")->descendantOf(self::shareLinkMenu())->
describedAs("Password protect field in the details view in Files app");
}
@@ -240,7 +268,7 @@ class FilesAppContext implements Context, ActorAwareInterface {
* @return Locator
*/
public static function passwordProtectWorkingIcon() {
- return Locator::forThe()->css(".linkPass .icon-loading-small")->descendantOf(self::detailsView())->
+ return Locator::forThe()->css(".linkPassMenu .icon-loading-small")->descendantOf(self::shareLinkMenu())->
describedAs("Password protect working icon in the details view in Files app");
}
@@ -278,17 +306,14 @@ class FilesAppContext implements Context, ActorAwareInterface {
* @Given I write down the shared link
*/
public function iWriteDownTheSharedLink() {
- // The shared link field always exists in the DOM (once the "Sharing"
- // tab is loaded), but its value is the actual shared link only when it
- // is visible.
- if (!WaitFor::elementToBeEventuallyShown(
- $this->actor,
- self::shareLinkField(),
- $timeout = 10 * $this->actor->getFindTimeoutMultiplier())) {
- PHPUnit_Framework_Assert::fail("The shared link was not shown yet after $timeout seconds");
- }
+ $this->showShareLinkMenuIfNeeded();
- $this->actor->getSharedNotebook()["shared link"] = $this->actor->find(self::shareLinkField())->getValue();
+ $this->actor->find(self::copyUrlMenuItem(), 2)->click();
+
+ // Clicking on the menu item copies the link to the clipboard, but it is
+ // not possible to access that value from the acceptance tests. Due to
+ // this the value of the attribute that holds the URL is used instead.
+ $this->actor->getSharedNotebook()["shared link"] = $this->actor->find(self::copyUrlMenuItem(), 2)->getWrappedElement()->getAttribute("data-clipboard-text");
}
/**
@@ -313,14 +338,18 @@ class FilesAppContext implements Context, ActorAwareInterface {
* @When I set the shared link as editable
*/
public function iSetTheSharedLinkAsEditable() {
- $this->actor->find(self::allowUploadAndEditingRadioButton(), 10)->click();
+ $this->showShareLinkMenuIfNeeded();
+
+ $this->actor->find(self::allowUploadAndEditingRadioButton(), 2)->click();
}
/**
* @When I protect the shared link with the password :password
*/
public function iProtectTheSharedLinkWithThePassword($password) {
- $this->actor->find(self::passwordProtectCheckbox(), 10)->click();
+ $this->showShareLinkMenuIfNeeded();
+
+ $this->actor->find(self::passwordProtectCheckbox(), 2)->click();
$this->actor->find(self::passwordProtectField(), 2)->setValue($password . "\r");
}
@@ -460,4 +489,17 @@ class FilesAppContext implements Context, ActorAwareInterface {
$this->iSeeThatTheWorkingIconForPasswordProtectIsEventuallyNotShown();
}
+ private function showShareLinkMenuIfNeeded() {
+ // In some cases the share menu is hidden after clicking on an action of
+ // the menu. Therefore, if the menu is visible, wait a little just in
+ // case it is in the process of being hidden due to a previous action,
+ // in which case it is shown again.
+ if (WaitFor::elementToBeEventuallyNotShown(
+ $this->actor,
+ self::shareLinkMenu(),
+ $timeout = 2 * $this->actor->getFindTimeoutMultiplier())) {
+ $this->actor->find(self::shareLinkMenuButton(), 10)->click();
+ }
+ }
+
}