diff options
Diffstat (limited to 'tests/acceptance/features/bootstrap/FilesAppContext.php')
-rw-r--r-- | tests/acceptance/features/bootstrap/FilesAppContext.php | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/tests/acceptance/features/bootstrap/FilesAppContext.php b/tests/acceptance/features/bootstrap/FilesAppContext.php index 7e7f592a44e..bc926fbe52f 100644 --- a/tests/acceptance/features/bootstrap/FilesAppContext.php +++ b/tests/acceptance/features/bootstrap/FilesAppContext.php @@ -28,6 +28,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 */ public static function currentSectionMainView() { @@ -38,6 +87,15 @@ class FilesAppContext implements Context, ActorAwareInterface { /** * @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 + */ public static function currentSectionDetailsView() { return Locator::forThe()->xpath("/preceding-sibling::*[position() = 1 and @id = 'app-sidebar']")-> descendantOf(self::currentSectionMainView())-> @@ -96,12 +154,88 @@ class FilesAppContext implements Context, ActorAwareInterface { /** * @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 + */ public static function shareActionForFile($fileName) { return Locator::forThe()->css(".action-share")->descendantOf(self::rowForFile($fileName))-> 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 */ public function iShareTheLinkFor($fileName) { @@ -118,6 +252,15 @@ class FilesAppContext implements Context, ActorAwareInterface { } /** + * @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 */ public function iProtectTheSharedLinkWithThePassword($password) { @@ -136,6 +279,53 @@ class FilesAppContext implements Context, ActorAwareInterface { } /** + * @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 */ public function iSeeThatTheWorkingIconForPasswordProtectIsShown() { |