/* * 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.admin; import static org.hamcrest.CoreMatchers.is; import java.util.List; import java.util.ArrayList; import java.util.Map.Entry; import java.util.TreeMap; import java.util.Arrays; import org.junit.Assert; import org.mifos.test.acceptance.framework.ClientsAndAccountsHomepage; 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.CustomizeTextAddPage; import org.mifos.test.acceptance.framework.admin.CustomizeTextEditPage; import org.mifos.test.acceptance.framework.admin.CustomizeTextViewPage; import org.mifos.test.acceptance.framework.loan.AccountChangeStatusPage; import org.mifos.test.acceptance.framework.loan.LoanAccountPage; import org.mifos.test.acceptance.framework.office.ChooseOfficePage; import org.mifos.test.acceptance.framework.testhelpers.AdminTestHelper; import org.mifos.test.acceptance.framework.testhelpers.NavigationHelper; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @ContextConfiguration(locations = { "classpath:ui-test-context.xml" }) @Test(singleThreaded = true, groups = {"admin","acceptance","ui", "no_db_unit"}) public class CustomizeTextTest extends UiTestCaseBase { private AdminTestHelper adminTestHelper; private NavigationHelper navigationHelper; @SuppressWarnings("PMD.SignatureDeclareThrowsException") @BeforeMethod @Override public void setUp() throws Exception { super.setUp(); adminTestHelper = new AdminTestHelper(selenium); navigationHelper = new NavigationHelper(selenium); } @AfterMethod(alwaysRun = true) public void logOut() { (new MifosPage(selenium)).logout(); } private void verifyClientsAndAccountsTabIsUpdated(String customizedTextForClient, CustomizeTextViewPage customizeTextViewPage) { String text = customizeTextViewPage.getClientsAndAccountsHeaderTabText(); Assert.assertEquals("Clients and accounts header tab should be updated", customizedTextForClient + "s & Accounts", text); } @Test public void addEditRemoveCustomizedText() { String originalText = "Client"; String customText = "Person"; String newCustomText = "有"; // try some Chinese CustomizeTextViewPage customizeTextViewPage = adminTestHelper.addCustomizedText(originalText, customText); // verify that it shows up customizeTextViewPage.verifyCustomTextIsPresent(originalText, customText); verifyClientsAndAccountsTabIsUpdated(customText, customizeTextViewPage); // edit the custom text CustomizeTextEditPage customizeTextEditPage = customizeTextViewPage.navigateToCustomizeTextEditPage(originalText); customizeTextEditPage.setCustomText(newCustomText); customizeTextViewPage = customizeTextEditPage.submit(); // verify that it shows up customizeTextViewPage.verifyCustomTextIsPresent(originalText, newCustomText); verifyClientsAndAccountsTabIsUpdated(newCustomText, customizeTextViewPage); // remove the custom text customizeTextViewPage.removeCustomizedText(originalText); // verify that custom text is gone Assert.assertThat(customizeTextViewPage.getCustomizedTextCount(), is(0)); } /* * http://mifosforge.jira.com/browse/MIFOSTEST-1172 * Verify 'Define customized text' page */ @Test public void verifyDefineCustomizedTextPage() { String originalText = "Client"; String customText = "Person"; verifyErrors(); CustomizeTextViewPage customizeTextViewPage = adminTestHelper.addCustomizedText(originalText, customText); customizeTextViewPage.verifyCustomTextIsPresent(originalText, customText); verifyEditRemove(); customizeTextViewPage = navigationHelper .navigateToAdminPage() .navigateToCustomizeTextViewPage() .navigateToCustomizeTextAddPage() .cancel(); customizeTextViewPage.verifyPage(); CustomizeTextEditPage customizeTextEditPage = customizeTextViewPage.navigateToCustomizeTextEditPage("Client"); customizeTextEditPage.verifyOriginalTextInput(); customizeTextEditPage.setCustomText(""); customizeTextEditPage.trySubmit(); String error = "Please specify Custom Text"; String errorMessage = "No text <"+ error +"> present on the page"; customizeTextEditPage.verifyTextPresent(error, errorMessage); customizeTextViewPage = customizeTextEditPage.cancel(); customizeTextViewPage.verifyPage(); customizeTextViewPage.done().verifyPage(); navigationHelper .navigateToAdminPage() .navigateToCustomizeTextViewPage() .removeCustomizedText(originalText); } /* * http://mifosforge.jira.com/browse/MIFOSTEST-1171 * Verify customized text on various Mifos pages */ @SuppressWarnings("PMD") @Test public void verifyCustomizedTextOnVariousPages() { TreeMap<String, String> originalCustomText = new TreeMap<String, String>(); originalCustomText.put("Complete the fields below.", "Fill necessary"); originalCustomText.put("Click Cancel to return", "Cancel button is to back"); originalCustomText.put("Product category", "搜索工具"); originalCustomText.put("Date", "عر"); originalCustomText.put("fields", "information"); originalCustomText.put("Targeted Deposits and Withdrawal Restrictions", "deposits and withdrawals"); originalCustomText.put("details", "有"); originalCustomText.put("Create new Center", "Define center"); originalCustomText.put("Create multiple Loan Accounts", "下面的搜索工具"); originalCustomText.put("Approve multiple loans", "أبجدية‎"); originalCustomText.put("Client", "Person"); originalCustomText.put("Home", "Main"); originalCustomText.put("Clients & Accounts", "òèßñ 有 عربية"); originalCustomText.put("Then click Preview", "After that click on Preview button"); originalCustomText.put("Fields marked with an asterisk are required.", "Mandatory information are necessary"); originalCustomText.put("Date of Birth", "搜索工具"); originalCustomText.put("Name", "عر"); originalCustomText.put("User", "Mifos"); originalCustomText.put("User Title", "Personnel Role"); originalCustomText.put("Login information", "漢字"); originalCustomText.put("description", "info"); originalCustomText.put("recommended Amount for Deposit", "عبية"); originalCustomText.put("create New group", "Define Group"); originalCustomText.put("create Loan Account", "عربة"); originalCustomText.put("reports", "Summaries"); originalCustomText.put("admin", "عربية"); originalCustomText.put("first", "1th"); originalCustomText.put("postal code", "ية عر"); CustomizeTextViewPage customizeTextViewPage = navigationHelper .navigateToAdminPage() .navigateToCustomizeTextViewPage(); String value; for (String key : originalCustomText.keySet()) { CustomizeTextAddPage customizeTextAddPage = customizeTextViewPage.navigateToCustomizeTextAddPage(); customizeTextAddPage.setOriginalText(key); value=originalCustomText.get(key); customizeTextAddPage.setCustomText(value); customizeTextAddPage.submit(); verifyCustomTextIsAdded(key, value); } ClientsAndAccountsHomepage clientsAndAccountsHomepage = navigationHelper.navigateToClientsAndAccountsPage(); verifyClientsAndAccountsCreateCenterLink(originalCustomText.get("Create new Center"), clientsAndAccountsHomepage); verifyClientsAndAccountsCreateMultipleLoansLink(originalCustomText.get("Create multiple Loan Accounts"), clientsAndAccountsHomepage); verifyClientsAndAccountsApproveMultipleLoansLink(originalCustomText.get("Approve multiple loans"), clientsAndAccountsHomepage); verifyClientsAndAccountsCreateClientLink(originalCustomText.get("Client"), clientsAndAccountsHomepage); verifyClientsAndAccountsCreateNewClientsText(originalCustomText.get("Client")); verifyClientsAndAccountsCreateGroupLink(originalCustomText.get("create New group"), clientsAndAccountsHomepage); verifyClientsAndAccountsCreateLoanAccountLink(originalCustomText.get("create Loan Account"), clientsAndAccountsHomepage); verifyClientsAndAccountsHomeTab(originalCustomText.get("Home"), clientsAndAccountsHomepage); verifyClientsAndAccountsTab(originalCustomText.get("Clients & Accounts"), clientsAndAccountsHomepage); verifyClientsAndAccountsAdminTab(originalCustomText.get("admin"), clientsAndAccountsHomepage); verifyClientsAndAccountsReportsTab(originalCustomText.get("reports"), clientsAndAccountsHomepage); AdminPage adminPage = navigationHelper.navigateToAdminPage(); adminPage.navigateToDefineSavingsProduct(); verifyDefineNewSavingsProductText(originalCustomText.get("Complete the fields below.")); verifyDefineNewSavingsProductText(originalCustomText.get("Click Cancel to return")); verifyDefineNewSavingsProductText(originalCustomText.get("Product category")); verifyDefineNewSavingsProductTextDate(originalCustomText.get("Date")); verifyDefineNewSavingsProductTextFields(originalCustomText.get("fields")); verifyDefineNewSavingsProductText(originalCustomText.get("Targeted Deposits and Withdrawal Restrictions")); verifyDefineNewSavingsProductTextDetails(originalCustomText.get("details")); verifyDefineNewSavingsProductTextDescription(originalCustomText.get("description")); verifyDefineNewSavingsProductTextDeposit(originalCustomText.get("recommended Amount for Deposit")); AdminPage adminPageAgain = navigationHelper.navigateToAdminPage(); ChooseOfficePage chooseOfficePage = adminPageAgain.navigateToCreateUserPage(); chooseOfficePage.selectOffice("branch1"); verifyDefineNewSystemUserText(originalCustomText.get("Then click Preview")); verifyDefineNewSystemUserText(originalCustomText.get("Fields marked with an asterisk are required.")); verifyDefineNewSystemUserText(originalCustomText.get("Date of Birth")); verifyDefineNewSystemUserTextName(originalCustomText.get("Name")); verifyDefineNewSystemUserText(originalCustomText.get("User")); verifyDefineNewSystemUserText(originalCustomText.get("User Title")); verifyDefineNewSystemUserText(originalCustomText.get("Login information")); verifyDefineNewSystemUserTextFirst(originalCustomText.get("first")); verifyDefineNewSystemUserTextPostal(originalCustomText.get("postal code")); AdminPage goToAdminPage = navigationHelper.navigateToAdminPage(); goToAdminPage.navigateToCustomizeTextViewPage(); for (Entry<String, String> entry: originalCustomText.entrySet()) { customizeTextViewPage.removeCustomizedText(entry.getKey()); } Assert.assertThat(customizeTextViewPage.getCustomizedTextCount(), is(0)); ClientsAndAccountsHomepage clientsAndAccountsPage = navigationHelper.navigateToClientsAndAccountsPage(); verifyClientsAndAccountsCreateCenterLink("Create new Center", clientsAndAccountsPage); verifyClientsAndAccountsCreateMultipleLoansLink("Create multiple Loan Accounts", clientsAndAccountsPage); verifyClientsAndAccountsApproveMultipleLoansLink("Approve multiple loans", clientsAndAccountsPage); verifyClientsAndAccountsCreateClientLink("Client", clientsAndAccountsPage); verifyClientsAndAccountsCreateNewClientsText("Client"); verifyClientsAndAccountsCreateGroupLink(originalCustomText.get("create New group"), clientsAndAccountsPage); verifyClientsAndAccountsCreateLoanAccountLink(originalCustomText.get("create Loan Account"), clientsAndAccountsPage); verifyClientsAndAccountsHomeTab("Home", clientsAndAccountsPage); verifyClientsAndAccountsTab("Clients & Accounts", clientsAndAccountsPage); verifyClientsAndAccountsAdminTab(originalCustomText.get("admin"), clientsAndAccountsPage); verifyClientsAndAccountsReportsTab(originalCustomText.get("reports"), clientsAndAccountsPage); AdminPage adminHomePage = navigationHelper.navigateToAdminPage(); adminHomePage.navigateToDefineSavingsProduct(); verifyDefineNewSavingsProductText("Complete the fields below."); verifyDefineNewSavingsProductText("Click Cancel to return"); verifyDefineNewSavingsProductText("Product category"); verifyDefineNewSavingsProductTextDate("Date"); verifyDefineNewSavingsProductTextFieldsRemoved("fields"); verifyDefineNewSavingsProductText("Targeted Deposits and Withdrawal Restrictions"); verifyDefineNewSavingsProductTextDetails("details"); verifyDefineNewSavingsProductTextDescription(originalCustomText.get("description")); verifyDefineNewSavingsProductTextDeposit(originalCustomText.get("recommended Amount for Deposit")); AdminPage adminHomePageAgain = navigationHelper.navigateToAdminPage(); adminHomePageAgain.navigateToCreateUserPage(); chooseOfficePage.selectOffice("branch1"); verifyDefineNewSystemUserText("Then click Preview"); verifyDefineNewSystemUserText("Fields marked with an asterisk are required."); verifyDefineNewSystemUserText("Date of Birth"); verifyDefineNewSystemUserTextNameRemoved("Name"); verifyDefineNewSystemUserText("User"); verifyDefineNewSystemUserText("User Title"); verifyDefineNewSystemUserText("Login information"); verifyDefineNewSystemUserTextFirst(originalCustomText.get("first")); verifyDefineNewSystemUserTextPostal(originalCustomText.get("postal code")); } /* * http://mifosforge.jira.com/browse/MIFOSTEST-1170 * Verify customized text on 'Change Loan status' page */ @Test public void verifyCustomizedTextChangeLoanStatusPage() { String errorMessage; List<String> originalTextVector = new ArrayList<String>(Arrays.asList("Select from the status options below","Then click Continue", "information","Status","Change status","Other","explanation","Cancel","note","current status")); List<String> customTextVector = new ArrayList<String>(Arrays.asList("Choose options","搜索工具","عر","State","Set different state", "Different","answer","Abort","ربية ر","Actual state")); for(int i=0;i<originalTextVector.size();i++) { adminTestHelper.addCustomizedText(originalTextVector.get(i), customTextVector.get(i)); } LoanAccountPage loanAccountPage = navigationHelper.navigateToLoanAccountPage("000100000000050"); AccountChangeStatusPage accountChangeStatusPage = loanAccountPage.navigateToEditAccountStatus(); for(int i=0;i<customTextVector.size()-2;i++) { errorMessage = "No text <"+ customTextVector.get(i) +"> present on the page"; accountChangeStatusPage.verifyTextPresent(customTextVector.get(i), errorMessage); } for(int i=customTextVector.size()-2;i<customTextVector.size();i++) { errorMessage = "The Text <"+ customTextVector.get(i) +"> presents on the page"; accountChangeStatusPage.verifyNotTextPresent(customTextVector.get(i), errorMessage); } for(int i=0;i<3;i++) { adminTestHelper.removeCustomizedText(originalTextVector.get(i)); } loanAccountPage = navigationHelper.navigateToLoanAccountPage("000100000000050"); accountChangeStatusPage = loanAccountPage.navigateToEditAccountStatus(); for(int i=0;i<3;i++) { errorMessage = "No text <"+ originalTextVector.get(i) +"> present on the page"; accountChangeStatusPage.verifyTextPresent(originalTextVector.get(i), errorMessage); } for(int i=3;i<originalTextVector.size();i++) { adminTestHelper.removeCustomizedText(originalTextVector.get(i)); } } private void verifyCustomTextIsAdded(String originalText, String customText) { String customizedTextLabel = originalText + " > " + customText; Assert.assertTrue(selenium.isTextPresent(customizedTextLabel)); } private void verifyClientsAndAccountsCreateCenterLink(String customizedText, ClientsAndAccountsHomepage clientsAndAccountsHomepage) { Assert.assertEquals(customizedText, clientsAndAccountsHomepage.getClientsAndAccountsCreateCenterLink()); } private void verifyClientsAndAccountsCreateMultipleLoansLink(String customizedText, ClientsAndAccountsHomepage clientsAndAccountsHomepage) { Assert.assertEquals(customizedText, clientsAndAccountsHomepage.getClientsAndAccountsCreateMultipleLoansLink()); } private void verifyClientsAndAccountsApproveMultipleLoansLink(String customizedText, ClientsAndAccountsHomepage clientsAndAccountsHomepage) { Assert.assertEquals(customizedText, clientsAndAccountsHomepage.getClientsAndAccountsChangeAccountStatusLink()); } private void verifyClientsAndAccountsCreateClientLink(String customizedText, ClientsAndAccountsHomepage clientsAndAccountsHomepage) { Assert.assertEquals("Create new " + customizedText, clientsAndAccountsHomepage.getClientsAndAccountsCreateClientLink()); } private void verifyClientsAndAccountsCreateNewClientsText(String customizedText) { Assert.assertTrue(selenium.isTextPresent("Create new " + customizedText + "s")); } private void verifyClientsAndAccountsCreateGroupLink(String customizedText, ClientsAndAccountsHomepage clientsAndAccountsHomepage) { Assert.assertFalse(customizedText == clientsAndAccountsHomepage.getClientsAndAccountsCreateGroupLink()); } private void verifyClientsAndAccountsCreateLoanAccountLink(String customizedText, ClientsAndAccountsHomepage clientsAndAccountsHomepage) { Assert.assertFalse(customizedText == clientsAndAccountsHomepage.getClientsAndAccountsCreateLoanAccountLink()); } private void verifyClientsAndAccountsHomeTab(String customizedText, ClientsAndAccountsHomepage clientsAndAccountsHomepage) { Assert.assertEquals(customizedText, clientsAndAccountsHomepage.getClientsAndAccountsHomeHeaderTab()); } private void verifyClientsAndAccountsTab(String customizedText, ClientsAndAccountsHomepage clientsAndAccountsHomepage) { Assert.assertEquals(customizedText, clientsAndAccountsHomepage.getClientsAndAccountsHeaderTab()); } private void verifyClientsAndAccountsAdminTab(String customizedText, ClientsAndAccountsHomepage clientsAndAccountsHomepage) { Assert.assertFalse(customizedText == clientsAndAccountsHomepage.getClientsAndAccountsAdminHeaderTab()); } private void verifyClientsAndAccountsReportsTab(String customizedText, ClientsAndAccountsHomepage clientsAndAccountsHomepage) { Assert.assertFalse(customizedText == clientsAndAccountsHomepage.getClientsAndAccountsReportsHeaderTab()); } private void verifyDefineNewSavingsProductText(String customizedText) { Assert.assertTrue(selenium.isTextPresent(customizedText)); } private void verifyDefineNewSavingsProductTextDate(String customizedText) { Assert.assertTrue(selenium.isTextPresent("From " + customizedText)); Assert.assertTrue(selenium.isTextPresent("End " + customizedText)); } private void verifyDefineNewSavingsProductTextFields(String customizedText) { Assert.assertTrue(selenium.isTextPresent("Mandatory " + customizedText + " are necessary")); } private void verifyDefineNewSavingsProductTextFieldsRemoved(String customizedText) { Assert.assertTrue(selenium.isTextPresent("Complete the " + customizedText + " below")); } private void verifyDefineNewSavingsProductTextDetails(String customizedText) { Assert.assertTrue(selenium.isTextPresent("Savings product " + customizedText)); } private void verifyDefineNewSavingsProductTextDescription(String customizedText) { Assert.assertFalse(selenium.isTextPresent(customizedText + " ")); } private void verifyDefineNewSavingsProductTextDeposit(String customizedText) { Assert.assertFalse(selenium.isTextPresent(customizedText)); } private void verifyDefineNewSystemUserText(String customizedText) { Assert.assertTrue(selenium.isTextPresent(customizedText)); } private void verifyDefineNewSystemUserTextName(String customizedText) { Assert.assertTrue(selenium.isTextPresent("First " + customizedText)); Assert.assertTrue(selenium.isTextPresent("Middle " + customizedText)); Assert.assertTrue(selenium.isTextPresent("Second Last " + customizedText)); Assert.assertTrue(selenium.isTextPresent("Last " + customizedText)); Assert.assertTrue(selenium.isTextPresent("Mifos " + customizedText)); } private void verifyDefineNewSystemUserTextFirst(String customizedText) { Assert.assertFalse(selenium.isTextPresent(customizedText + " Name")); } private void verifyDefineNewSystemUserTextPostal(String customizedText) { Assert.assertFalse(selenium.isTextPresent(customizedText)); } private void verifyDefineNewSystemUserTextNameRemoved(String customizedText) { Assert.assertTrue(selenium.isTextPresent("First " + customizedText)); Assert.assertTrue(selenium.isTextPresent("Middle " + customizedText)); Assert.assertTrue(selenium.isTextPresent("Second Last " + customizedText)); Assert.assertTrue(selenium.isTextPresent("Last " + customizedText)); Assert.assertTrue(selenium.isTextPresent("User " + customizedText)); } private void verifyEditRemove() { CustomizeTextViewPage customizeTextViewPage = navigationHelper .navigateToAdminPage() .navigateToCustomizeTextViewPage() .clickEditButton(); String error = "Please select an item to edit or remove"; String errorMessage = "No text <"+ error +"> present on the page"; customizeTextViewPage.verifyTextPresent(error, errorMessage); customizeTextViewPage = navigationHelper .navigateToAdminPage() .navigateToCustomizeTextViewPage() .clickRemoveButton(); customizeTextViewPage.verifyTextPresent(error, errorMessage); } private void verifyErrors() { verifyEditRemove(); CustomizeTextAddPage customizeTextAddPage = navigationHelper .navigateToAdminPage() .navigateToCustomizeTextViewPage() .navigateToCustomizeTextAddPage(); String text = "qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm"; String error = "The maximum length for Original Text is 50 characters"; String errorMessage = "No text <"+ error +"> present on the page"; customizeTextAddPage.setOriginalText(text); customizeTextAddPage.setCustomText(text); customizeTextAddPage = customizeTextAddPage.trySubmit(); customizeTextAddPage.verifyTextPresent(error, errorMessage); error = "The maximum length for Custom Text is 50 characters"; customizeTextAddPage.verifyTextPresent(error, errorMessage); text = ""; error = "Please specify Custom Text"; customizeTextAddPage.setOriginalText(text); customizeTextAddPage.setCustomText(text); customizeTextAddPage = customizeTextAddPage.trySubmit(); customizeTextAddPage.verifyTextPresent(error, errorMessage); error = "Please specify Original Text"; customizeTextAddPage.verifyTextPresent(error, errorMessage); } }