Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix opening the menu in a share page #7566

Merged
merged 2 commits into from
Dec 19, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion core/css/header.scss
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
11 changes: 11 additions & 0 deletions tests/acceptance/features/app-files.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
84 changes: 84 additions & 0 deletions tests/acceptance/features/bootstrap/FilesSharingAppContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand All @@ -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
*/
Expand All @@ -100,11 +150,45 @@ 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
*/
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);
}

}