diff --git a/src/test/java/org/olat/selenium/UserTest.java b/src/test/java/org/olat/selenium/UserTest.java index 079a8455b5a7f520bb4117daa48ed4ffff7c384a..5403933e349e503e87b71c24cae12b3569f639fd 100644 --- a/src/test/java/org/olat/selenium/UserTest.java +++ b/src/test/java/org/olat/selenium/UserTest.java @@ -35,12 +35,12 @@ import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Assert; import org.junit.Assume; -import org.junit.Ignore; 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.NavigationPage; +import org.olat.selenium.page.Student; import org.olat.selenium.page.User; import org.olat.selenium.page.course.CoursePageFragment; import org.olat.selenium.page.graphene.OOGraphene; @@ -498,7 +498,7 @@ public class UserTest { * @throws IOException * @throws URISyntaxException */ - @Test @Ignore + @Test @RunAsClient public void importUsers(@InitialPage LoginPage loginPage, @Drone @User WebDriver userBrowser) @@ -540,4 +540,70 @@ public class UserTest { .resume() .assertLoggedIn(user1); } + + /** + * Import 1 new user and 1 existing, change the password and the last name + * of the existing user. + * + * @param loginPage + * @param existingUserBrowser + * @throws IOException + * @throws URISyntaxException + */ + @Test + @RunAsClient + public void importExistingUsers(@InitialPage LoginPage loginPage, + @Drone @User WebDriver existingUserBrowser, + @Drone @Student WebDriver newUserBrowser) + throws IOException, URISyntaxException { + + UserVO user1 = new UserRestClient(deploymentUrl) + .createRandomUser("tsukune"); + + //login + loginPage + .assertOnLoginPage() + .loginAs("administrator", "openolat") + .resume(); + + UserAdminPage userAdminPage = navBar + .openUserManagement() + .openImportUsers(); + //start import wizard + ImportUserPage importWizard = userAdminPage.startImport(); + + String uuid = UUID.randomUUID().toString(); + String username1 = "moka-" + uuid; + + StringBuilder csv = new StringBuilder(); + UserVO newUser = importWizard.append(username1, "rosario02", "Moka", "Akashiya", csv); + user1 = importWizard.append(user1, "Aono", "openolat2", csv); + importWizard + .fill(csv.toString()) + .next() // -> preview + .assertGreen(1) + .assertWarn(1) + .changePassword() + .next() // -> groups + .next() // -> emails + .finish(); + + OOGraphene.waitAndCloseBlueMessageWindow(browser); + + //existing user log in with its new password and check if its name was updated + LoginPage userLoginPage = LoginPage.getLoginPage(existingUserBrowser, deploymentUrl); + //tools + userLoginPage + .loginAs(user1.getLogin(), "openolat2") + .resume() + .assertLoggedInByLastName("Aono"); + + //new user log in + LoginPage newLoginPage = LoginPage.getLoginPage(newUserBrowser, deploymentUrl); + //tools + newLoginPage + .loginAs(newUser.getLogin(), "rosario02") + .resume() + .assertLoggedInByLastName("Akashiya"); + } } diff --git a/src/test/java/org/olat/selenium/page/LoginPage.java b/src/test/java/org/olat/selenium/page/LoginPage.java index c82430671da9255fe8d1f681531a7dde3ed3ac0f..fa61508fba1364f6eb093c01c0a129953ad87851 100644 --- a/src/test/java/org/olat/selenium/page/LoginPage.java +++ b/src/test/java/org/olat/selenium/page/LoginPage.java @@ -79,6 +79,14 @@ public class LoginPage { Assert.assertTrue(name.contains(user.getLastName())); } + public void assertLoggedInByLastName(String lastName) { + WebElement username = browser.findElement(usernameFooterBy); + Assert.assertNotNull(username); + Assert.assertTrue(username.isDisplayed()); + String name = username.getText(); + Assert.assertTrue(name.contains(lastName)); + } + /** * Login and accept the disclaimer if there is one. * diff --git a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java index 6ead43e3c6d18d57ab3778d48d6056efcd406136..b44d2040e8ff1fa2eacead2b3a3e715bcddffcdf 100644 --- a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java +++ b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java @@ -69,6 +69,11 @@ public class OOGraphene { ((JavascriptExecutor)browser).executeScript("top.tinymce.activeEditor.setContent('" + content + "')"); } + public static final void textarea(WebElement textareaEl, String content, WebDriver browser) { + String id = textareaEl.getAttribute("id"); + ((JavascriptExecutor)browser).executeScript("document.getElementById('" + id + "').value = '" + content + "'"); + } + public static final void date(Date date, String seleniumCssClass, WebDriver browser) { Locale locale = getLocale(browser); String dateText = DateFormat.getDateInstance(DateFormat.SHORT, locale).format(date); diff --git a/src/test/java/org/olat/selenium/page/user/ImportUserPage.java b/src/test/java/org/olat/selenium/page/user/ImportUserPage.java index acac1fc0ae260bb738bf1203b1be53f3aef178c3..e4b99bfa2bca9081798ebaf531b8c9c5c67eebf1 100644 --- a/src/test/java/org/olat/selenium/page/user/ImportUserPage.java +++ b/src/test/java/org/olat/selenium/page/user/ImportUserPage.java @@ -19,16 +19,12 @@ */ package org.olat.selenium.page.user; -import java.awt.Toolkit; -import java.awt.datatransfer.StringSelection; import java.util.List; import org.junit.Assert; import org.olat.selenium.page.graphene.OOGraphene; import org.olat.user.restapi.UserVO; import org.openqa.selenium.By; -import org.openqa.selenium.Keys; -import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -54,12 +50,16 @@ public class ImportUserPage { public ImportUserPage fill(String csv) { By importTextareaBy = By.cssSelector("div.o_wizard_steps_current_content textarea"); WebElement importTextareaEl = browser.findElement(importTextareaBy); - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(csv), null); - if(Platform.MAC.equals(Platform.getCurrent())) { - importTextareaEl.sendKeys(Keys.COMMAND + "v"); - } else { - importTextareaEl.sendKeys(Keys.CONTROL + "v"); - } + //focus + importTextareaEl.sendKeys(""); + OOGraphene.textarea(importTextareaEl, csv, browser); + return this; + } + + public ImportUserPage changePassword() { + By updatePassword = By.cssSelector("input[name='update.password'][type='checkbox']"); + browser.findElement(updatePassword).click(); + OOGraphene.waitBusy(browser); return this; } @@ -77,7 +77,10 @@ public class ImportUserPage { * @param sb */ public UserVO append(String username, String password, String firstName, String lastName, StringBuilder sb) { - + if(sb.length() > 0) { + sb.append("\\n"); + } + String email = username.replace("-", "") + "@frentix.com"; String institution = "frentix GmbH"; String institutionNumber = "034-" + System.currentTimeMillis(); @@ -91,7 +94,7 @@ public class ImportUserPage { .append(email).append(" ") .append(institution).append(" ") .append(institutionNumber).append(" ") - .append(institutionEmail).append('\n'); + .append(institutionEmail); UserVO userVo = new UserVO(); userVo.setLogin(username); @@ -101,6 +104,27 @@ public class ImportUserPage { return userVo; } + public UserVO append(UserVO userVo, String newLastName, String password, StringBuilder sb) { + if(sb.length() > 0) { + sb.append("\\n"); + } + sb.append(userVo.getLogin()).append(" ") + .append(password).append(" ") + .append("de").append(" ") + .append(userVo.getFirstName()).append(" "); + if(newLastName != null) { + sb.append(newLastName).append(" "); + userVo.setLastName(newLastName); + } else { + sb.append(userVo.getLastName()).append(" "); + } + sb.append(userVo.getEmail()).append(" ") + .append("").append(" ") + .append("").append(" ") + .append(""); + return userVo; + } + public ImportUserPage assertGreen(int numOfGreen) { By greenBy = By.cssSelector(".o_dnd_label i.o_icon_new"); List<WebElement> greenEls = browser.findElements(greenBy); @@ -108,6 +132,14 @@ public class ImportUserPage { return this; } + public ImportUserPage assertWarn(int numOfWarns) { + By warnBy = By.cssSelector(".o_dnd_label i.o_icon_warn"); + List<WebElement> warnEls = browser.findElements(warnBy); + Assert.assertEquals(numOfWarns, warnEls.size()); + return this; + + } + /** * Next * @return this