]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add acceptance tests for reshares when resharing is disabled
authorDaniel Calviño Sánchez <danxuliu@gmail.com>
Tue, 10 Nov 2020 21:16:10 +0000 (22:16 +0100)
committerDaniel Calviño Sánchez <danxuliu@gmail.com>
Wed, 11 Nov 2020 10:51:28 +0000 (11:51 +0100)
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
tests/acceptance/features/app-files-sharing.feature
tests/acceptance/features/bootstrap/FilesAppSharingContext.php
tests/acceptance/features/bootstrap/SettingsContext.php

index b6cde94455c8a55eb61602640267035f1d00891f..4f58d1d17ffe6daa8009bce70228c7134db4b5ae 100644 (file)
@@ -246,6 +246,110 @@ Feature: app-files-sharing
     And I enter in the folder named "Shared folder"
     Then I see that the file list contains a file named "Subfolder"
 
+  Scenario: sharer does not see resharing option for a folder if resharing is disabled in the settings after the share is created
+    Given I am logged in as the admin
+    And I create a new folder named "Shared folder"
+    And I see that the file list contains a file named "Shared folder"
+    And I share "Shared folder" with "user0"
+    And I see that the file is shared with "user0"
+    When I visit the settings page
+    And I open the "Sharing" section of the "Administration" group
+    And I disable resharing
+    And I see that resharing is disabled
+    Then I open the Files app
+    And I open the details view for "Shared folder"
+    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 resharing for "user0" is not available
+
+  Scenario: sharee can not reshare a folder if resharing is disabled in the settings after the share is created
+    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 create a new folder named "Shared folder"
+    And I see that the file list contains a file named "Shared folder"
+    And I share "Shared folder" with "user0"
+    And I see that the file is shared with "user0"
+    And I visit the settings page
+    And I open the "Sharing" section of the "Administration" group
+    And I disable resharing
+    And I see that resharing is disabled
+    When 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 "Shared folder"
+    And I open the details view for "Shared folder"
+    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"
+    And I see that resharing the file is not allowed
+
+  Scenario: sharee can unshare a folder if resharing is disabled in the settings after the share is created
+    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 create a new folder named "Shared folder"
+    And I see that the file list contains a file named "Shared folder"
+    And I share "Shared folder" 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
+    And I share "Shared folder" with "user1"
+    And I act as John
+    And I visit the settings page
+    And I open the "Sharing" section of the "Administration" group
+    And I disable resharing
+    And I see that resharing is disabled
+    When 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 "Shared folder"
+    And I open the details view for "Shared folder"
+    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"
+    And I unshare the share with "user1"
+    And I see that the file is not shared with "user1"
+
+  Scenario: resharee sees a folder created by the owner in a shared folder if resharing is disabled in the settings after the share is created
+    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 Jim
+    And I am logged in as "user1"
+    And I act as John
+    And I create a new folder named "Shared folder"
+    And I see that the file list contains a file named "Shared folder"
+    And I share "Shared folder" 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
+    And I share "Shared folder" with "user1"
+    And I act as John
+    And I visit the settings page
+    And I open the "Sharing" section of the "Administration" group
+    And I disable resharing
+    And I see that resharing is disabled
+    And I open the Files app
+    And I enter in the folder named "Shared folder"
+    And I create a new folder named "Subfolder"
+    And I see that the file list contains a file named "Subfolder"
+    When I act as Jim
+    # The Files app is open again to reload the file list
+    And I open the Files app
+    And I enter in the folder named "Shared folder"
+    Then I see that the file list contains a file named "Subfolder"
+
   Scenario: sharee can not reshare a folder if the sharer disables it
     Given I act as John
     And I am logged in as the admin
index 24ab36548ebbfb93052025fd8398938df0ca90ae..a75c0ddda32b4ee3b3352d805e3a276362508b0d 100644 (file)
@@ -171,6 +171,15 @@ class FilesAppSharingContext implements Context, ActorAwareInterface {
                return self::permissionCheckboxInputFor($sharedWithName, $shareWithMenuTriggerElement, 'Allow resharing');
        }
 
+       /**
+        * @return Locator
+        */
+       public static function unshareButton($sharedWithName, $shareWithMenuTriggerElement) {
+               return Locator::forThe()->xpath("//li[contains(concat(' ', normalize-space(@class), ' '), ' action ')]//button[normalize-space() = 'Unshare']")->
+                               descendantOf(self::shareWithMenu($sharedWithName, $shareWithMenuTriggerElement))->
+                               describedAs("Unshare button in the share with $sharedWithName menu in the details view in Files app");
+       }
+
        /**
         * @return Locator
         */
@@ -471,6 +480,16 @@ class FilesAppSharingContext implements Context, ActorAwareInterface {
                $this->actor->find(self::canReshareCheckbox($shareWithName, $shareWithMenuTriggerElement), 2)->click();
        }
 
+       /**
+        * @When I unshare the share with :shareWithName
+        */
+       public function iUnshareTheFileWith($shareWithName) {
+               $this->showShareWithMenuIfNeeded($shareWithName);
+
+               $shareWithMenuTriggerElement = $this->actor->find(self::shareWithMenuTrigger($shareWithName), 2);
+               $this->actor->find(self::unshareButton($shareWithName, $shareWithMenuTriggerElement), 2)->click();
+       }
+
        /**
         * @Then I see that the file is shared with me by :sharedByName
         */
@@ -487,6 +506,18 @@ class FilesAppSharingContext implements Context, ActorAwareInterface {
                                $this->actor->find(self::sharedWithRow($sharedWithName), 10)->isVisible());
        }
 
+       /**
+        * @Then I see that the file is not shared with :sharedWithName
+        */
+       public function iSeeThatTheFileIsNotSharedWith($sharedWithName) {
+               if (!WaitFor::elementToBeEventuallyNotShown(
+                               $this->actor,
+                               self::sharedWithRow($sharedWithName),
+                               $timeout = 10 * $this->actor->getFindTimeoutMultiplier())) {
+                       PHPUnit_Framework_Assert::fail("The shared with $sharedWithName row is still shown after $timeout seconds");
+               }
+       }
+
        /**
         * @Then I see that resharing the file is not allowed
         */
@@ -563,6 +594,21 @@ class FilesAppSharingContext implements Context, ActorAwareInterface {
                                $this->actor->find(self::canCreateCheckboxInput($sharedWithName, $shareWithMenuTriggerElement), 10)->isChecked());
        }
 
+       /**
+        * @Then I see that resharing for :sharedWithName is not available
+        */
+       public function iSeeThatResharingForIsNotAvailable($sharedWithName) {
+               $this->showShareWithMenuIfNeeded($sharedWithName);
+
+               $shareWithMenuTriggerElement = $this->actor->find(self::shareWithMenuTrigger($sharedWithName), 10);
+               if (!WaitFor::elementToBeEventuallyNotShown(
+                               $this->actor,
+                               self::canReshareCheckbox($sharedWithName, $shareWithMenuTriggerElement),
+                               $timeout = 10 * $this->actor->getFindTimeoutMultiplier())) {
+                       PHPUnit_Framework_Assert::fail("The resharing checkbox for $sharedWithName is still shown after $timeout seconds");
+               }
+       }
+
        /**
         * @Then I see that :sharedWithName can reshare the share
         */
index 60499c96bd1418542be7acce6e212aae8459b2a6..2a3aeff2f2e8c65f25f4e6464b65f1c72c4c84c8 100644 (file)
@@ -45,6 +45,25 @@ class SettingsContext implements Context, ActorAwareInterface {
                                describedAs("Accept shares by default checkbox input in Sharing section in Personal Sharing Settings");
        }
 
+       /**
+        * @return Locator
+        */
+       public static function allowResharingCheckbox() {
+               // forThe()->checkbox("Allow resharing") 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() = 'Allow resharing']")->
+                               describedAs("Allow resharing checkbox in Sharing section in Administration Sharing Settings");
+       }
+
+       /**
+        * @return Locator
+        */
+       public static function allowResharingCheckboxInput() {
+               return Locator::forThe()->checkbox("Allow resharing")->
+                               describedAs("Allow resharing checkbox input in Sharing section in Administration Sharing Settings");
+       }
+
        /**
         * @return Locator
         */
@@ -130,6 +149,15 @@ class SettingsContext implements Context, ActorAwareInterface {
                $this->actor->find(self::acceptSharesByDefaultCheckbox(), 2)->click();
        }
 
+       /**
+        * @When I disable resharing
+        */
+       public function iDisableResharing() {
+               $this->iSeeThatResharingIsEnabled();
+
+               $this->actor->find(self::allowResharingCheckbox(), 2)->click();
+       }
+
        /**
         * @When I enable restricting username autocompletion to groups
         */
@@ -156,6 +184,22 @@ class SettingsContext implements Context, ActorAwareInterface {
                                $this->actor->find(self::acceptSharesByDefaultCheckboxInput(), 10)->isChecked());
        }
 
+       /**
+        * @Then I see that resharing is enabled
+        */
+       public function iSeeThatResharingIsEnabled() {
+               PHPUnit_Framework_Assert::assertTrue(
+                               $this->actor->find(self::allowResharingCheckboxInput(), 10)->isChecked());
+       }
+
+       /**
+        * @Then I see that resharing is disabled
+        */
+       public function iSeeThatResharingIsDisabled() {
+               PHPUnit_Framework_Assert::assertFalse(
+                               $this->actor->find(self::allowResharingCheckboxInput(), 10)->isChecked());
+       }
+
        /**
         * @Then I see that username autocompletion is restricted to groups
         */