From f53ddb86a071d611d5beece7e021346395bc1119 Mon Sep 17 00:00:00 2001 From: Damian Jansen Date: Mon, 30 Sep 2013 15:34:06 +1000 Subject: [PATCH] Add stability to the Google OpenID test The Google OpenID test relies on permissions to be set for the localhost application - remove these if they exist already. There is also a slight delay on the enabling of the "Accept" button. --- .../java/org/zanata/page/AbstractPage.java | 7 ++- .../page/account/GooglePermissionsPage.java | 24 ------- .../org/zanata/page/account/OpenIDPage.java | 37 ----------- .../org/zanata/page/account/SignInPage.java | 1 + .../GoogleAccountPage.java | 17 +++-- .../GoogleManagePermissionsPage.java | 62 +++++++++++++++++++ .../googleaccount/GooglePermissionsPage.java | 50 +++++++++++++++ .../org/zanata/workflow/BasicWorkFlow.java | 6 ++ .../org/zanata/workflow/GoogleWorkFlow.java | 51 +++++++++++++++ .../org/zanata/workflow/RegisterWorkFlow.java | 7 ++- .../feature/account/AccountTestSuite.java | 3 +- .../GoogleOpenIDTest.java} | 36 ++++++++--- 12 files changed, 219 insertions(+), 82 deletions(-) delete mode 100644 functional-test/src/main/java/org/zanata/page/account/GooglePermissionsPage.java delete mode 100644 functional-test/src/main/java/org/zanata/page/account/OpenIDPage.java rename functional-test/src/main/java/org/zanata/page/{account => googleaccount}/GoogleAccountPage.java (82%) create mode 100644 functional-test/src/main/java/org/zanata/page/googleaccount/GoogleManagePermissionsPage.java create mode 100644 functional-test/src/main/java/org/zanata/page/googleaccount/GooglePermissionsPage.java create mode 100644 functional-test/src/main/java/org/zanata/workflow/GoogleWorkFlow.java rename functional-test/src/test/java/org/zanata/feature/{account/OpenIDTest.java => googleopenid/GoogleOpenIDTest.java} (69%) diff --git a/functional-test/src/main/java/org/zanata/page/AbstractPage.java b/functional-test/src/main/java/org/zanata/page/AbstractPage.java index ac2506f2dc..c1c4aec10e 100644 --- a/functional-test/src/main/java/org/zanata/page/AbstractPage.java +++ b/functional-test/src/main/java/org/zanata/page/AbstractPage.java @@ -67,11 +67,16 @@ public String getTitle() return driver.getTitle(); } + public String getUrl() + { + return driver.getCurrentUrl(); + } + public FluentWait waitForTenSec() { return ajaxWaitForTenSec; } - + protected void clickAndCheckErrors(WebElement button) { button.click(); diff --git a/functional-test/src/main/java/org/zanata/page/account/GooglePermissionsPage.java b/functional-test/src/main/java/org/zanata/page/account/GooglePermissionsPage.java deleted file mode 100644 index aa9b478aac..0000000000 --- a/functional-test/src/main/java/org/zanata/page/account/GooglePermissionsPage.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.zanata.page.account; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; -import org.zanata.page.AbstractPage; - -/** - * @author Damian Jansen djansen@redhat.com - */ -public class GooglePermissionsPage extends AbstractPage -{ - public GooglePermissionsPage(WebDriver driver) - { - super(driver); - } - - public EditProfilePage acceptPermissions() - { - getDriver().findElement(By.id("submit_approve_access")).click(); - return new EditProfilePage(getDriver()); - } -} \ No newline at end of file diff --git a/functional-test/src/main/java/org/zanata/page/account/OpenIDPage.java b/functional-test/src/main/java/org/zanata/page/account/OpenIDPage.java deleted file mode 100644 index 1a372a367a..0000000000 --- a/functional-test/src/main/java/org/zanata/page/account/OpenIDPage.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.zanata.page.account; - -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.FindBy; -import org.zanata.page.BasePage; - -/** - * @author Damian Jansen djansen@redhat.com - */ -public class OpenIDPage extends BasePage -{ - - @FindBy(id="Email") - private WebElement emailField; - - @FindBy(id="signIn") - private WebElement signInButton; - - public OpenIDPage(WebDriver driver) - { - super(driver); - } - - public OpenIDPage enterEmail(String email) - { - emailField.sendKeys(email); - return new OpenIDPage(getDriver()); - } - - public GoogleAccountPage clickSignIn() - { - signInButton.click(); - return new GoogleAccountPage(getDriver()); - } - -} diff --git a/functional-test/src/main/java/org/zanata/page/account/SignInPage.java b/functional-test/src/main/java/org/zanata/page/account/SignInPage.java index 4a2491489a..a91b497b55 100644 --- a/functional-test/src/main/java/org/zanata/page/account/SignInPage.java +++ b/functional-test/src/main/java/org/zanata/page/account/SignInPage.java @@ -26,6 +26,7 @@ import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.zanata.page.BasePage; +import org.zanata.page.googleaccount.GoogleAccountPage; import org.zanata.page.utility.DashboardPage; @Slf4j diff --git a/functional-test/src/main/java/org/zanata/page/account/GoogleAccountPage.java b/functional-test/src/main/java/org/zanata/page/googleaccount/GoogleAccountPage.java similarity index 82% rename from functional-test/src/main/java/org/zanata/page/account/GoogleAccountPage.java rename to functional-test/src/main/java/org/zanata/page/googleaccount/GoogleAccountPage.java index aa88362dcb..fba3ca428a 100644 --- a/functional-test/src/main/java/org/zanata/page/account/GoogleAccountPage.java +++ b/functional-test/src/main/java/org/zanata/page/googleaccount/GoogleAccountPage.java @@ -18,7 +18,7 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF * site: http://www.fsf.org. */ -package org.zanata.page.account; +package org.zanata.page.googleaccount; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -56,16 +56,15 @@ public GoogleAccountPage enterGooglePassword(String password) return new GoogleAccountPage(getDriver()); } - public EditProfilePage clickSignIn() + public GooglePermissionsPage clickSignIn() { signInButton.click(); + return new GooglePermissionsPage(getDriver()); + } - // May return a Permissions request page, if this is the first run - if(!getDriver().getTitle().contains("Edit Profile")) - { - GooglePermissionsPage googlePermissionsPage = new GooglePermissionsPage(getDriver()); - googlePermissionsPage.acceptPermissions(); - } - return new EditProfilePage(getDriver()); + public GoogleManagePermissionsPage clickPermissionsSignIn() + { + signInButton.click(); + return new GoogleManagePermissionsPage(getDriver()); } } diff --git a/functional-test/src/main/java/org/zanata/page/googleaccount/GoogleManagePermissionsPage.java b/functional-test/src/main/java/org/zanata/page/googleaccount/GoogleManagePermissionsPage.java new file mode 100644 index 0000000000..b0c5770803 --- /dev/null +++ b/functional-test/src/main/java/org/zanata/page/googleaccount/GoogleManagePermissionsPage.java @@ -0,0 +1,62 @@ +/* + * Copyright 2013, Red Hat, Inc. and individual contributors as indicated by the + * @author tags. See the copyright.txt file 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.zanata.page.googleaccount; + +import org.openqa.selenium.By; +import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.WebDriver; +import org.zanata.page.AbstractPage; + +/** + * @author Damian Jansen djansen@redhat.com + */ +public class GoogleManagePermissionsPage extends AbstractPage +{ + + public GoogleManagePermissionsPage(WebDriver driver) + { + super(driver); + } + + public GoogleManagePermissionsPage removePermission(String permissionName) + { + if (pageContainsPermission(permissionName)) + { + getDriver().findElement(By.name(permissionName)) + .findElement(By.cssSelector("input[type='submit']")) + .click(); + } + return new GoogleManagePermissionsPage(getDriver()); + } + + public boolean pageContainsPermission(String permissionName) + { + try + { + return getDriver().findElement(By.name(permissionName)).isDisplayed(); + } + catch(NoSuchElementException nsee) + { + // Permission not listed + return false; + } + } +} diff --git a/functional-test/src/main/java/org/zanata/page/googleaccount/GooglePermissionsPage.java b/functional-test/src/main/java/org/zanata/page/googleaccount/GooglePermissionsPage.java new file mode 100644 index 0000000000..b384e36d8c --- /dev/null +++ b/functional-test/src/main/java/org/zanata/page/googleaccount/GooglePermissionsPage.java @@ -0,0 +1,50 @@ +/* + * Copyright 2013, Red Hat, Inc. and individual contributors as indicated by the + * @author tags. See the copyright.txt file 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.zanata.page.googleaccount; + +import com.google.common.base.Function; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.zanata.page.AbstractPage; +import org.zanata.page.account.EditProfilePage; + +/** + * @author Damian Jansen djansen@redhat.com + */ +public class GooglePermissionsPage extends AbstractPage +{ + public GooglePermissionsPage(WebDriver driver) + { + super(driver); + } + + public EditProfilePage acceptPermissions() + { + waitForTenSec().until(new Function() { + @Override + public Boolean apply(WebDriver driver) { + return getDriver().findElement(By.id("submit_approve_access")).isEnabled(); + } + }); + getDriver().findElement(By.id("submit_approve_access")).click(); + return new EditProfilePage(getDriver()); + } +} \ No newline at end of file diff --git a/functional-test/src/main/java/org/zanata/workflow/BasicWorkFlow.java b/functional-test/src/main/java/org/zanata/workflow/BasicWorkFlow.java index 9df04a47be..5198814425 100644 --- a/functional-test/src/main/java/org/zanata/workflow/BasicWorkFlow.java +++ b/functional-test/src/main/java/org/zanata/workflow/BasicWorkFlow.java @@ -14,6 +14,12 @@ public

P goToPage(String url, Class

pageClass) return PageFactory.initElements(driver, pageClass); } + public

P goToUrl(String url, Class

pageClass) + { + driver.navigate().to(url); + return PageFactory.initElements(driver, pageClass); + } + private String toUrl(String relativeUrl) { return hostUrl + removeLeadingSlash(relativeUrl); diff --git a/functional-test/src/main/java/org/zanata/workflow/GoogleWorkFlow.java b/functional-test/src/main/java/org/zanata/workflow/GoogleWorkFlow.java new file mode 100644 index 0000000000..1fc9198cc4 --- /dev/null +++ b/functional-test/src/main/java/org/zanata/workflow/GoogleWorkFlow.java @@ -0,0 +1,51 @@ +/* + * Copyright 2013, Red Hat, Inc. and individual contributors as indicated by the + * @author tags. See the copyright.txt file 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.zanata.workflow; + +import org.zanata.page.googleaccount.GoogleAccountPage; +import org.zanata.page.googleaccount.GoogleManagePermissionsPage; + +/** + * @author Damian Jansen djansen@redhat.com + */ +public class GoogleWorkFlow extends AbstractWebWorkFlow +{ + private static String permissionsPageLink = "https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en_GB"; + private static String forceLogoutLink = "https://accounts.google.com/Logout?service=lso"; + + public GoogleManagePermissionsPage resetGooglePermissions(String googleUsername, String password) + { + GoogleAccountPage googleAccountPage = new BasicWorkFlow() + .goToUrl(permissionsPageLink, GoogleAccountPage.class); + + return googleAccountPage + .enterGoogleEmail(googleUsername) + .enterGooglePassword(password) + .clickPermissionsSignIn() + .removePermission("localhost"); + } + + public GoogleAccountPage forceLogout() + { + return new BasicWorkFlow().goToUrl(forceLogoutLink, GoogleAccountPage.class); + } + +} diff --git a/functional-test/src/main/java/org/zanata/workflow/RegisterWorkFlow.java b/functional-test/src/main/java/org/zanata/workflow/RegisterWorkFlow.java index a3ddcdb0d6..3c9584118c 100644 --- a/functional-test/src/main/java/org/zanata/workflow/RegisterWorkFlow.java +++ b/functional-test/src/main/java/org/zanata/workflow/RegisterWorkFlow.java @@ -21,7 +21,7 @@ package org.zanata.workflow; import org.zanata.page.account.EditProfilePage; -import org.zanata.page.account.GoogleAccountPage; +import org.zanata.page.googleaccount.GoogleAccountPage; import org.zanata.page.utility.HomePage; /** @@ -36,10 +36,13 @@ public HomePage registerGoogleOpenID(String name, String username, String passwo .goToHome() .clickSignInLink() .selectGoogleOpenID(); + EditProfilePage editProfilePage = googleAccountPage .enterGoogleEmail(email) .enterGooglePassword(password) - .clickSignIn(); + .clickSignIn() + .acceptPermissions(); + return editProfilePage .enterName(name) .enterUserName(username) diff --git a/functional-test/src/test/java/org/zanata/feature/account/AccountTestSuite.java b/functional-test/src/test/java/org/zanata/feature/account/AccountTestSuite.java index 41957c97f9..f5b1a29cfd 100644 --- a/functional-test/src/test/java/org/zanata/feature/account/AccountTestSuite.java +++ b/functional-test/src/test/java/org/zanata/feature/account/AccountTestSuite.java @@ -22,6 +22,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Suite; +import org.zanata.feature.googleopenid.GoogleOpenIDTest; /** * @author Damian Jansen djansen@redhat.com @@ -33,7 +34,7 @@ UsernameValidationTest.class, ValidEmailAddressTest.class, InvalidEmailAddressTest.class, - OpenIDTest.class + GoogleOpenIDTest.class }) public class AccountTestSuite { diff --git a/functional-test/src/test/java/org/zanata/feature/account/OpenIDTest.java b/functional-test/src/test/java/org/zanata/feature/googleopenid/GoogleOpenIDTest.java similarity index 69% rename from functional-test/src/test/java/org/zanata/feature/account/OpenIDTest.java rename to functional-test/src/test/java/org/zanata/feature/googleopenid/GoogleOpenIDTest.java index ab1a0bdb6f..c98c960a16 100644 --- a/functional-test/src/test/java/org/zanata/feature/account/OpenIDTest.java +++ b/functional-test/src/test/java/org/zanata/feature/googleopenid/GoogleOpenIDTest.java @@ -18,17 +18,20 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF * site: http://www.fsf.org. */ -package org.zanata.feature.account; +package org.zanata.feature.googleopenid; import org.hamcrest.Matchers; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.zanata.feature.BasicAcceptanceTest; +import org.zanata.feature.DetailedTest; +import org.zanata.page.googleaccount.GoogleAccountPage; +import org.zanata.page.googleaccount.GoogleManagePermissionsPage; import org.zanata.page.utility.HomePage; import org.zanata.util.ResetDatabaseRule; import org.zanata.workflow.BasicWorkFlow; +import org.zanata.workflow.GoogleWorkFlow; import org.zanata.workflow.RegisterWorkFlow; import static org.hamcrest.MatcherAssert.assertThat; @@ -40,32 +43,49 @@ /** * @author Damian Jansen djansen@redhat.com */ -@Category(BasicAcceptanceTest.class) -public class OpenIDTest +@Category(DetailedTest.class) +public class GoogleOpenIDTest { @ClassRule public static ResetDatabaseRule resetDatabaseRule = new ResetDatabaseRule(); + private String googleUsername1 = "zanata.test.1"; + private String googlePassword1; + @Before public void before() { + googlePassword1 = getSignIn(googleUsername1); + assumeFalse("Environment has Google login data", googlePassword1.isEmpty()); + assumeTrue("Google can be reached", googleIsReachable()); + new BasicWorkFlow().goToHome().deleteCookiesAndRefresh(); + + GoogleManagePermissionsPage googleManagePermissionsPage = + new GoogleWorkFlow().resetGooglePermissions(googleUsername1, googlePassword1); + + assumeFalse("Google contains localhost permissions", + googleManagePermissionsPage.pageContainsPermission("localhost")); + + GoogleAccountPage googleAccountPage = new GoogleWorkFlow().forceLogout(); + + assumeTrue(googleAccountPage.getUrl().contains("/Login")); + } @Test public void signInWithGoogleOpenID() { - assumeFalse("Environment has Google login data", getSignIn("zanata.test.1").isEmpty()); - assumeTrue("Google can be reached", googleIsReachable()); + String googleUsername = googleUsername1; + String googlePassword = googlePassword1; - String googleUsername = "zanata.test.1"; - String googlePassword = getSignIn(googleUsername); HomePage homePage = new RegisterWorkFlow().registerGoogleOpenID( "Zanata OpenID", "openidtest", googlePassword, googleUsername.concat("@gmail.com")); + assertThat("The registration message is shown", homePage.getNotificationMessage(), Matchers.equalTo("You will soon receive an email with a link to activate your account.")); }