/* * Copyright (c) 2005-2011 Grameen Foundation USA * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * See also http://www.apache.org/licenses/LICENSE-2.0.html for an * explanation of the license and how it is applied. */ package org.mifos.test.acceptance.personnel; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.mifos.test.acceptance.framework.AppLauncher; import org.mifos.test.acceptance.framework.HomePage; import org.mifos.test.acceptance.framework.MifosPage; import org.mifos.test.acceptance.framework.UiTestCaseBase; import org.mifos.test.acceptance.framework.admin.AdminPage; import org.mifos.test.acceptance.framework.admin.ViewSystemUsersPage; import org.mifos.test.acceptance.framework.loan.QuestionResponseParameters; import org.mifos.test.acceptance.framework.login.ChangePasswordPage; import org.mifos.test.acceptance.framework.login.LoginPage; import org.mifos.test.acceptance.framework.office.ChooseOfficePage; import org.mifos.test.acceptance.framework.questionnaire.CreateQuestionGroupParameters; import org.mifos.test.acceptance.framework.questionnaire.CreateQuestionParameters; import org.mifos.test.acceptance.framework.questionnaire.QuestionResponsePage; import org.mifos.test.acceptance.framework.questionnaire.QuestionnairePage; import org.mifos.test.acceptance.framework.testhelpers.NavigationHelper; import org.mifos.test.acceptance.framework.testhelpers.QuestionGroupTestHelper; import org.mifos.test.acceptance.framework.testhelpers.UserHelper; import org.mifos.test.acceptance.framework.user.CreateUserConfirmationPage; import org.mifos.test.acceptance.framework.user.CreateUserEnterDataPage; import org.mifos.test.acceptance.framework.user.CreateUserParameters; import org.mifos.test.acceptance.framework.user.CreateUserPreviewDataPage; import org.mifos.test.acceptance.framework.user.EditUserDataPage; import org.mifos.test.acceptance.framework.user.EditUserPreviewDataPage; import org.mifos.test.acceptance.framework.user.UserViewDetailsPage; import org.mifos.test.acceptance.util.StringUtil; import org.springframework.test.context.ContextConfiguration; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @SuppressWarnings("PMD") @ContextConfiguration(locations = {"classpath:ui-test-context.xml"}) @Test(singleThreaded = true, groups = {"personnel", "acceptance", "ui", "no_db_unit"}) public class PersonnelTest extends UiTestCaseBase { private NavigationHelper navigationHelper; private UserHelper userHelper; private QuestionGroupTestHelper questionGroupTestHelper; @Override @SuppressWarnings("PMD.SignatureDeclareThrowsException") @BeforeMethod(alwaysRun = true) public void setUp() throws Exception { super.setUp(); navigationHelper = new NavigationHelper(selenium); userHelper = new UserHelper(selenium); questionGroupTestHelper = new QuestionGroupTestHelper(selenium); } @AfterMethod public void logOut() { (new MifosPage(selenium)).logout(); } @SuppressWarnings("PMD.SignatureDeclareThrowsException") public void createUserTest() throws Exception { AdminPage adminPage = navigationHelper.navigateToAdminPage(); CreateUserParameters formParameters = adminPage.getAdminUserParameters(); //When userHelper.createUser(formParameters, "MyOfficeDHMFT"); LoginPage loginPage = new AppLauncher(selenium).launchMifos(); loginPage.verifyPage(); //Then HomePage homePage = loginPage.loginSuccessfulAsWithChnagePasw(formParameters.getUserName(), formParameters.getPassword()); homePage.verifyPage(); } @SuppressWarnings("PMD.SignatureDeclareThrowsException") @Test(enabled = true, groups = {"acceptance"}) public void editUserTest() throws Exception { AdminPage adminPage = navigationHelper.navigateToAdminPage(); UserViewDetailsPage userDetailsPage = userHelper.createUser(adminPage.getAdminUserParameters(), "MyOfficeDHMFT"); EditUserDataPage editUserPage = userDetailsPage.navigateToEditUserDataPage(); CreateUserParameters formParameters = new CreateUserParameters(); formParameters.setFirstName("Update"); formParameters.setLastName("User" + StringUtil.getRandomString(8)); formParameters.setEmail("xxx.yyy@xxx.zzz"); EditUserPreviewDataPage editPreviewDataPage = editUserPage.submitAndGotoEditUserPreviewDataPage(formParameters); UserViewDetailsPage userDetailsPage2 = editPreviewDataPage.submit(); userDetailsPage2.verifyModifiedNameAndEmail(formParameters); } @SuppressWarnings("PMD.SignatureDeclareThrowsException") @Test(enabled = true, groups = {"acceptance"}) public void findUserTest() throws Exception { CreateUserParameters formParameters = new CreateUserParameters(); AdminPage adminPage = navigationHelper.navigateToAdminPage(); formParameters = adminPage.getAdminUserParameters(); formParameters.setSecondLastName("SecondLastName" + StringUtil.getRandomString(8)); //When userHelper.createUser(formParameters, "MyOfficeDHMFT"); //Then ViewSystemUsersPage findUserPage = navigationHelper.navigateToFindUserPage(); String secondLastName = formParameters.getSecondLastName(); findUserPage.searchAndNavigateToUserViewDetailsPage(secondLastName); } //http://mifosforge.jira.com/browse/MIFOSTEST-298 @SuppressWarnings("PMD.SignatureDeclareThrowsException") @Test(enabled = true, groups = {"acceptance"}) public void createUserWithNonAdminRoleTest() throws Exception { AdminPage adminPage = navigationHelper.navigateToAdminPage(); CreateUserParameters formParameters = adminPage.getNonAdminUserParameters(); //When userHelper.createUser(formParameters, "MyOfficeDHMFT"); LoginPage loginPage = new AppLauncher(selenium).launchMifos(); loginPage.verifyPage(); //Then HomePage homePage = loginPage.loginSuccessfulAsWithChnagePasw(formParameters.getUserName(), formParameters.getPassword()); homePage.verifyPage(); adminPage = navigationHelper.navigateToAdminPageAsLogedUser(formParameters.getUserName(), "newPasw"); adminPage.navigateToCreateUserPage(); String error = selenium.getText("admin.error.message"); Assert.assertEquals(error.contains("You do not have permissions to perform this activity. Contact your system administrator to grant you the required permissions and try again."), true); } //http://mifosforge.jira.com/browse/MIFOSTEST-670 @SuppressWarnings("PMD.SignatureDeclareThrowsException") public void createUserWithQuestionGroup() throws Exception { //Given createQuestions(); //When Map<String, List<String>> sectionQuestions = new HashMap<String, List<String>>(); List<String> questions = new ArrayList<String>(); questions.add("user question 1"); sectionQuestions.put("Sec 1", questions); questions = new ArrayList<String>(); questions.add("user question 2"); questions.add("user question 3"); sectionQuestions.put("Sec 2", questions); CreateQuestionGroupParameters createQuestionGroupParameters = new CreateQuestionGroupParameters(); createQuestionGroupParameters.setAnswerEditable(true); createQuestionGroupParameters.setAppliesTo("Create Personnel"); createQuestionGroupParameters.setTitle("Create Personnel QG1"); createQuestionGroupParameters.setExistingQuestions(sectionQuestions); questionGroupTestHelper.createQuestionGroup(createQuestionGroupParameters); sectionQuestions = new HashMap<String, List<String>>(); questions = new ArrayList<String>(); questions.add("user question 4"); sectionQuestions.put("Sec 3", questions); createQuestionGroupParameters = new CreateQuestionGroupParameters(); createQuestionGroupParameters.setAnswerEditable(true); createQuestionGroupParameters.setAppliesTo("Create Personnel"); createQuestionGroupParameters.setTitle("Create Personnel QG2"); createQuestionGroupParameters.setExistingQuestions(sectionQuestions); questionGroupTestHelper.createQuestionGroup(createQuestionGroupParameters); AdminPage adminPage = navigationHelper.navigateToAdminPage(); CreateUserParameters userParameters = adminPage.getAdminUserParameters(); ChooseOfficePage createUserPage = adminPage.navigateToCreateUserPage(); createUserPage.verifyPage(); CreateUserEnterDataPage userEnterDataPage = createUserPage.selectOffice("MyOfficeDHMFT"); QuestionResponsePage questionResponsePage = userEnterDataPage.submitAndNavigateToQuestionResponsePage(userParameters); questionResponsePage.verifyPage(); QuestionResponseParameters responseParameters = new QuestionResponseParameters(); responseParameters.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[0].value", "yes"); responseParameters.addTextAnswer("questionGroups[0].sectionDetails[1].questions[1].value", "text1"); questionResponsePage.populateAnswers(responseParameters); CreateUserPreviewDataPage createUserPreviewDataPage = questionResponsePage.continueAndNavigateToCreateUserPreviewPage(); questionResponsePage = createUserPreviewDataPage.navigateToEditAdditionalInformation(); questionResponsePage.populateTextAnswer("questionGroups[0].sectionDetails[1].questions[1].value", "text2"); createUserPreviewDataPage = questionResponsePage.continueAndNavigateToCreateUserPreviewPage(); CreateUserConfirmationPage userConfirmationPage = createUserPreviewDataPage.submit(); QuestionnairePage questionnairePage = userConfirmationPage.navigateToUserViewDetailsPage().navigateToQuestionnairePage(); //Then questionnairePage.verifyRadioGroup("details[0].sectionDetails[0].questions[0].value", "yes", true); questionnairePage.verifyRadioGroup("details[0].sectionDetails[1].questions[0].value", "good", false); questionnairePage.verifyField("details[0].sectionDetails[1].questions[1].value", "text2"); //When questionnairePage.typeText("details[0].sectionDetails[1].questions[1].value", "text3"); questionnairePage.submitAndNavigateToPersonnalDetailsPage(); List<String> questionToAdd= new ArrayList<String>(); questionToAdd.add("user question 5"); questionToAdd.add("user question 6"); List<String> questionToDesactivate = new ArrayList<String>(); questionToDesactivate.add("user question 1"); questionToDesactivate.add("user question 2"); questionToDesactivate.add("user question 3"); createQuestionGroupParameters = new CreateQuestionGroupParameters(); for (String question : questionToAdd) { createQuestionGroupParameters.addExistingQuestion("Sec 1", question); } questionGroupTestHelper.addQuestionsToQuestionGroup("Create Personnel QG1", createQuestionGroupParameters.getExistingQuestions()); for (String question : questionToDesactivate) { questionGroupTestHelper.markQuestionAsInactive(question); } questionGroupTestHelper.markQuestionGroupAsInactive("Create Personnel QG2"); adminPage = navigationHelper.navigateToAdminPage(); userParameters = adminPage.getAdminUserParameters(); createUserPage = adminPage.navigateToCreateUserPage(); createUserPage.verifyPage(); userEnterDataPage = createUserPage.selectOffice("MyOfficeDHMFT"); questionResponsePage = userEnterDataPage.submitAndNavigateToQuestionResponsePage(userParameters); questionResponsePage.verifyPage(); //Then questionResponsePage.verifyQuestionsDoesnotappear(questionToDesactivate.toArray(new String[questionToDesactivate.size()])); questionResponsePage.verifyQuestionsExists(questionToAdd.toArray(new String[questionToAdd.size()])); questionResponsePage.verifySectionDoesnotappear("Sec 2"); questionGroupTestHelper.markQuestionGroupAsInactive("Create Personnel QG1"); } private void createQuestions() { List<CreateQuestionParameters> questions = new ArrayList<CreateQuestionParameters>(); CreateQuestionParameters q1 = new CreateQuestionParameters(); q1.setType(CreateQuestionParameters.TYPE_SINGLE_SELECT); q1.setText("user question 1"); q1.setChoicesFromStrings(Arrays.asList(new String[] { "yes", "no" })); questions.add(q1); CreateQuestionParameters q2 = new CreateQuestionParameters(); q2.setType(CreateQuestionParameters.TYPE_SINGLE_SELECT); q2.setText("user question 2"); q2.setChoicesFromStrings(Arrays.asList(new String[] { "good", "bad", "average" })); questions.add(q2); CreateQuestionParameters q3 = new CreateQuestionParameters(); q3.setType(CreateQuestionParameters.TYPE_FREE_TEXT); q3.setText("user question 3"); questions.add(q3); CreateQuestionParameters q4 = new CreateQuestionParameters(); q4.setType(CreateQuestionParameters.TYPE_DATE); q4.setText("user question 4"); questions.add(q4); CreateQuestionParameters q5 = new CreateQuestionParameters(); q5.setType(CreateQuestionParameters.TYPE_FREE_TEXT); q5.setText("user question 5"); questions.add(q5); CreateQuestionParameters q6 = new CreateQuestionParameters(); q6.setType(CreateQuestionParameters.TYPE_NUMBER); q6.setText("user question 6"); q6.setNumericMax(10); q6.setNumericMin(0); questions.add(q6); questionGroupTestHelper.createQuestions(questions); } //http://mifosforge.jira.com/browse/MIFOSTEST-296 @SuppressWarnings("PMD.SignatureDeclareThrowsException") public void changePasswordTest() throws Exception { HomePage homePage = loginSuccessfully(); AdminPage adminPage = homePage.navigateToAdminPage(); CreateUserParameters userParameters = adminPage.getAdminUserParameters(); ChooseOfficePage createUserPage = adminPage.navigateToCreateUserPage(); createUserPage.verifyPage(); CreateUserEnterDataPage userEnterDataPage = createUserPage.selectOffice("MyOfficeDHMFT"); CreateUserPreviewDataPage userPreviewDataPage = userEnterDataPage.submitAndGotoCreateUserPreviewDataPage(userParameters); CreateUserConfirmationPage userConfirmationPage = userPreviewDataPage.submit(); //Then userConfirmationPage.verifyPage(); UserViewDetailsPage userDetailsPage = userConfirmationPage.navigateToUserViewDetailsPage(); userDetailsPage.verifyPage(); Assert.assertTrue(userDetailsPage.getFullName().contains(userParameters.getFirstName() + " " + userParameters.getLastName())); //When EditUserDataPage editUserPage = userDetailsPage.navigateToEditUserDataPage(); CreateUserParameters passwordParameters = new CreateUserParameters(); passwordParameters.setPassword("tester1"); passwordParameters.setPasswordRepeat("tester"); //Then editUserPage = editUserPage.submitWithInvalidData(passwordParameters); editUserPage.verifyPasswordChangeError(); //When passwordParameters.setPasswordRepeat("tester1"); //Then EditUserPreviewDataPage editPreviewDataPage = editUserPage.submitAndGotoEditUserPreviewDataPage(passwordParameters); UserViewDetailsPage submitUserpage = editPreviewDataPage.submit(); submitUserpage.verifyPage(); //When LoginPage loginPage = (new MifosPage(selenium)).logout(); ChangePasswordPage changePasswordPage = loginPage.loginAndGoToChangePasswordPageAs(userParameters.getUserName(), passwordParameters.getPassword()); // tester1 ChangePasswordPage.SubmitFormParameters changePasswordParameters = new ChangePasswordPage.SubmitFormParameters(); changePasswordParameters.setOldPassword("tester"); // wrong old password changePasswordParameters.setNewPassword(""); // empty new password changePasswordParameters.setConfirmPassword(""); //Then changePasswordPage = changePasswordPage.submitWithInvalidData(changePasswordParameters); //When changePasswordParameters.setNewPassword("tester2"); //wrong old password with good new changePasswordParameters.setConfirmPassword("tester2"); //Then changePasswordPage = changePasswordPage.submitWithInvalidData(changePasswordParameters); //When changePasswordParameters.setOldPassword("tester1"); // good old password and good new changePasswordParameters.setNewPassword("tester2"); changePasswordParameters.setConfirmPassword("tester2"); //Then HomePage homePage2 = changePasswordPage.submitAndGotoHomePage(changePasswordParameters); Assert.assertTrue(homePage2.getWelcome().contains(userParameters.getFirstName())); loginPage = (new MifosPage(selenium)).logout(); homePage = loginPage.loginSuccessfulAs(userParameters.getUserName(), "tester2"); changePasswordPage = homePage.navigateToYourSettingsPage().navigateToChangePasswordPage(); changePasswordPage = changePasswordPage.submitWithInvalidData(changePasswordParameters); //When changePasswordParameters.setNewPassword("tester2"); //wrong old password with good new changePasswordParameters.setConfirmPassword("tester2"); //Then changePasswordPage = changePasswordPage.submitWithInvalidData(changePasswordParameters); //When changePasswordParameters.setOldPassword("tester2"); // good old password and good new changePasswordParameters.setNewPassword("tester3"); changePasswordParameters.setConfirmPassword("tester3"); changePasswordPage.submitAndGotoHomePage(changePasswordParameters); loginPage = (new MifosPage(selenium)).logout(); homePage = loginPage.loginSuccessfulAs(userParameters.getUserName(), changePasswordParameters.getNewPassword()); Assert.assertTrue(homePage.getWelcome().contains(userParameters.getFirstName())); } private HomePage loginSuccessfully() { (new MifosPage(selenium)).logout(); LoginPage loginPage = new AppLauncher(selenium).launchMifos(); loginPage.verifyPage(); HomePage homePage = loginPage.loginSuccessfullyUsingDefaultCredentials(); homePage.verifyPage(); return homePage; } /** * This test checks if user permissions are refreshed properly * * We create new user with Admin role * we log as this user and remove Admin rights * Then we check if we are allowed to define new fees * If error occurs then test passed */ @Test(enabled=true) public void userPermissionRefreshingTest() { //Given //center String officeName = "branch1"; String accessDeniedElement = "admin.error.message"; //new system user with Admin permissions String userName = "jtest1"; String password = "jtest123"; String userFirstName = "John"; String userLastName = "Tester1"; String adminRole = "Admin"; CreateUserParameters userParameters = new CreateUserParameters(); userParameters.setFirstName(userFirstName); userParameters.setLastName(userLastName); userParameters.setUserName(userName); userParameters.setPassword(password); userParameters.setPasswordRepeat(password); userParameters.setUserLevel(CreateUserParameters.NON_LOAN_OFFICER); userParameters.setDateOfBirthDD("10"); userParameters.setDateOfBirthMM("10"); userParameters.setDateOfBirthYYYY("1970"); userParameters.setGender(CreateUserParameters.MALE); userParameters.setRole(adminRole); userHelper.createUser(userParameters, officeName); //When CreateUserParameters userParametersNewRole = new CreateUserParameters(); userParametersNewRole.setRole(""); navigationHelper.navigateToHomePageAsNewUser(userName, password) .navigateToAdminPage() .navigateToViewSystemUsersPage() .searchAndNavigateToUserViewDetailsPage(userLastName) .navigateToEditUserDataPage() .submitAndGotoEditUserPreviewDataPage(userParametersNewRole) .submit() .navigateToAdminPageUsingHeaderTab() .navigateToFeesCreate(); //Then Assert.assertTrue(selenium.isElementPresent(accessDeniedElement)); } }