From e249f067c720d76fc286a00f54e4d5a2e30c2a1e Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 26 Jun 2014 18:44:39 +0200 Subject: [PATCH] OO-1068: 4 selenium tests to test user preferences --- .../olat/portal/FunctionalSettingsTest.java | 62 ------- ...{ResumeTest.java => UserSettingsTest.java} | 171 +++++++++++++++++- .../org/olat/selenium/page/LoginPage.java | 28 ++- .../selenium/page/user/UserPasswordPage.java | 69 +++++++ .../user/UserPreferencesPageFragment.java | 36 +++- .../selenium/page/user/UserToolsPage.java | 9 + 6 files changed, 306 insertions(+), 69 deletions(-) rename src/test/java/org/olat/selenium/{ResumeTest.java => UserSettingsTest.java} (52%) create mode 100644 src/test/java/org/olat/selenium/page/user/UserPasswordPage.java diff --git a/src/test/java/org/olat/portal/FunctionalSettingsTest.java b/src/test/java/org/olat/portal/FunctionalSettingsTest.java index 273b0e5e5e0..ba715668c12 100644 --- a/src/test/java/org/olat/portal/FunctionalSettingsTest.java +++ b/src/test/java/org/olat/portal/FunctionalSettingsTest.java @@ -80,36 +80,6 @@ public class FunctionalSettingsTest { portalColumnCount = 2; } - @Test - @RunAsClient - public void checkResetSettings(){ - /* login for test setup */ - Assert.assertTrue(functionalUtil.login(browser)); - - /* reset settings */ - Assert.assertTrue(functionalHomeSiteUtil.resetSettings(browser)); - } - - @Test - @RunAsClient - public void checkLanguageSettings(){ - /* login for test setup */ - Assert.assertTrue(functionalUtil.login(browser)); - - /* set language */ - functionalHomeSiteUtil.selectLanguage(browser, FunctionalHomeSiteUtil.GERMAN_LANGUAGE_VALUE); - } - - @Test - @RunAsClient - public void checkDisableResume(){ - /* login for test setup */ - Assert.assertTrue(functionalUtil.login(browser)); - - /* resume off */ - functionalHomeSiteUtil.disableResume(browser); - } - @Test @RunAsClient public void checkActivatePortlet(){ @@ -238,38 +208,6 @@ public class FunctionalSettingsTest { } } - @Test - @RunAsClient - public void checkResetPassword() throws IOException, URISyntaxException{ - /* create test user via REST */ - List<UserVO> userVO = functionalVOUtil.createTestUsers(deploymentUrl, 1); - - /* login for test setup */ - Assert.assertTrue(functionalUtil.login(browser)); - - /* password test */ - UserVO current = userVO.get(0); - - Assert.assertTrue(functionalUtil.logout(browser)); - Assert.assertTrue(functionalUtil.login(browser, current.getLogin(), current.getPassword(), true)); - - functionalUtil.openSite(browser, FunctionalUtil.OlatSite.HOME); - functionalHomeSiteUtil.openActionByMenuTree(browser, FunctionalHomeSiteUtil.HomeSiteAction.SETTINGS); - - String newPassword = ("passwd_" + 0 + "_" + UUID.randomUUID().toString()).substring(0, 24); - - functionalUtil.openContentTab(browser, SettingsTab.PASSWORD.ordinal()); - - functionalUtil.typePassword(browser, functionalHomeSiteUtil.getOldPasswordCss(), current.getPassword()); - functionalUtil.typePassword(browser, functionalHomeSiteUtil.getNewPasswordCss(), newPassword); - functionalUtil.typePassword(browser, functionalHomeSiteUtil.getConfirmPasswordCss(), newPassword); - - functionalUtil.saveForm(browser, 0); - - Assert.assertTrue(functionalUtil.logout(browser)); - Assert.assertTrue(functionalUtil.login(browser, current.getLogin(), newPassword, true)); - } - @Test @RunAsClient diff --git a/src/test/java/org/olat/selenium/ResumeTest.java b/src/test/java/org/olat/selenium/UserSettingsTest.java similarity index 52% rename from src/test/java/org/olat/selenium/ResumeTest.java rename to src/test/java/org/olat/selenium/UserSettingsTest.java index 7ca2adf7ef8..dd27fd5dcb8 100644 --- a/src/test/java/org/olat/selenium/ResumeTest.java +++ b/src/test/java/org/olat/selenium/UserSettingsTest.java @@ -22,21 +22,26 @@ package org.olat.selenium; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; +import java.util.List; +import java.util.UUID; import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.graphene.page.InitialPage; import org.jboss.arquillian.graphene.page.Page; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.jcodec.common.Assert; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.olat.restapi.support.vo.CourseVO; import org.olat.selenium.page.LoginPage; import org.olat.selenium.page.course.CoursePageFragment; import org.olat.selenium.page.user.UserPreferencesPageFragment.ResumeOption; +import org.olat.selenium.page.user.UserPasswordPage; +import org.olat.selenium.page.user.UserPreferencesPageFragment; import org.olat.selenium.page.user.UserToolsPage; import org.olat.test.ArquillianDeployments; import org.olat.test.rest.RepositoryRestClient; @@ -53,7 +58,7 @@ import org.openqa.selenium.WebElement; * */ @RunWith(Arquillian.class) -public class ResumeTest { +public class UserSettingsTest { @Deployment(testable = false) public static WebArchive createDeployment() { @@ -77,7 +82,7 @@ public class ResumeTest { * @throws URISyntaxException */ @Test - public void resumeCourseAutomatically(@InitialPage LoginPage loginPage) + public void resume_resumeCourseAutomatically(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { //create a random user UserVO user = new UserRestClient(deploymentUrl).createRandomUser(); @@ -130,7 +135,7 @@ public class ResumeTest { * @throws URISyntaxException */ @Test - public void resumeCourseOnDemand(@InitialPage LoginPage loginPage) + public void resume_resumeCourseOnDemand(@InitialPage LoginPage loginPage) throws IOException, URISyntaxException { //create a random user UserVO user = new UserRestClient(deploymentUrl).createRandomUser(); @@ -166,4 +171,162 @@ public class ResumeTest { Assert.assertTrue(courseTitle.isDisplayed()); Assert.assertTrue(courseTitle.getText().contains(course.getTitle())); } + + /** + * Disable the resume function and check that the resume + * popup don't stay in our way after login. + * + * @param loginPage + * @throws IOException + * @throws URISyntaxException + */ + @Test + @RunAsClient + public void resume_disabled(@InitialPage LoginPage loginPage) + throws IOException, URISyntaxException { + UserVO user = new UserRestClient(deploymentUrl).createRandomUser(); + loginPage + .loginAs(user.getLogin(), user.getPassword()) + .resume(); + + //set the preferences to resume automatically + userTools + .openUserToolsMenu() + .openMySettings() + .openPreferences() + .setResume(ResumeOption.none); + + //logout + userTools.logout(); + + //login again + loginPage + .assertOnLoginPage() + .loginAs(user.getLogin(), user.getPassword()); + + //check that we don't see the resume button + List<WebElement> resumeButtons = browser.findElements(LoginPage.resumeButton); + Assert.assertTrue(resumeButtons.isEmpty()); + //double check that we are really logged in + loginPage.assertLoggedIn(user); + } + + /** + * Switch the language to german and after logout login to english + * and check every time. + * + * @param loginPage + * @throws IOException + * @throws URISyntaxException + */ + @Test + @RunAsClient + public void language_switch(@InitialPage LoginPage loginPage) + throws IOException, URISyntaxException { + UserVO user = new UserRestClient(deploymentUrl).createRandomUser(); + loginPage + .loginAs(user.getLogin(), user.getPassword()) + .resume(); + + //set the languages preferences to german + userTools + .assertOnUserTools() + .openUserToolsMenu() + .openMySettings() + .assertOnUserSettings() + .openPreferences() + .assertOnUserPreferences() + .setLanguage("de"); + + userTools.logout(); + + loginPage + .loginAs(user.getLogin(), user.getPassword()) + .resume(); + + WebElement usernameDE = browser.findElement(LoginPage.usernameFooterBy); + boolean de = usernameDE.getText().contains("Eingeloggt als"); + Assert.assertTrue(de); + List<WebElement> deMarker = browser.findElements(By.className("o_lang_de")); + Assert.assertFalse(deMarker.isEmpty()); + + + //set the languages preferences to english + userTools + .openUserToolsMenu() + .openMySettings() + .openPreferences() + .setLanguage("en"); + + userTools.logout(); + + loginPage + .loginAs(user.getLogin(), user.getPassword()) + .resume(); + + WebElement usernameEN = browser.findElement(LoginPage.usernameFooterBy); + boolean en = usernameEN.getText().contains("Logged in as"); + Assert.assertTrue(en); + List<WebElement> enMarker = browser.findElements(By.className("o_lang_en")); + Assert.assertFalse(enMarker.isEmpty()); + } + + /** + * Change the password, log out and try to log in again + * + * @param loginPage + * @throws IOException + * @throws URISyntaxException + */ + @Test + @RunAsClient + public void password_change(@InitialPage LoginPage loginPage) + throws IOException, URISyntaxException { + UserVO user = new UserRestClient(deploymentUrl).createRandomUser(); + loginPage + .loginAs(user.getLogin(), user.getPassword()) + .resume(); + + userTools + .assertOnUserTools() + .openUserToolsMenu() + .openPassword(); + + String newPassword = UUID.randomUUID().toString(); + UserPasswordPage password = UserPasswordPage.getUserPasswordPage(browser); + password.setNewPassword(user.getPassword(), newPassword); + + userTools.logout(); + + loginPage + .loginAs(user.getLogin(), newPassword) + .resume() + .assertLoggedIn(user); + } + + /** + * Reset the preferences and check that a log out happens + * + * @param loginPage + * @throws IOException + * @throws URISyntaxException + */ + @Test + @RunAsClient + public void resetPreferences(@InitialPage LoginPage loginPage) + throws IOException, URISyntaxException { + UserVO user = new UserRestClient(deploymentUrl).createRandomUser(); + loginPage + .loginAs(user.getLogin(), user.getPassword()) + .resume(); + + UserPreferencesPageFragment prefs = userTools + .openUserToolsMenu() + .openMySettings() + .openPreferences(); + //reset the preferences + prefs.resetPreferences(); + //check the user is log out + loginPage.assertOnLoginPage(); + } } diff --git a/src/test/java/org/olat/selenium/page/LoginPage.java b/src/test/java/org/olat/selenium/page/LoginPage.java index aa98db823ec..100afdf75bf 100644 --- a/src/test/java/org/olat/selenium/page/LoginPage.java +++ b/src/test/java/org/olat/selenium/page/LoginPage.java @@ -27,6 +27,7 @@ import org.jboss.arquillian.graphene.Graphene; import org.jboss.arquillian.graphene.page.Location; import org.jcodec.common.Assert; import org.olat.selenium.page.graphene.OOGraphene; +import org.olat.user.restapi.UserVO; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -59,6 +60,8 @@ public class LoginPage { public static final By disclaimerButtonXPath = By.xpath("//div[contains(@class,'o_sel_disclaimer_buttons')]/button"); public static final By resumeButton = By.className("o_sel_resume_yes"); + + public static final By usernameFooterBy = By.id("o_username"); @FindBy(className = loginFormClassName) private WebElement loginDiv; @@ -84,19 +87,28 @@ public class LoginPage { return this; } + public void assertLoggedIn(UserVO user) { + WebElement username = browser.findElement(usernameFooterBy); + Assert.assertNotNull(username); + Assert.assertTrue(username.isDisplayed()); + String name = username.getText(); + Assert.assertTrue(name.contains(user.getLastName())); + } + /** * Login and accept the disclaimer if there is one. * * @param username * @param password */ - public void loginAs(String username, String password) { + public LoginPage loginAs(String username, String password) { usernameInput.sendKeys(username); passwordInput.sendKeys(password); Graphene.guardHttp(loginButton).click(); OOGraphene.waitElement(authOrDisclaimerXPath); + //wipe out disclaimer List<WebElement> disclaimer = browser.findElements(disclaimerXPath); if(disclaimer.size() > 0) { //click the disclaimer @@ -106,17 +118,29 @@ public class LoginPage { Graphene.guardHttp(acknowledgeButton).click(); OOGraphene.waitElement(authXPath); } + return this; } /** * Resume the session, and assert that the resume panel has popped */ - public void resumeWithAssert() { + public LoginPage resumeWithAssert() { WebElement resume = browser.findElement(resumeButton); Assert.assertNotNull(resume); Assert.assertTrue(resume.isDisplayed()); resume.click(); OOGraphene.waitBusy(); + return this; + } + + public LoginPage resume() { + List<WebElement> resumes = browser.findElements(resumeButton); + if(resumes.size() > 0 && resumes.get(0).isDisplayed()) { + WebElement resume = resumes.get(0); + resume.click(); + OOGraphene.waitBusy(); + } + return this; } } diff --git a/src/test/java/org/olat/selenium/page/user/UserPasswordPage.java b/src/test/java/org/olat/selenium/page/user/UserPasswordPage.java new file mode 100644 index 00000000000..6171a6c439d --- /dev/null +++ b/src/test/java/org/olat/selenium/page/user/UserPasswordPage.java @@ -0,0 +1,69 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.selenium.page.user; + +import org.jboss.arquillian.drone.api.annotation.Drone; +import org.jboss.arquillian.graphene.Graphene; +import org.olat.selenium.page.graphene.OOGraphene; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +/** + * To drive the password change page. + * + * Initial date: 26.06.2014<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class UserPasswordPage { + + + public static final By oldPasswordBy = By.className("o_sel_home_pwd_old"); + + @Drone + private WebDriver browser; + + public static UserPasswordPage getUserPasswordPage(WebDriver browser) { + OOGraphene.waitElement(oldPasswordBy); + WebElement main = browser.findElement(By.id("o_main")); + return Graphene.createPageFragment(UserPasswordPage.class, main); + } + + public UserPasswordPage setNewPassword(String oldPassword, String newPassword) { + //fill the form + By oldPasswordBy = By.cssSelector("div.o_sel_home_pwd_old input"); + WebElement oldPasswordEl = browser.findElement(oldPasswordBy); + oldPasswordEl.sendKeys(oldPassword); + By newPasswordBy = By.cssSelector("div.o_sel_home_pwd_new_1 input"); + WebElement newPasswordEl = browser.findElement(newPasswordBy); + newPasswordEl.sendKeys(newPassword); + By passwordConfirmationBy = By.cssSelector("div.o_sel_home_pwd_new_2 input"); + WebElement passwordConfirmationEl = browser.findElement(passwordConfirmationBy); + passwordConfirmationEl.sendKeys(newPassword); + //save it + By saveButtonBy = By.cssSelector("div.form-inline.o_sel_home_pwd_buttons button"); + WebElement saveButton = browser.findElement(saveButtonBy); + saveButton.click(); + OOGraphene.waitBusy(); + return this; + } + +} diff --git a/src/test/java/org/olat/selenium/page/user/UserPreferencesPageFragment.java b/src/test/java/org/olat/selenium/page/user/UserPreferencesPageFragment.java index 9fc2f7f2b24..890063f0ec5 100644 --- a/src/test/java/org/olat/selenium/page/user/UserPreferencesPageFragment.java +++ b/src/test/java/org/olat/selenium/page/user/UserPreferencesPageFragment.java @@ -19,13 +19,17 @@ */ package org.olat.selenium.page.user; +import java.util.List; + import org.jboss.arquillian.drone.api.annotation.Drone; -import org.jcodec.common.Assert; +import org.junit.Assert; +import org.olat.selenium.page.LoginPage; import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.ui.Select; /** * The user system preferences. @@ -42,6 +46,10 @@ public class UserPreferencesPageFragment { public static final By ondemandRadio = By.xpath("//div[contains(@class,'o_sel_home_settings_resume')]//input[@type='radio' and @value='ondemand']"); public static final By saveSystemSettingsButton = By.xpath("//div[contains(@class,'o_sel_home_settings_gui_buttons')]//button[@type='button']"); + public static final By saveSystemPrefsButton = By.xpath("//div[contains(@class,'o_sel_home_settings_prefs_buttons')]//button[@type='button']"); + public static final By resetPrefsButton = By.xpath("//div[contains(@class,'o_sel_home_settings_reset_sysprefs_buttons')]//button[@type='button']"); + + @Drone private WebDriver browser; @@ -89,6 +97,32 @@ public class UserPreferencesPageFragment { return this; } + public UserPreferencesPageFragment setLanguage(String language) { + By selectLangBy = By.cssSelector("div.o_sel_home_settings_language select"); + WebElement selectLang = browser.findElement(selectLangBy); + new Select(selectLang).selectByValue(language); + + WebElement saveButton = browser.findElement(saveSystemPrefsButton); + saveButton.click(); + OOGraphene.waitBusy(); + return this; + } + + public UserPreferencesPageFragment resetPreferences() { + By checksBy = By.cssSelector("div.o_sel_home_settings_reset_sysprefs div.checkbox input"); + List<WebElement> checks = browser.findElements(checksBy); + Assert.assertEquals(3, checks.size()); + + for(WebElement check:checks) { + check.click(); + } + + WebElement saveButton = browser.findElement(resetPrefsButton); + saveButton.click(); + OOGraphene.waitElement(LoginPage.loginFormBy); + return this; + } + public enum ResumeOption { none, auto, diff --git a/src/test/java/org/olat/selenium/page/user/UserToolsPage.java b/src/test/java/org/olat/selenium/page/user/UserToolsPage.java index aca0660badb..9f5acd92583 100644 --- a/src/test/java/org/olat/selenium/page/user/UserToolsPage.java +++ b/src/test/java/org/olat/selenium/page/user/UserToolsPage.java @@ -50,6 +50,7 @@ public class UserToolsPage { @FindBy(className = "o_sel_user_tools-mysettings") private WebElement mySettingsLink; + @FindBy(className = "o_logout") private WebElement logoutLink; @@ -91,6 +92,14 @@ public class UserToolsPage { return userSettings; } + public UserSettingsPage openPassword() { + WebElement passwordLink = browser.findElement(By.className("o_sel_user_tools-mypassword")); + Assert.assertTrue(passwordLink.isDisplayed()); + passwordLink.click(); + OOGraphene.waitBusy(); + return userSettings; + } + /** * Log out and wait until the login form appears */ -- GitLab