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] 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 ac2d05fac2..2cb43611b9 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 88c1180c75..f3386b46db 100644 --- a/tests/acceptance/features/bootstrap/FilesSharingAppContext.php +++ b/tests/acceptance/features/bootstrap/FilesSharingAppContext.php @@ -51,6 +51,49 @@ class FilesSharingAppContext implements Context, ActorAwareInterface { 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 @@ class FilesSharingAppContext implements Context, ActorAwareInterface { $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 @@ class FilesSharingAppContext implements Context, ActorAwareInterface { $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 @@ class FilesSharingAppContext implements Context, ActorAwareInterface { 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); + } + }