package org.springside.examples.miniweb.functional.account; import static org.junit.Assert.*; import java.util.List; import org.apache.commons.collections.ListUtils; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.springside.examples.miniweb.data.AccountData; import org.springside.examples.miniweb.entity.account.Authority; import org.springside.examples.miniweb.entity.account.Role; import org.springside.examples.miniweb.functional.BaseFunctionalTestCase; import org.springside.examples.miniweb.functional.Gui; import org.springside.examples.miniweb.functional.Gui.RoleColumn; import org.springside.modules.test.utils.DataUtils; import org.springside.modules.test.utils.SeleniumUtils; /** * 角色管理的功能测试,测试页面JavaScript及主要用户故事流程. * * @author calvin */ public class RoleManagerTest extends BaseFunctionalTestCase { private static Role testRole = null; /** * 检验OverViewPage. */ @Test public void overviewPage() { driver.findElement(By.linkText(Gui.MENU_ROLE)).click(); WebElement table = driver.findElement(By.xpath("//table[@id='contentTable']")); assertEquals("管理员", SeleniumUtils.getTable(table, 1, RoleColumn.NAME.ordinal())); assertEquals("浏览用户, 修改用户, 浏览角色, 修改角色", SeleniumUtils.getTable(table, 1, RoleColumn.AUTHORITIES.ordinal())); } /** * 创建公共测试角色. */ @Test public void createRole() { driver.findElement(By.linkText(Gui.MENU_ROLE)).click(); driver.findElement(By.linkText("增加新角色")).click(); //生成测试数据 Role role = AccountData.getRandomRoleWithAuthority(); //输入数据 SeleniumUtils.type(driver.findElement(By.id("name")), role.getName()); for (Authority authority : role.getAuthorityList()) { driver.findElement(By.id("checkedAuthIds-" + authority.getId())).setSelected(); } driver.findElement(By.xpath(Gui.BUTTON_SUBMIT)).click(); //校验结果 assertTrue(SeleniumUtils.isTextPresent(driver, "保存角色成功")); verifyRole(role); //设置公共测试角色 testRole = role; } /** * 修改公共测试角色. */ @Test public void editRole() { ensureTestRoleExist(); driver.findElement(By.linkText(Gui.MENU_ROLE)).click(); driver.findElement(By.id("editLink-" + testRole.getName())).click(); testRole.setName(DataUtils.randomName("Role")); SeleniumUtils.type(driver.findElement(By.id("name")), testRole.getName()); for (Authority authority : testRole.getAuthorityList()) { SeleniumUtils.uncheck(driver.findElement(By.id("checkedAuthIds-" + authority.getId()))); } testRole.getAuthorityList().clear(); List<Authority> authorityList = AccountData.getRandomDefaultAuthorityList(); for (Authority authority : authorityList) { driver.findElement(By.id("checkedAuthIds-" + authority.getId())).setSelected(); } testRole.getAuthorityList().addAll(authorityList); driver.findElement(By.xpath(Gui.BUTTON_SUBMIT)).click(); assertTrue(SeleniumUtils.isTextPresent(driver, "保存角色成功")); verifyRole(testRole); } /** * 删除测试角色. */ @Test public void deleteRole() { ensureTestRoleExist(); driver.findElement(By.linkText(Gui.MENU_ROLE)).click(); driver.findElement(By.id("deleteLink-" + testRole.getName())).click(); assertTrue(SeleniumUtils.isTextPresent(driver, "删除角色成功")); assertFalse(SeleniumUtils.isTextPresent(driver, testRole.getName())); testRole = null; } @SuppressWarnings("unchecked") private void verifyRole(Role role) { driver.findElement(By.id("editLink-" + role.getName())).click(); assertEquals(role.getName(), driver.findElement(By.id("name")).getValue()); for (Authority authority : role.getAuthorityList()) { assertTrue(driver.findElement(By.id("checkedAuthIds-" + authority.getId())).isSelected()); } List<Authority> uncheckAuthList = ListUtils.subtract(AccountData.getDefaultAuthorityList(), role .getAuthorityList()); for (Authority authority : uncheckAuthList) { assertFalse(driver.findElement(By.id("checkedAuthIds-" + authority.getId())).isSelected()); } } /** * 确保公共测试角色已初始化的工具函数. */ private void ensureTestRoleExist() { if (testRole == null) { createRole(); } } }