From 2ec181e084d327dbbbc7ebc767ed6024671759f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Tue, 19 Dec 2017 06:55:47 +0100 Subject: [PATCH 1/2] Add acceptance test for opening the menu in a public shared link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Calviño Sánchez --- tests/acceptance/features/app-files.feature | 11 +++ .../bootstrap/FilesSharingAppContext.php | 84 +++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/tests/acceptance/features/app-files.feature b/tests/acceptance/features/app-files.feature index ac2d05fac2c27..2cb43611b9ab9 100644 --- a/tests/acceptance/features/app-files.feature +++ b/tests/acceptance/features/app-files.feature @@ -23,6 +23,17 @@ Feature: app-files When I open the details view for "welcome.txt" Then I see that the details view for "All files" section is open + Scenario: open the menu in a public shared link + Given I act as John + And I am logged in + And I share the link for "welcome.txt" + And I write down the shared link + When I act as Jane + And I visit the shared link I wrote down + And I see that the current page is the shared link I wrote down + And I open the Share menu + Then I see that the Share menu is shown + Scenario: set a password to a shared link Given I am logged in And I share the link for "welcome.txt" diff --git a/tests/acceptance/features/bootstrap/FilesSharingAppContext.php b/tests/acceptance/features/bootstrap/FilesSharingAppContext.php index 88c1180c75373..f3386b46db9a0 100644 --- a/tests/acceptance/features/bootstrap/FilesSharingAppContext.php +++ b/tests/acceptance/features/bootstrap/FilesSharingAppContext.php @@ -51,6 +51,49 @@ public static function wrongPasswordMessage() { describedAs("Wrong password message in Authenticate page"); } + /** + * @return Locator + */ + public static function shareMenuButton() { + return Locator::forThe()->id("share-menutoggle")-> + describedAs("Share menu button in Shared file page"); + } + + /** + * @return Locator + */ + public static function shareMenu() { + return Locator::forThe()->id("share-menu")-> + describedAs("Share menu in Shared file page"); + } + + /** + * @return Locator + */ + public static function downloadItemInShareMenu() { + return Locator::forThe()->id("download")-> + descendantOf(self::shareMenu())-> + describedAs("Download item in Share menu in Shared file page"); + } + + /** + * @return Locator + */ + public static function directLinkItemInShareMenu() { + return Locator::forThe()->id("directLink-container")-> + descendantOf(self::shareMenu())-> + describedAs("Direct link item in Share menu in Shared file page"); + } + + /** + * @return Locator + */ + public static function saveItemInShareMenu() { + return Locator::forThe()->id("save")-> + descendantOf(self::shareMenu())-> + describedAs("Save item in Share menu in Shared file page"); + } + /** * @return Locator */ @@ -74,6 +117,13 @@ public function iAuthenticateWithPassword($password) { $this->actor->find(self::authenticateButton())->click(); } + /** + * @When I open the Share menu + */ + public function iOpenTheShareMenu() { + $this->actor->find(self::shareMenuButton(), 10)->click(); + } + /** * @Then I see that the current page is the Authenticate page for the shared link I wrote down */ @@ -100,6 +150,26 @@ public function iSeeThatAWrongPasswordForTheSharedFileMessageIsShown() { $this->actor->find(self::wrongPasswordMessage(), 10)->isVisible()); } + /** + * @Then I see that the Share menu is shown + */ + public function iSeeThatTheShareMenuIsShown() { + // Unlike other menus, the Share menu is always present in the DOM, so + // the element could be found when it was no made visible yet due to the + // command not having been processed by the browser. + if (!$this->waitForElementToBeEventuallyShown( + self::shareMenu(), $timeout = 10 * $this->actor->getFindTimeoutMultiplier())) { + PHPUnit_Framework_Assert::fail("The Share menu is not visible yet after $timeout seconds"); + } + + PHPUnit_Framework_Assert::assertTrue( + $this->actor->find(self::downloadItemInShareMenu())->isVisible()); + PHPUnit_Framework_Assert::assertTrue( + $this->actor->find(self::directLinkItemInShareMenu())->isVisible()); + PHPUnit_Framework_Assert::assertTrue( + $this->actor->find(self::saveItemInShareMenu())->isVisible()); + } + /** * @Then I see that the shared file preview shows the text :text */ @@ -107,4 +177,18 @@ public function iSeeThatTheSharedFilePreviewShowsTheText($text) { PHPUnit_Framework_Assert::assertContains($text, $this->actor->find(self::textPreview(), 10)->getText()); } + private function waitForElementToBeEventuallyShown($elementLocator, $timeout = 10, $timeoutStep = 1) { + $actor = $this->actor; + + $elementShownCallback = function() use ($actor, $elementLocator) { + try { + return $actor->find($elementLocator)->isVisible(); + } catch (NoSuchElementException $exception) { + return false; + } + }; + + return Utils::waitFor($elementShownCallback, $timeout, $timeoutStep); + } + } From 48b62a0eee8b670d92a2eaeefe0cbcd82a072013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Tue, 19 Dec 2017 06:58:58 +0100 Subject: [PATCH 2/2] Fix opening the menu in a Share page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ".popovermenu" elements are visible or not depending on whether they also have the "open" CSS class or not. "#header .menu" elements were always hidden, so when both rules applied to the same element, like in the menu of a Share page, the element was always hidden due to "#header .menu" being more specific than ".popovermenu" and thus overriding its rules. Now, "#header .menu" elements are hidden only if they are not a ".popovermenu" too. Signed-off-by: Daniel Calviño Sánchez --- core/css/header.scss | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/css/header.scss b/core/css/header.scss index 21305de0d0275..b5bb8ca9c5b74 100644 --- a/core/css/header.scss +++ b/core/css/header.scss @@ -78,11 +78,14 @@ background-color: $color-main-background; filter: drop-shadow(0 1px 3px $color-box-shadow); border-radius: 0 0 3px 3px; - display: none; box-sizing: border-box; z-index: 2000; position: absolute; + &:not(.popovermenu) { + display: none; + } + /* Dropdown arrow */ &:after { border: 10px solid transparent;