|
|
|
|
@ -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
|
|
|
|
|
*/
|
|
|
|
|
|