From b6dec0be998f68c7398de2fbfd7bb666a3f3ac2d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= <danxuliu@gmail.com>
Date: Tue, 10 Nov 2020 22:16:50 +0100
Subject: [PATCH] Add acceptance tests for reshares by link when resharing is
 disabled
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
---
 .../features/app-files-sharing-link.feature   | 80 +++++++++++++++++++
 .../bootstrap/FilesAppSharingContext.php      | 31 +++++++
 2 files changed, 111 insertions(+)

diff --git a/tests/acceptance/features/app-files-sharing-link.feature b/tests/acceptance/features/app-files-sharing-link.feature
index 38680f110d4..d89c7b4289d 100644
--- a/tests/acceptance/features/app-files-sharing-link.feature
+++ b/tests/acceptance/features/app-files-sharing-link.feature
@@ -166,3 +166,83 @@ Feature: app-files-sharing-link
     And I authenticate with password "abcdef"
     # 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: sharee can not reshare by link 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 rename "welcome.txt" to "farewell.txt"
+    And I see that the file list contains a file named "farewell.txt"
+    And I share "farewell.txt" 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 "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"
+    And I see that resharing the file by link is not available
+
+  Scenario: sharee can unshare a reshare by link if resharing is disabled in the settings after the reshare 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 rename "welcome.txt" to "farewell.txt"
+    And I see that the file list contains a file named "farewell.txt"
+    And 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
+    And I share the link for "farewell.txt"
+    And I write down the shared link
+    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
+    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 unshare the link share
+    Then I see that resharing the file by link is not available
+
+  Scenario: reshare by link can be accessed if resharing is disabled in the settings after the reshare 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 rename "welcome.txt" to "farewell.txt"
+    And I see that the file list contains a file named "farewell.txt"
+    And 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
+    And I share the link for "farewell.txt"
+    And I write down the shared link
+    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 Jim
+    And I visit the shared link I wrote down
+    Then I see that the current page is the shared link I wrote down
+    And I see that the shared file preview shows the text "Welcome to your Nextcloud account!"
diff --git a/tests/acceptance/features/bootstrap/FilesAppSharingContext.php b/tests/acceptance/features/bootstrap/FilesAppSharingContext.php
index a75c0ddda32..07ebbba1a36 100644
--- a/tests/acceptance/features/bootstrap/FilesAppSharingContext.php
+++ b/tests/acceptance/features/bootstrap/FilesAppSharingContext.php
@@ -326,6 +326,15 @@ class FilesAppSharingContext implements Context, ActorAwareInterface {
 				describedAs("Password protect by Talk checkbox input in the details view in Files app");
 	}
 
+	/**
+	 * @return Locator
+	 */
+	public static function unshareLinkButton($shareLinkMenuTriggerElement) {
+		return Locator::forThe()->xpath("//li[contains(concat(' ', normalize-space(@class), ' '), ' action ')]//button[normalize-space() = 'Unshare']")->
+				descendantOf(self::shareLinkMenu($shareLinkMenuTriggerElement))->
+				describedAs("Unshare link button in the details view in Files app");
+	}
+
 	/**
 	 * @Given I share the link for :fileName
 	 */
@@ -490,6 +499,16 @@ class FilesAppSharingContext implements Context, ActorAwareInterface {
 		$this->actor->find(self::unshareButton($shareWithName, $shareWithMenuTriggerElement), 2)->click();
 	}
 
+	/**
+	 * @When I unshare the link share
+	 */
+	public function iUnshareTheLink() {
+		$this->showShareLinkMenuIfNeeded();
+
+		$shareLinkMenuTriggerElement = $this->actor->find(self::shareLinkMenuTrigger(), 2);
+		$this->actor->find(self::unshareLinkButton($shareLinkMenuTriggerElement), 2)->click();
+	}
+
 	/**
 	 * @Then I see that the file is shared with me by :sharedByName
 	 */
@@ -528,6 +547,18 @@ class FilesAppSharingContext implements Context, ActorAwareInterface {
 				$this->actor->find(self::shareWithInput(), 10)->getWrappedElement()->getAttribute("placeholder"), "Resharing is not allowed");
 	}
 
+	/**
+	 * @Then I see that resharing the file by link is not available
+	 */
+	public function iSeeThatResharingTheFileByLinkIsNotAvailable() {
+		if (!WaitFor::elementToBeEventuallyNotShown(
+				$this->actor,
+				self::shareLinkAddNewButton(),
+				$timeout = 10 * $this->actor->getFindTimeoutMultiplier())) {
+			PHPUnit_Framework_Assert::fail("The add new share link button is still shown after $timeout seconds");
+		}
+	}
+
 	/**
 	 * @Then I see that :sharedWithName can not be allowed to edit the share
 	 */
-- 
GitLab