From 971c5482566e029c45b7c7ef9735a7f73a7eb702 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Thu, 22 Nov 2018 18:56:15 +0100 Subject: [PATCH] Add acceptance tests for sharing a file with another user MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Calviño Sánchez --- tests/acceptance/features/app-files.feature | 56 ++++++++++++ .../features/bootstrap/FilesAppContext.php | 87 +++++++++++++++++++ 2 files changed, 143 insertions(+) diff --git a/tests/acceptance/features/app-files.feature b/tests/acceptance/features/app-files.feature index 89d622493c0..8c233907910 100644 --- a/tests/acceptance/features/app-files.feature +++ b/tests/acceptance/features/app-files.feature @@ -265,6 +265,62 @@ Feature: app-files # download starts no page redirection And I see that the current page is the Authenticate page for the direct download shared link I wrote down + Scenario: share a file with another user + Given I act as John + And I am logged in as the admin + And I act as Jane + And I am logged in + And I act as John + And I rename "welcome.txt" to "farewell.txt" + And I see that the file list contains a file named "farewell.txt" + When I share "farewell.txt" with "user0" + And I see that the file is shared with "user0" + And I act as Jane + # The Files app is open again to reload the file list + And I open the Files app + Then I see that the file list contains a file named "farewell.txt" + And I open the details view for "farewell.txt" + And I see that the details view is open + And I open the "Sharing" tab in the details view + And I see that the "Sharing" tab in the details view is eventually loaded + And I see that the file is shared with me by "admin" + + Scenario: share a file with another user who already has a file with that name + Given I act as John + And I am logged in as the admin + And I act as Jane + And I am logged in + And I act as John + When I share "welcome.txt" with "user0" + And I see that the file is shared with "user0" + And I act as Jane + # The Files app is open again to reload the file list + And I open the Files app + Then I see that the file list contains a file named "welcome (2).txt" + And I open the details view for "welcome (2).txt" + And I see that the details view is open + And I open the "Sharing" tab in the details view + And I see that the "Sharing" tab in the details view is eventually loaded + And I see that the file is shared with me by "admin" + + Scenario: share a skeleton file with another user before first login + # If a file is shared with a user before her first login the skeleton would + # not have been created, so if the shared file has the same name as one from + # the skeleton the shared file will take its place and the skeleton file + # will not be added. + Given I act as John + And I am logged in as the admin + When I share "welcome.txt" with "user0" + And I see that the file is shared with "user0" + And I act as Jane + And I am logged in + Then I see that the file list contains a file named "welcome.txt" + And I open the details view for "welcome.txt" + And I see that the details view is open + And I open the "Sharing" tab in the details view + And I see that the "Sharing" tab in the details view is eventually loaded + And I see that the file is shared with me by "admin" + Scenario: marking a file as favorite causes the file list to be sorted again Given I am logged in And I create a new folder named "A name alphabetically lower than welcome.txt" diff --git a/tests/acceptance/features/bootstrap/FilesAppContext.php b/tests/acceptance/features/bootstrap/FilesAppContext.php index 87586784941..d67bcc51400 100644 --- a/tests/acceptance/features/bootstrap/FilesAppContext.php +++ b/tests/acceptance/features/bootstrap/FilesAppContext.php @@ -42,6 +42,23 @@ class FilesAppContext implements Context, ActorAwareInterface { "Deleted files" => "trashbin" ]; } + /** + * @return Locator + */ + private static function appMenu() { + return Locator::forThe()->id("appmenu")-> + describedAs("App menu in header"); + } + + /** + * @return Locator + */ + public static function filesItemInAppMenu() { + return Locator::forThe()->xpath("/li[@data-id = 'files']")-> + descendantOf(self::appMenu())-> + describedAs("Files item in app menu in header"); + } + /** * @return Locator */ @@ -211,6 +228,44 @@ class FilesAppContext implements Context, ActorAwareInterface { describedAs("Loading icon for tab named $tabName in details view in Files app"); } + /** + * @return Locator + */ + public static function sharedByLabel() { + return Locator::forThe()->css(".reshare")-> + descendantOf(self::detailsView())-> + describedAs("Shared by label in the details view in Files app"); + } + + /** + * @return Locator + */ + public static function shareWithInput() { + return Locator::forThe()->css(".shareWithField")-> + descendantOf(self::detailsView())-> + describedAs("Share with input in the details view in Files app"); + } + + /** + * @return Locator + */ + public static function shareeList() { + return Locator::forThe()->css(".shareeListView")-> + descendantOf(self::detailsView())-> + describedAs("Sharee list in the details view in Files app"); + } + + /** + * @return Locator + */ + public static function sharedWithRow($sharedWithName) { + // "username" class is used for any type of share, not only for shares + // with users. + return Locator::forThe()->xpath("//span[contains(concat(' ', normalize-space(@class), ' '), ' username ') and normalize-space() = '$sharedWithName']/ancestor::li")-> + descendantOf(self::shareeList())-> + describedAs("Shared with $sharedWithName row in the details view in Files app"); + } + /** * @return Locator */ @@ -299,6 +354,13 @@ class FilesAppContext implements Context, ActorAwareInterface { describedAs("Password protect working icon in the details view in Files app"); } + /** + * @Given I open the Files app + */ + public function iOpenTheFilesApp() { + $this->actor->find(self::filesItemInAppMenu(), 10)->click(); + } + /** * @Given I close the details view */ @@ -329,6 +391,15 @@ class FilesAppContext implements Context, ActorAwareInterface { $this->actor->find(self::shareLinkCheckbox(), 5)->click(); } + /** + * @Given I share :fileName with :shareWithName + */ + public function iShareWith($fileName, $shareWithName) { + $this->actor->find(FileListContext::shareActionForFile(self::currentSectionMainView(), $fileName), 10)->click(); + + $this->actor->find(self::shareWithInput(), 5)->setValue($shareWithName . "\r"); + } + /** * @Given I write down the shared link */ @@ -521,6 +592,22 @@ class FilesAppContext implements Context, ActorAwareInterface { } } + /** + * @Then I see that the file is shared with me by :sharedByName + */ + public function iSeeThatTheFileIsSharedWithMeBy($sharedByName) { + PHPUnit_Framework_Assert::assertEquals( + $this->actor->find(self::sharedByLabel(), 10)->getText(), "Shared with you by $sharedByName"); + } + + /** + * @Then I see that the file is shared with :sharedWithName + */ + public function iSeeThatTheFileIsSharedWith($sharedWithName) { + PHPUnit_Framework_Assert::assertTrue( + $this->actor->find(self::sharedWithRow($sharedWithName), 10)->isVisible()); + } + /** * @Then I see that the working icon for password protect is shown */ -- 2.39.5