Add acceptance tests for closing details view in Files app
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
parent
8ef25a7628
commit
16b4eecb05
|
@ -1,5 +1,28 @@
|
|||
Feature: app-files
|
||||
|
||||
Scenario: viewing a favorite file in its folder closes the details view
|
||||
Given I am logged in
|
||||
And I mark "welcome.txt" as favorite
|
||||
And I see that "welcome.txt" is marked as favorite
|
||||
And I open the "Favorites" section
|
||||
And I open the details view for "welcome.txt"
|
||||
And I see that the details view for "Favorites" section is open
|
||||
When I view "welcome.txt" in folder
|
||||
Then I see that the current section is "All files"
|
||||
And I see that the details view is closed
|
||||
|
||||
Scenario: viewing a favorite file in its folder does not prevent opening the details view in "All files" section
|
||||
Given I am logged in
|
||||
And I mark "welcome.txt" as favorite
|
||||
And I see that "welcome.txt" is marked as favorite
|
||||
And I open the "Favorites" section
|
||||
And I open the details view for "welcome.txt"
|
||||
And I see that the details view for "Favorites" section is open
|
||||
And I view "welcome.txt" in folder
|
||||
And I see that the current section is "All files"
|
||||
When I open the details view for "welcome.txt"
|
||||
Then I see that the details view for "All files" section is open
|
||||
|
||||
Scenario: set a password to a shared link
|
||||
Given I am logged in
|
||||
And I share the link for "welcome.txt"
|
||||
|
|
|
@ -27,6 +27,55 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
|||
|
||||
use ActorAware;
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function sections() {
|
||||
return [ "All files" => "files",
|
||||
"Recent" => "recent",
|
||||
"Favorites" => "favorites",
|
||||
"Shared with you" => "sharingin",
|
||||
"Shared with others" => "sharingout",
|
||||
"Shared by link" => "sharinglinks",
|
||||
"Tags" => "systemtagsfilter",
|
||||
"Deleted files" => "trashbin" ];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function appNavigation() {
|
||||
return Locator::forThe()->id("app-navigation")->
|
||||
describedAs("App navigation");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function appNavigationSectionItemFor($sectionText) {
|
||||
return Locator::forThe()->xpath("//li[normalize-space() = '$sectionText']")->
|
||||
descendantOf(self::appNavigation())->
|
||||
describedAs($sectionText . " section item in App Navigation");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function appNavigationCurrentSectionItem() {
|
||||
return Locator::forThe()->css(".active")->descendantOf(self::appNavigation())->
|
||||
describedAs("Current section item in App Navigation");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function mainViewForSection($section) {
|
||||
$sectionId = self::sections()[$section];
|
||||
|
||||
return Locator::forThe()->id("app-content-$sectionId")->
|
||||
describedAs("Main view for section $section in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
|
@ -35,6 +84,15 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
|||
describedAs("Current section main view in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function detailsViewForSection($section) {
|
||||
return Locator::forThe()->xpath("/preceding-sibling::*[position() = 1 and @id = 'app-sidebar']")->
|
||||
descendantOf(self::mainViewForSection($section))->
|
||||
describedAs("Details view for section $section in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
|
@ -93,6 +151,30 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
|||
describedAs("Row for file $fileName in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function favoriteActionForFile($fileName) {
|
||||
return Locator::forThe()->css(".action-favorite")->descendantOf(self::rowForFile($fileName))->
|
||||
describedAs("Favorite action for file $fileName in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function favoritedStateIconForFile($fileName) {
|
||||
return Locator::forThe()->content("Favorited")->descendantOf(self::favoriteActionForFile($fileName))->
|
||||
describedAs("Favorited state icon for file $fileName in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function mainLinkForFile($fileName) {
|
||||
return Locator::forThe()->css(".name")->descendantOf(self::rowForFile($fileName))->
|
||||
describedAs("Main link for file $fileName in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
|
@ -101,6 +183,58 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
|||
describedAs("Share action for file $fileName in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function fileActionsMenuButtonForFile($fileName) {
|
||||
return Locator::forThe()->css(".action-menu")->descendantOf(self::rowForFile($fileName))->
|
||||
describedAs("File actions menu button for file $fileName in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function fileActionsMenu() {
|
||||
return Locator::forThe()->css(".fileActionsMenu")->
|
||||
describedAs("File actions menu in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
public static function viewFileInFolderMenuItem() {
|
||||
return self::fileActionsMenuItemFor("View in folder");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Locator
|
||||
*/
|
||||
private static function fileActionsMenuItemFor($itemText) {
|
||||
return Locator::forThe()->content($itemText)->descendantOf(self::fileActionsMenu())->
|
||||
describedAs($itemText . " item in file actions menu in Files app");
|
||||
}
|
||||
|
||||
/**
|
||||
* @Given I open the :section section
|
||||
*/
|
||||
public function iOpenTheSection($section) {
|
||||
$this->actor->find(self::appNavigationSectionItemFor($section), 10)->click();
|
||||
}
|
||||
|
||||
/**
|
||||
* @Given I open the details view for :fileName
|
||||
*/
|
||||
public function iOpenTheDetailsViewFor($fileName) {
|
||||
$this->actor->find(self::mainLinkForFile($fileName), 10)->click();
|
||||
}
|
||||
|
||||
/**
|
||||
* @Given I mark :fileName as favorite
|
||||
*/
|
||||
public function iMarkAsFavorite($fileName) {
|
||||
$this->actor->find(self::favoriteActionForFile($fileName), 10)->click();
|
||||
}
|
||||
|
||||
/**
|
||||
* @Given I share the link for :fileName
|
||||
*/
|
||||
|
@ -117,6 +251,15 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
|||
$this->actor->getSharedNotebook()["shared link"] = $this->actor->find(self::shareLinkField(), 10)->getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* @When I view :fileName in folder
|
||||
*/
|
||||
public function iViewInFolder($fileName) {
|
||||
$this->actor->find(self::fileActionsMenuButtonForFile($fileName), 10)->click();
|
||||
|
||||
$this->actor->find(self::viewFileInFolderMenuItem(), 2)->click();
|
||||
}
|
||||
|
||||
/**
|
||||
* @When I protect the shared link with the password :password
|
||||
*/
|
||||
|
@ -135,6 +278,53 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
|||
$this->actor->getSession()->getCurrentUrl());
|
||||
}
|
||||
|
||||
/**
|
||||
* @Then I see that the current section is :section
|
||||
*/
|
||||
public function iSeeThatTheCurrentSectionIs($section) {
|
||||
PHPUnit_Framework_Assert::assertEquals($this->actor->find(self::appNavigationCurrentSectionItem(), 10)->getText(), $section);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Then I see that the details view for :section section is open
|
||||
*/
|
||||
public function iSeeThatTheDetailsViewForSectionIsOpen($section) {
|
||||
PHPUnit_Framework_Assert::assertTrue(
|
||||
$this->actor->find(self::detailsViewForSection($section), 10)->isVisible());
|
||||
|
||||
$otherSections = self::sections();
|
||||
unset($otherSections[$section]);
|
||||
|
||||
$this->assertDetailsViewForSectionsAreClosed($otherSections);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Then I see that the details view is closed
|
||||
*/
|
||||
public function iSeeThatTheDetailsViewIsClosed() {
|
||||
PHPUnit_Framework_Assert::assertNotNull($this->actor->find(self::currentSectionMainView(), 10));
|
||||
|
||||
$this->assertDetailsViewForSectionsAreClosed(self::sections());
|
||||
}
|
||||
|
||||
private function assertDetailsViewForSectionsAreClosed($sections) {
|
||||
foreach ($sections as $section => $id) {
|
||||
try {
|
||||
PHPUnit_Framework_Assert::assertFalse(
|
||||
$this->actor->find(self::detailsViewForSection($section))->isVisible(),
|
||||
"Details view for section $section is open but it should be closed");
|
||||
} catch (NoSuchElementException $exception) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Then I see that :fileName is marked as favorite
|
||||
*/
|
||||
public function iSeeThatIsMarkedAsFavorite($fileName) {
|
||||
PHPUnit_Framework_Assert::assertNotNull($this->actor->find(self::favoritedStateIconForFile($fileName), 10));
|
||||
}
|
||||
|
||||
/**
|
||||
* @Then I see that the working icon for password protect is shown
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue