diff options
author | Morris Jobke <hey@morrisjobke.de> | 2019-01-23 18:48:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-23 18:48:21 +0100 |
commit | ae25fd23898561d12e970e7cce79a804fba069be (patch) | |
tree | 99a83fa88ad8ff3eb7163b53a7e8beaccef2c7b1 /tests/acceptance/features/bootstrap/FileListContext.php | |
parent | d549954024144c6ac220edb757efea75fbaf17ff (diff) | |
parent | 374b02c7bc0d69d9e54213bc95008e1d8c578f47 (diff) | |
download | nextcloud-server-ae25fd23898561d12e970e7cce79a804fba069be.tar.gz nextcloud-server-ae25fd23898561d12e970e7cce79a804fba069be.zip |
Merge pull request #13217 from nextcloud/add-acceptance-tests-for-moving-and-copying-files
Add acceptance tests for moving and copying files
Diffstat (limited to 'tests/acceptance/features/bootstrap/FileListContext.php')
-rw-r--r-- | tests/acceptance/features/bootstrap/FileListContext.php | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/tests/acceptance/features/bootstrap/FileListContext.php b/tests/acceptance/features/bootstrap/FileListContext.php index ee35de40c5e..cdf2e6acc6e 100644 --- a/tests/acceptance/features/bootstrap/FileListContext.php +++ b/tests/acceptance/features/bootstrap/FileListContext.php @@ -133,6 +133,48 @@ class FileListContext implements Context, ActorAwareInterface { /** * @return Locator */ + public static function fileListHeader($fileListAncestor) { + return Locator::forThe()->css("thead")-> + descendantOf($fileListAncestor)-> + describedAs("Header in file list"); + } + + /** + * @return Locator + */ + public static function selectedFilesActionsMenuButton($fileListAncestor) { + return Locator::forThe()->css(".actions-selected")-> + descendantOf(self::fileListHeader($fileListAncestor))-> + describedAs("Selected files actions menu button in file list"); + } + + /** + * @return Locator + */ + public static function selectedFilesActionsMenu() { + return Locator::forThe()->css(".filesSelectMenu")-> + describedAs("Selected files actions menu in file list"); + } + + /** + * @return Locator + */ + private static function selectedFilesActionsMenuItemFor($itemText) { + return Locator::forThe()->xpath("//a[normalize-space() = '$itemText']")-> + descendantOf(self::selectedFilesActionsMenu())-> + describedAs($itemText . " item in selected files actions menu in file list"); + } + + /** + * @return Locator + */ + public static function moveOrCopySelectedFilesMenuItem() { + return self::selectedFilesActionsMenuItemFor("Move or copy"); + } + + /** + * @return Locator + */ public static function rowForFile($fileListAncestor, $fileName) { return Locator::forThe()->xpath("//*[@id = 'fileList']//span[contains(concat(' ', normalize-space(@class), ' '), ' nametext ') and normalize-space() = '$fileName']/ancestor::tr")-> descendantOf($fileListAncestor)-> @@ -151,6 +193,26 @@ class FileListContext implements Context, ActorAwareInterface { /** * @return Locator */ + public static function selectionCheckboxForFile($fileListAncestor, $fileName) { + // Note that the element that the user interacts with is the label, not + // the checbox itself. + return Locator::forThe()->css(".selection label")-> + descendantOf(self::rowForFile($fileListAncestor, $fileName))-> + describedAs("Selection checkbox for file $fileName in file list"); + } + + /** + * @return Locator + */ + public static function selectionCheckboxInputForFile($fileListAncestor, $fileName) { + return Locator::forThe()->css(".selection input[type=checkbox]")-> + descendantOf(self::rowForFile($fileListAncestor, $fileName))-> + describedAs("Selection checkbox input for file $fileName in file list"); + } + + /** + * @return Locator + */ public static function favoriteMarkForFile($fileListAncestor, $fileName) { return Locator::forThe()->css(".favorite-mark")-> descendantOf(self::rowForFile($fileListAncestor, $fileName))-> @@ -268,6 +330,13 @@ class FileListContext implements Context, ActorAwareInterface { /** * @return Locator */ + public static function moveOrCopyMenuItem() { + return self::fileActionsMenuItemFor("Move or copy"); + } + + /** + * @return Locator + */ public static function viewFileInFolderMenuItem() { return self::fileActionsMenuItemFor("View in folder"); } @@ -297,6 +366,24 @@ class FileListContext implements Context, ActorAwareInterface { } /** + * @Given I select :fileName + */ + public function iSelect($fileName) { + $this->iSeeThatIsNotSelected($fileName); + + $this->actor->find(self::selectionCheckboxForFile($this->fileListAncestor, $fileName), 10)->click(); + } + + /** + * @Given I start the move or copy operation for the selected files + */ + public function iStartTheMoveOrCopyOperationForTheSelectedFiles() { + $this->actor->find(self::selectedFilesActionsMenuButton($this->fileListAncestor), 10)->click(); + + $this->actor->find(self::moveOrCopySelectedFilesMenuItem(), 2)->click(); + } + + /** * @Given I open the details view for :fileName */ public function iOpenTheDetailsViewFor($fileName) { @@ -326,6 +413,15 @@ class FileListContext implements Context, ActorAwareInterface { } /** + * @Given I start the move or copy operation for :fileName + */ + public function iStartTheMoveOrCopyOperationFor($fileName) { + $this->actor->find(self::fileActionsMenuButtonForFile($this->fileListAncestor, $fileName), 10)->click(); + + $this->actor->find(self::moveOrCopyMenuItem(), 2)->click(); + } + + /** * @Given I mark :fileName as favorite */ public function iMarkAsFavorite($fileName) { @@ -411,6 +507,18 @@ class FileListContext implements Context, ActorAwareInterface { } /** + * @Then I see that the file list does not contain a file named :fileName + */ + public function iSeeThatTheFileListDoesNotContainAFileNamed($fileName) { + if (!WaitFor::elementToBeEventuallyNotShown( + $this->actor, + self::rowForFile($this->fileListAncestor, $fileName), + $timeout = 10 * $this->actor->getFindTimeoutMultiplier())) { + PHPUnit_Framework_Assert::fail("The file list still contains a file named $fileName after $timeout seconds"); + } + } + + /** * @Then I see that :fileName1 precedes :fileName2 in the file list */ public function iSeeThatPrecedesInTheFileList($fileName1, $fileName2) { @@ -418,6 +526,13 @@ class FileListContext implements Context, ActorAwareInterface { } /** + * @Then I see that :fileName is not selected + */ + public function iSeeThatIsNotSelected($fileName) { + PHPUnit_Framework_Assert::assertFalse($this->actor->find(self::selectionCheckboxInputForFile($this->fileListAncestor, $fileName), 10)->isChecked()); + } + + /** * @Then I see that :fileName is marked as favorite */ public function iSeeThatIsMarkedAsFavorite($fileName) { |