/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, 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.jboss.seam.example.seamspace.test.selenium;
import java.text.MessageFormat;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.testng.AssertJUnit.assertTrue;
import static org.testng.AssertJUnit.assertFalse;
/**
* This class tests user management in SeamSpace application
* @author Jozef Hartinger
*
*/
public class UserTest extends SeleniumSeamSpaceTest
{
@Override
@BeforeMethod
public void setUp()
{
super.setUp();
browser.clickAndWait(SECURITY);
browser.clickAndWait(MANAGE_USERS);
}
@Test(dependsOnGroups = {"loginTest"})
public void userCreatingTest()
{
String username = "jharting";
String password = "topSecret";
String[] roles = {"admin", "user"};
createNewUser("Jozef", "Hartinger", username, password, password, roles, true);
String userRow = MessageFormat.format(USER_TABLE_ROW_BY_NAME, username);
// check user list
assertTrue("User not found in userlist.", browser.isElementPresent(userRow));
assertTrue("User not in admin role.", browser.getText(userRow + USER_TABLE_ROLES).contains("admin"));
assertTrue("User not in user role.", browser.getText(userRow + USER_TABLE_ROLES).contains("user"));
assertTrue("User not enabled.", browser.isElementPresent(userRow + USER_TABLE_CHECKBOX_CHECKED));
// check new user can login
browser.clickAndWait(LOGOUT);
login(username, password);
assertTrue("Unable to login with new user's credentials.", isLoggedIn());
}
@Test(dependsOnGroups = {"loginTest"})
public void userEditingTest() {
String username = "shadowman";
String password = "password";
String[] roles = {"admin", "user"};
String userRow = MessageFormat.format(USER_TABLE_ROW_BY_NAME, username);
browser.clickAndWait(userRow + USER_TABLE_EDIT);
fillUpdatableUserDetails(password, password, roles, true);
browser.clickAndWait(USER_SAVE);
assertTrue("User not in admin role.", browser.getText(userRow + USER_TABLE_ROLES).contains("admin"));
assertTrue("User not in user role.", browser.getText(userRow + USER_TABLE_ROLES).contains("user"));
browser.clickAndWait(LOGOUT);
login(username, password);
assertTrue("Unable to login with changed password", isLoggedIn());
}
@Test(dependsOnGroups = {"loginTest"})
public void userDeletingTest() {
String username = "mona";
String userRow = MessageFormat.format(USER_TABLE_ROW_BY_NAME, username);
assertTrue("User " + username + " not in user list.", browser.isElementPresent(userRow));
browser.chooseOkOnNextConfirmation();
browser.click(userRow + USER_TABLE_DELETE);
browser.getConfirmation();
browser.waitForPageToLoad(TIMEOUT);
assertFalse("User " + username + " exists after deletion", browser.isElementPresent(userRow));
}
@Test(dependsOnGroups = {"loginTest"})
public void cancelledUserDeletingTest() throws InterruptedException {
String username = "demo";
String userRow = MessageFormat.format(USER_TABLE_ROW_BY_NAME, username);
assertTrue("User " + username + " not in user list.", browser.isElementPresent(userRow));
browser.chooseCancelOnNextConfirmation();
browser.click(userRow + USER_TABLE_DELETE);
browser.getConfirmation();
browser.refreshAndWait();
assertTrue("User " + username + " missing in user list after cancelled deletion.", browser.isElementPresent(userRow));
}
@Test(dependsOnGroups = {"loginTest"}, dependsOnMethods={"userCreatingTest"})
public void disablingUserAccountTest() {
String username = "johny";
String password = "password";
String userRow = MessageFormat.format(USER_TABLE_ROW_BY_NAME, username);
createNewUser("John", "Doe", username, password, password, new String[]{"user"}, false);
assertTrue("User not found in userlist.", browser.isElementPresent(userRow));
assertTrue("User account enabled.", browser.isElementPresent(userRow + USER_TABLE_CHECKBOX_UNCHECKED));
browser.clickAndWait(LOGOUT);
login(username, password);
assertFalse("User logged in despite his account was disabled.", isLoggedIn());
}
private void createNewUser(String firstName, String lastName, String username, String password, String confirm, String[] roles, boolean enabled) {
browser.clickAndWait(CREATE_USER_BUTTON);
fillNewUserDetails(firstName, lastName, username, password, confirm, roles, enabled);
browser.clickAndWait(USER_SAVE);
}
private void fillNewUserDetails(String firstName, String lastName, String username, String password, String confirm, String[] roles, boolean enabled)
{
browser.type(USER_FIRSTNAME, firstName);
browser.type(USER_LASTNAME, lastName);
browser.type(USER_NAME, username);
fillUpdatableUserDetails(password, confirm, roles, enabled);
}
private void fillUpdatableUserDetails(String password, String confirm, String[] roles, boolean enabled) {
browser.type(USER_PASSWORD, password);
browser.type(USER_CONFIRM, confirm);
for (String role : roles) {
assertTrue("Unable to add user to role: " + role, browser.isElementPresent(MessageFormat.format(USER_ROLE_BY_NAME_CHECKBOX, role)));
browser.check(MessageFormat.format(USER_ROLE_BY_NAME_CHECKBOX, role));
}
if (enabled)
{
browser.check(USER_ENABLED);
}
}
}