/*
* JBoss, Home of Professional Open Source
* Copyright 2010-2014, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.richfaces.photoalbum.ftest.webdriver.fragments;
import static org.junit.Assert.assertEquals;
import org.jboss.arquillian.graphene.Graphene;
import org.jboss.arquillian.graphene.findby.ByJQuery;
import org.jboss.arquillian.graphene.findby.FindByJQuery;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.richfaces.photoalbum.ftest.webdriver.pages.FBLoginPage;
import org.richfaces.photoalbum.ftest.webdriver.pages.GPlusLoginPage;
import org.richfaces.photoalbum.ftest.webdriver.pages.SocialLoginPage;
import org.richfaces.photoalbum.ftest.webdriver.utils.PhotoalbumUtils;
import com.google.common.collect.Lists;
/**
* @author <a href="mailto:jstefek@redhat.com">Jiri Stefek</a>
*/
public class HeaderPanel {
@ArquillianResource
private WebDriver driver;
@FindBy(css = "div.header-content-div a img")
private WebElement image;
@FindBy(css = "div.header-content-div div.top-right-menu")
private TopRightMenuLinks links;
@FindBy(css = "div.header-content-div div[id$='logInOutMenu']")
private LoginLogoutMenu llm;
@FindBy(css = "div[id$='menuPanel'] .rf-tb")
private Toolbar toolbar;
private void checkAlwaysPresentElements() {
PhotoalbumUtils.checkVisible(Lists.newArrayList(image, llm.getLoggedUserSpan(), links.getWikiPageLink(), links.getDownloadsLink(),
links.getCommunityLink()));
Graphene.waitAjax()
.ignoring(StaleElementReferenceException.class)
.ignoring(NoSuchElementException.class)
.until().element(image).attribute("src").contains("img/shell/logo_top.gif");
}
public void checkIfUserNotLogged() {
checkAlwaysPresentElements();
PhotoalbumUtils.checkVisible(Lists.newArrayList(llm.getLoginLink(), llm.getRegisterLink()));
PhotoalbumUtils.checkNotVisible(llm.getLoggedUserLink(), llm.getLogoutLink(), llm.getLoggedInWithFB(), llm.getLoggedInWithGPlus(), llm.getLoginToFBLink(),
llm.getLoginToGPlusLink(), llm.getFbLoggedUserImage());
assertEquals("Welcome, guest! If you want access to full version of application, please register or login.",
llm.getLoggedUserSpan().getText().trim());
getToolbar().checkIfUserNotLoggedToolbar();
}
public void checkUserLogged(String user, boolean hasOwnAlbums, boolean isLoggedWithFB, boolean isloggedWithGPlus) {
checkAlwaysPresentElements();
PhotoalbumUtils.checkVisible(Lists.newArrayList(llm.getLoggedUserLink(), llm.getLogoutLink()));
PhotoalbumUtils.checkNotVisible(llm.getLoginLink(), llm.getRegisterLink());
assertEquals("Welcome,", llm.getLoggedUserSpan().getText());
assertEquals(user, llm.getLoggedUserLink().getText());
if (isLoggedWithFB) {
PhotoalbumUtils.checkVisible(llm.getLoggedInWithFB(), llm.getFbLoggedUserImage());
PhotoalbumUtils.checkNotVisible(llm.getLoginToFBLink());
} else {
PhotoalbumUtils.checkVisible(llm.getLoginToFBLink());
PhotoalbumUtils.checkNotVisible(llm.getLoggedInWithFB(), llm.getFbLoggedUserImage());
}
if (isloggedWithGPlus) {
PhotoalbumUtils.checkVisible(llm.getLoggedInWithGPlus());
PhotoalbumUtils.checkNotVisible(llm.getLoginToGPlusLink());
} else {
PhotoalbumUtils.checkVisible(llm.getLoginToGPlusLink());
PhotoalbumUtils.checkNotVisible(llm.getLoggedInWithGPlus());
}
getToolbar().checkIfUserLoggedToolbar(hasOwnAlbums);
}
public WebElement getLoggedUserLink() {
return llm.getLoggedUserLink();
}
public WebElement getLoginLink() {
return llm.getLoginLink();
}
public WebElement getLogoutLink() {
return llm.getLogoutLink();
}
public WebElement getStatusHelpLink() {
return driver.findElement(ByJQuery.selector("a:visible:last"));
}
public Toolbar getToolbar() {
return toolbar;
}
public void loginToFB() {
loginToSocial(FBLoginPage.class);
}
public void loginToGPlus() {
loginToSocial(GPlusLoginPage.class);
}
private void loginToSocial(Class<? extends SocialLoginPage> pageClass) {
PhotoalbumUtils.loginWithSocial(pageClass, driver, GPlusLoginPage.class.equals(pageClass) ? llm.getLoginToGPlusLink()
: llm.getLoginToFBLink());
}
public static class LoginLogoutMenu {
@FindBy(css = "span.logged-user + a + img")
private WebElement fbLoggedUserImage;
@FindBy(css = "span.FB-btn-small")
private WebElement loggedInWithFB;
@FindBy(css = "span.G-btn-small")
private WebElement loggedInWithGPlus;
@FindBy(css = "span.logged-user + a")
private WebElement loggedUserLink;
@FindBy(css = "span.logged-user")
private WebElement loggedUserSpan;
@FindBy(partialLinkText = "Login")
private WebElement loginLink;
@FindBy(css = "a.FB-btn-small")
private WebElement loginToFBLink;
@FindBy(css = "a.G-btn-small")
private WebElement loginToGPlusLink;
@FindBy(partialLinkText = "Logout")
private WebElement logoutLink;
@FindBy(partialLinkText = "Register")
private WebElement registerLink;
public WebElement getFbLoggedUserImage() {
return fbLoggedUserImage;
}
public WebElement getLoggedInWithFB() {
return loggedInWithFB;
}
public WebElement getLoggedInWithGPlus() {
return loggedInWithGPlus;
}
public WebElement getLoggedUserLink() {
return loggedUserLink;
}
public WebElement getLoggedUserSpan() {
return loggedUserSpan;
}
public WebElement getLoginLink() {
return loginLink;
}
public WebElement getLoginToFBLink() {
return loginToFBLink;
}
public WebElement getLoginToGPlusLink() {
return loginToGPlusLink;
}
public WebElement getLogoutLink() {
return logoutLink;
}
public WebElement getRegisterLink() {
return registerLink;
}
}
public static class Toolbar {
@FindByJQuery(".rf-tb-cntr > td > * > div:eq(1)")
private WebElement myAlbumGroupsLink;
@FindByJQuery(".rf-tb-cntr > td > * > div:eq(2)")
private WebElement myAllAlbumsLink;
@FindByJQuery(".rf-tb-cntr > td > * > div:eq(3)")
private WebElement myAllImagesLink;
@FindByJQuery(".rf-tb-cntr > td > * > div:eq(4) > a:eq(0)")
private WebElement addAlbumGroupLink;
@FindByJQuery(".rf-tb-cntr > td > * > div:eq(4) > a:eq(1)")
private WebElement addAlbumLink;
@FindByJQuery(".rf-tb-cntr > td > * > div:eq(4) > span")
private WebElement addAlbumLinkSpan;
@FindByJQuery(".rf-tb-cntr > td > * > div:eq(4) > a:eq(2)")
private WebElement addImagesLink;
@FindByJQuery(".rf-tb-cntr > td > * > div:eq(4) > span")
private WebElement addImagesLinkSpan;
public void checkIfUserLoggedToolbar(boolean hasOwnAlbums) {
PhotoalbumUtils.checkVisible(hasOwnAlbums ? Lists.newArrayList(myAlbumGroupsLink, myAllAlbumsLink, myAllImagesLink,
addAlbumGroupLink, addAlbumLink, addImagesLink) : Lists.newArrayList(myAlbumGroupsLink, myAllAlbumsLink,
myAllImagesLink, addAlbumGroupLink, addAlbumLinkSpan, addImagesLinkSpan));
}
public void checkIfUserNotLoggedToolbar() {
PhotoalbumUtils.checkNotVisible(Lists.newArrayList(myAlbumGroupsLink, myAllAlbumsLink, myAllImagesLink,
addAlbumGroupLink, addAlbumLink, addImagesLink, addAlbumLinkSpan, addImagesLinkSpan));
}
public WebElement getAddAlbumLink() {
return addAlbumLink;
}
public WebElement getAddImagesLink() {
return addImagesLink;
}
public WebElement getAddAlbumGroupLink() {
return addAlbumGroupLink;
}
public WebElement getMyAlbumGroupsLink() {
return myAlbumGroupsLink;
}
public WebElement getMyAllAlbumsLink() {
return myAllAlbumsLink;
}
public WebElement getMyAllImagesLink() {
return myAllImagesLink;
}
}
public static class TopRightMenuLinks {
@FindBy(partialLinkText = "Community")
private WebElement communityLink;
@FindBy(partialLinkText = "Downloads")
private WebElement downloadsLink;
@FindBy(partialLinkText = "Wiki page")
private WebElement wikiPageLink;
public WebElement getCommunityLink() {
return communityLink;
}
public WebElement getDownloadsLink() {
return downloadsLink;
}
public WebElement getWikiPageLink() {
return wikiPageLink;
}
}
}