]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add acceptance tests for sharing a file with another user
authorDaniel Calviño Sánchez <danxuliu@gmail.com>
Thu, 22 Nov 2018 17:56:15 +0000 (18:56 +0100)
committerDaniel Calviño Sánchez <danxuliu@gmail.com>
Fri, 23 Nov 2018 14:14:43 +0000 (15:14 +0100)
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
tests/acceptance/features/app-files.feature
tests/acceptance/features/bootstrap/FilesAppContext.php

index 89d622493c0bc63a683c0856fb30512e813e2621..8c2339079105ffabc8cd90f4b04e112027cfc973 100644 (file)
@@ -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"
index 8758678494128863fd6b57d674379bb6dc7fe17a..d67bcc51400b28ab51ba705be5147395edba88b0 100644 (file)
@@ -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
         */