1 16 package com.blandware.atleap.webapp.webtest; 17 18 import com.blandware.atleap.common.util.RegExUtil; 19 import com.gargoylesoftware.htmlunit.html.HtmlAnchor; 20 import com.gargoylesoftware.htmlunit.html.HtmlForm; 21 import com.gargoylesoftware.htmlunit.html.HtmlOption; 22 import com.gargoylesoftware.htmlunit.html.HtmlPage; 23 import com.gargoylesoftware.htmlunit.html.HtmlSelect; 24 import com.gargoylesoftware.htmlunit.html.HtmlTable; 25 import com.gargoylesoftware.htmlunit.html.HtmlTableCell; 26 import com.gargoylesoftware.htmlunit.html.HtmlTableRow; 27 import com.gargoylesoftware.htmlunit.html.HtmlTextInput; 28 import org.jaxen.JaxenException; 29 30 import java.util.Iterator ; 31 import java.util.List ; 32 33 40 public class UserManagementTest extends BaseWebTestCase { 41 42 45 public UserManagementTest() { 46 } 47 48 53 public UserManagementTest(String name) { 54 super(name); 55 } 56 57 60 protected void verifyListPage() throws JaxenException { 61 assertXPathResultNotNull("//table[@id='userList']"); 62 Boolean hasRows = (Boolean ) evaluateXPath("count(//table[@id='userList']/tbody/tr) > 0", lastResponse); 63 assertNotNull(hasRows); 64 assertTrue(hasRows.booleanValue()); 65 } 66 67 70 protected void verifyUpdatePage() throws Exception { 71 String title = lastResponse.getTitleText(); 73 assertMatches(title, ".+" + RegExUtil.escapeMetasymbols(getMessage("core.user.callUpdate"))); 74 } 75 76 79 protected void verifyCreatePage() throws Exception { 80 String title = lastResponse.getTitleText(); 82 assertMatches(title, ".+" + RegExUtil.escapeMetasymbols(getMessage("core.user.create"))); 83 } 84 85 88 protected void verifyAssignRolesAndGroupsPage() throws Exception { 89 String title = lastResponse.getTitleText(); 91 assertMatches(title, ".+" + RegExUtil.escapeMetasymbols(getMessage("core.user.assignRolesAndGroups"))); 92 } 93 94 96 public void testListUsers() throws Exception { 97 98 login(); 100 101 invoke("/core/user/list.do"); 103 verifyListPage(); 104 } 105 106 public void testViewProfile() throws Exception { 107 108 login(); 110 111 invoke("/core/user/view.do"); 113 114 String title = lastResponse.getTitleText(); 116 assertMatches(title, ".+" + RegExUtil.escapeMetasymbols(getMessage("core.user.view"))); 117 118 String userNameXPathExpr = "string(//table[@id='userTable']//tr/th[text() = '" + getMessage("core.user.form.name") + "']/following-sibling::td)"; 120 assertXPathResultEquals(userNameXPathExpr, "admin"); 121 122 clickButtonWithLabel(null, getMessage("core.commons.buttons.showList")); 124 125 verifyListPage(); 127 128 invoke("/core/user/view.do"); 130 131 clickButtonWithLabel(null, getMessage("core.commons.buttons.callUpdate")); 133 134 verifyUpdatePage(); 136 } 137 138 public void testCreateAndDelete() throws Exception { 139 140 login(); 142 143 invoke("/core/user/list.do"); 145 verifyListPage(); 146 147 clickButtonWithLabel(null, getMessage("core.commons.buttons.create")); 149 150 verifyCreatePage(); 152 153 HtmlForm userForm = getFormByName("userForm"); 154 getInputByName(userForm, "name", INPUT_TYPE_TEXT).setValueAttribute("test"); 155 getInputByName(userForm, "password", INPUT_TYPE_PASSWORD).setValueAttribute("testpass"); 156 getInputByName(userForm, "confirmPassword", INPUT_TYPE_PASSWORD).setValueAttribute("testpass"); 157 getInputByName(userForm, "firstName", INPUT_TYPE_TEXT).setValueAttribute("Test"); 158 getInputByName(userForm, "lastName", INPUT_TYPE_TEXT).setValueAttribute("User"); 159 getInputByName(userForm, "city", INPUT_TYPE_TEXT).setValueAttribute("Izhevsk"); 160 getInputByName(userForm, "province", INPUT_TYPE_TEXT).setValueAttribute("Udmurtia"); 161 getInputByName(userForm, "country", INPUT_TYPE_TEXT).setValueAttribute("Russia"); 162 getInputByName(userForm, "postalCode", INPUT_TYPE_TEXT).setValueAttribute("426000"); 163 164 getInputByName(userForm, "email", INPUT_TYPE_TEXT).setValueAttribute("test.user@.somewhere.net"); 166 getInputByName(userForm, "website", INPUT_TYPE_TEXT).setValueAttribute("http://site.somewhere.net"); 167 168 clickButtonWithLabel(userForm, getMessage("core.commons.buttons.signup")); 170 171 verifyCreatePage(); 173 174 String errorFieldXPathExpr = "string(//form[@name='userForm']//label[@class='error']/@for)"; 176 assertXPathResultEquals(errorFieldXPathExpr, "email"); 177 178 userForm = getFormByName("userForm"); 180 getInputByName(userForm, "name", INPUT_TYPE_TEXT).setValueAttribute("test"); 181 getInputByName(userForm, "password", INPUT_TYPE_PASSWORD).setValueAttribute("testpass"); 182 getInputByName(userForm, "confirmPassword", INPUT_TYPE_PASSWORD).setValueAttribute("testpass"); 183 getInputByName(userForm, "firstName", INPUT_TYPE_TEXT).setValueAttribute("Test"); 184 getInputByName(userForm, "lastName", INPUT_TYPE_TEXT).setValueAttribute("User"); 185 getInputByName(userForm, "city", INPUT_TYPE_TEXT).setValueAttribute("Izhevsk"); 186 getInputByName(userForm, "province", INPUT_TYPE_TEXT).setValueAttribute("Udmurtia"); 187 getInputByName(userForm, "country", INPUT_TYPE_TEXT).setValueAttribute("Russia"); 188 getInputByName(userForm, "postalCode", INPUT_TYPE_TEXT).setValueAttribute("426000"); 189 getInputByName(userForm, "email", INPUT_TYPE_TEXT).setValueAttribute("test.user@somewhere.net"); 190 getInputByName(userForm, "website", INPUT_TYPE_TEXT).setValueAttribute("http://site.somewhere.net"); 191 192 clickButtonWithLabel(userForm, getMessage("core.commons.buttons.signup")); 194 195 verifyAssignRolesAndGroupsPage(); 197 198 clickButtonWithLabel(null, getMessage("core.commons.buttons.cancel")); 200 verifyListPage(); 201 202 logout(); 204 login("test", "testpass"); 205 206 logout(); 208 login(); 209 210 invoke("/core/user/list.do"); 212 verifyListPage(); 213 214 218 HtmlTable userTable = (HtmlTable) evaluateXPath("//table[@id='userList']", lastResponse); 219 220 List anchors = userTable.getHtmlElementsByTagName("a"); 222 223 String deleteUri = "/core/user/delete"; 225 String userNameParam = "name=test"; 226 Iterator anchorsIterator = anchors.iterator(); 227 HtmlAnchor deleteAnchor = null; 228 while ( anchorsIterator.hasNext() && deleteAnchor == null ) { 229 HtmlAnchor anchor = (HtmlAnchor) anchorsIterator.next(); 230 String href = anchor.getHrefAttribute(); 231 if ( href.indexOf(deleteUri) >= 0 ) { 232 if ( href.indexOf(userNameParam) > 0 ) { 233 deleteAnchor = anchor; 234 } 235 } 236 } 237 238 assertNotNull("No link could be found to delete user 'test'", deleteAnchor); 239 240 setLastResponse((HtmlPage) deleteAnchor.click()); 242 243 verifyListPage(); 245 246 HtmlTableCell userCell = (HtmlTableCell) evaluateXPath("//table[@id='userList']/tbody//td[text()='test']", lastResponse); 248 assertNull("User 'test' was not deleted", userCell); 249 250 } 251 252 public void testAssignRolesAndGroups() throws Exception { 253 254 login(); 256 257 invoke("/core/user/list.do"); 259 verifyListPage(); 260 261 265 HtmlTable userTable = (HtmlTable) evaluateXPath("//table[@id='userList']", lastResponse); 266 267 List anchors = userTable.getHtmlElementsByTagName("a"); 269 270 String assignRolesUri = "/core/user/callAssignRolesAndGroups"; 272 String userNameParam = "userName=user"; 273 Iterator anchorsIterator = anchors.iterator(); 274 HtmlAnchor assignRolesAndGroupsAnchor = null; 275 while ( anchorsIterator.hasNext() && assignRolesAndGroupsAnchor == null ) { 276 HtmlAnchor anchor = (HtmlAnchor) anchorsIterator.next(); 277 String href = anchor.getHrefAttribute(); 278 if ( href.indexOf(assignRolesUri) >= 0 ) { 279 if ( href.indexOf(userNameParam) > 0 ) { 280 assignRolesAndGroupsAnchor = anchor; 281 } 282 } 283 } 284 285 assertNotNull("No link could be found to assign roles/groups to user 'user'", assignRolesAndGroupsAnchor); 286 287 setLastResponse((HtmlPage) assignRolesAndGroupsAnchor.click()); 289 verifyAssignRolesAndGroupsPage(); 290 291 HtmlForm selectRolesAndGroupsForm = getFormByName("selectRolesAndGroupsForm"); 292 293 HtmlSelect availableGroups = getSelectByName(selectRolesAndGroupsForm, "availableGroups"); 295 HtmlSelect selectedGroups = getSelectByName(selectRolesAndGroupsForm, "selectedGroups"); 296 297 int numberOfOptions = availableGroups.getOptionSize(); 300 for ( int i = 0; i < numberOfOptions; i++ ) { 301 HtmlOption option = availableGroups.getOption(i); 302 if ( option.getValueAttribute().equals("managers") ) { 303 availableGroups.removeOption(i); 304 selectedGroups.appendOption(option); 305 continue; 306 } 307 308 option.setSelected(true); 310 } 311 312 numberOfOptions = selectedGroups.getOptionSize(); 314 for ( int i = 0; i < numberOfOptions; i++ ) { 315 HtmlOption option = selectedGroups.getOption(i); 316 option.setSelected(true); 317 } 318 319 clickButtonWithLabel(selectRolesAndGroupsForm, getMessage("core.commons.buttons.assign")); 321 322 verifyListPage(); 324 325 userTable = (HtmlTable) evaluateXPath("//table[@id='userList']", lastResponse); 327 Iterator rowsIterator = userTable.getRows().iterator(); 328 while ( rowsIterator.hasNext() ) { 329 HtmlTableRow row = (HtmlTableRow) rowsIterator.next(); 330 if ( row.getCells().size() > 0 ) { 331 HtmlTableCell cell = row.getCell(0); 332 if ( cell.getFirstChild().getNodeValue().equals("user") ) { 333 cell = row.getCell(5); 335 String text = cell.getFirstChild().getNodeValue(); 336 assertTrue("User 'user' must be a member of both Users and Managers groups", text.indexOf("Users") >= 0 && text.indexOf("Managers") >= 0); 337 break; 338 } 339 } 340 } 341 } 342 343 344 public void testUpdateUser() throws Exception { 345 login(); 347 348 invoke("/core/user/list.do"); 350 verifyListPage(); 351 352 356 HtmlTable userTable = (HtmlTable) evaluateXPath("//table[@id='userList']", lastResponse); 357 358 List anchors = userTable.getHtmlElementsByTagName("a"); 360 361 String updateUri = "/core/user/callUpdate"; 363 String userNameParam = "name=user"; 364 Iterator anchorsIterator = anchors.iterator(); 365 HtmlAnchor updateAnchor = null; 366 while ( anchorsIterator.hasNext() && updateAnchor == null ) { 367 HtmlAnchor anchor = (HtmlAnchor) anchorsIterator.next(); 368 String href = anchor.getHrefAttribute(); 369 if ( href.indexOf(updateUri) >= 0 ) { 370 if ( href.indexOf(userNameParam) > 0 ) { 371 updateAnchor = anchor; 372 } 373 } 374 } 375 376 assertNotNull("No link could be found to get page with form for updating user 'user'", updateAnchor); 377 378 setLastResponse((HtmlPage) updateAnchor.click()); 380 verifyUpdatePage(); 381 382 String newFirstName = "I'm a Guest"; 383 384 HtmlForm updateForm = getFormByName("userForm"); 385 HtmlTextInput firstNameInput = (HtmlTextInput) getInputByName(updateForm, "firstName", INPUT_TYPE_TEXT); 386 firstNameInput.setValueAttribute(newFirstName); 387 388 clickButtonWithLabel(updateForm, getMessage("core.commons.buttons.update")); 390 391 verifyListPage(); 393 394 userTable = (HtmlTable) evaluateXPath("//table[@id='userList']", lastResponse); 396 Iterator rowsIterator = userTable.getRows().iterator(); 397 while ( rowsIterator.hasNext() ) { 398 HtmlTableRow row = (HtmlTableRow) rowsIterator.next(); 399 if ( row.getCells().size() > 0 ) { 400 HtmlTableCell cell = row.getCell(0); 401 if ( cell.getFirstChild().getNodeValue().equals("user") ) { 402 cell = row.getCell(1); 404 String text = cell.getFirstChild().getNodeValue(); 405 assertTrue("First name of user 'user' must be equal to '" + newFirstName + "'", text.equals(newFirstName)); 406 break; 407 } 408 } 409 } 410 } 411 412 } 413 | Popular Tags |