/* * 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.customers.group.struts.action; import static org.mifos.framework.util.helpers.TestObjectFactory.EVERY_WEEK; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import junit.framework.Assert; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.mifos.accounts.fees.business.AmountFeeBO; import org.mifos.accounts.fees.business.FeeDto; import org.mifos.accounts.fees.util.helpers.FeeCategory; import org.mifos.accounts.loan.business.LoanBO; import org.mifos.accounts.persistence.LegacyAccountDao; import org.mifos.accounts.productdefinition.business.LoanOfferingBO; import org.mifos.accounts.productdefinition.business.SavingsOfferingBO; import org.mifos.accounts.savings.business.SavingsBO; import org.mifos.accounts.savings.util.helpers.SavingsTestHelper; import org.mifos.accounts.util.helpers.AccountState; import org.mifos.accounts.util.helpers.AccountStates; import org.mifos.application.meeting.business.MeetingBO; import org.mifos.application.meeting.util.helpers.MeetingType; import org.mifos.application.meeting.util.helpers.RecurrenceType; import org.mifos.application.meeting.util.helpers.WeekDay; import org.mifos.application.util.helpers.ActionForwards; import org.mifos.application.util.helpers.Methods; import org.mifos.builders.MifosUserBuilder; import org.mifos.config.ClientRules; import org.mifos.customers.business.CustomerPositionEntity; import org.mifos.customers.business.PositionEntity; import org.mifos.customers.center.business.CenterBO; import org.mifos.customers.center.persistence.CenterPersistence; import org.mifos.customers.client.business.ClientBO; import org.mifos.customers.group.business.GroupBO; import org.mifos.customers.group.struts.actionforms.GroupCustActionForm; import org.mifos.customers.group.util.helpers.GroupConstants; import org.mifos.customers.persistence.CustomerPersistence; import org.mifos.customers.util.helpers.CustomerConstants; import org.mifos.customers.util.helpers.CustomerStatus; import org.mifos.dto.domain.ApplicableAccountFeeDto; import org.mifos.dto.domain.CustomFieldDto; import org.mifos.dto.screen.GroupInformationDto; import org.mifos.framework.MifosMockStrutsTestCase; import org.mifos.framework.components.fieldConfiguration.util.helpers.FieldConfig; import org.mifos.framework.exceptions.PageExpiredException; import org.mifos.framework.hibernate.helper.QueryResult; import org.mifos.framework.hibernate.helper.StaticHibernateUtil; import org.mifos.framework.struts.plugin.helper.EntityMasterData; import org.mifos.framework.util.helpers.Constants; import org.mifos.framework.util.helpers.SessionUtils; import org.mifos.framework.util.helpers.TestObjectFactory; import org.mifos.security.MifosUser; import org.mifos.security.util.UserContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.TestingAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextImpl; public class GroupActionStrutsTest extends MifosMockStrutsTestCase { @Autowired private LegacyAccountDao legacyAccountDao; private CenterBO center; private GroupBO group; private ClientBO client; private MeetingBO meeting; private String flowKey; private final SavingsTestHelper helper = new SavingsTestHelper(); private SavingsOfferingBO savingsOffering; private LoanBO loanBO; private SavingsBO savingsBO; private UserContext userContext; private final Short officeId = 3; @Override protected void setStrutsConfig() throws IOException { super.setStrutsConfig(); setConfigFile("/WEB-INF/struts-config.xml,/WEB-INF/customer-struts-config.xml"); } @Before public void setUp() throws Exception { userContext = TestObjectFactory.getContext(); request.getSession().setAttribute(Constants.USERCONTEXT, userContext); addRequestParameter("recordLoanOfficerId", "1"); addRequestParameter("recordOfficeId", "1"); request.getSession(false).setAttribute("ActivityContext", TestObjectFactory.getActivityContext()); flowKey = createFlow(request, GroupCustAction.class); EntityMasterData.getInstance().init(); FieldConfig fieldConfig = FieldConfig.getInstance(); fieldConfig.init(); getActionServlet().getServletContext().setAttribute(Constants.FIELD_CONFIGURATION, fieldConfig.getEntityMandatoryFieldMap()); SecurityContext securityContext = new SecurityContextImpl(); MifosUser principal = new MifosUserBuilder().nonLoanOfficer().withAdminRole().build(); Authentication authentication = new TestingAuthenticationToken(principal, principal); securityContext.setAuthentication(authentication); SecurityContextHolder.setContext(securityContext); } @After public void tearDown() throws Exception { loanBO = null; savingsBO = null; client = null; group = null; center = null; userContext = null; } @Test public void testChooseOffice() throws Exception { setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "chooseOffice"); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.chooseOffice_success.toString()); } @Test public void testHierarchyCheck() throws Exception { setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "hierarchyCheck"); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); boolean isCenterHierarchyExists = ClientRules.getCenterHierarchyExists(); if (isCenterHierarchyExists) { verifyForward(ActionForwards.loadCenterSearch.toString()); } else { verifyForward(ActionForwards.loadCreateGroup.toString()); } } @Test public void testLoad_FeeDifferentFrequecny() throws Exception { createCenterWithoutFee(); List<FeeDto> fees = getFees(RecurrenceType.MONTHLY); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.load_success.toString()); boolean isCenterHierarchyExists = ClientRules.getCenterHierarchyExists(); if (!isCenterHierarchyExists) { Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.LOAN_OFFICER_LIST, request)); } List<ApplicableAccountFeeDto> additionalFees = getFeesFromSession(); Assert.assertNotNull(additionalFees); Assert.assertEquals(0, additionalFees.size()); Assert.assertNotNull(SessionUtils.getAttribute(GroupConstants.CENTER_HIERARCHY_EXIST, request)); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.FORMEDBY_LOAN_OFFICER_LIST, request)); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.CUSTOM_FIELDS_LIST, request)); center = TestObjectFactory.getCenter(center.getCustomerId()); removeFees(fees); } @Test public void testLoad_FeeSameFrequecny() throws Exception { createCenterWithoutFee(); StaticHibernateUtil.flushAndClearSession(); List<FeeDto> fees = getFees(RecurrenceType.WEEKLY); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.load_success.toString()); boolean isCenterHierarchyExists = ClientRules.getCenterHierarchyExists(); if (!isCenterHierarchyExists) { Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.LOAN_OFFICER_LIST, request)); } List<ApplicableAccountFeeDto> additionalFees = getFeesFromSession(); Assert.assertNotNull(additionalFees); Assert.assertEquals(1, additionalFees.size()); Assert.assertNotNull(SessionUtils.getAttribute(GroupConstants.CENTER_HIERARCHY_EXIST, request)); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.FORMEDBY_LOAN_OFFICER_LIST, request)); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.CUSTOM_FIELDS_LIST, request)); center = TestObjectFactory.getCenter(center.getCustomerId()); removeFees(fees); } @Test public void testLoadMeeting() throws Exception { createParentCustomer(); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "loadMeeting"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); getRequest().getSession().setAttribute("security_param", "GroupCreate"); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.loadMeeting_success.toString()); center = TestObjectFactory.getCenter(center.getCustomerId()); } @Test public void testPreviewFailure_With_Name_Null() throws Exception { createParentCustomer(); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "preview"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); Assert.assertEquals("Group Name", 1, getErrorSize(CustomerConstants.NAME)); verifyInputForward(); center = TestObjectFactory.getCenter(center.getCustomerId()); } @Test public void testPreviewFailure_TrainedWithoutTrainedDate() throws Exception { createParentCustomer(); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "preview"); addRequestParameter("displayName", "group"); addRequestParameter("trained", "1"); addRequestParameter("status", CustomerStatus.GROUP_PENDING.getValue().toString()); addRequestParameter("formedByPersonnel", center.getPersonnel().getPersonnelId().toString()); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", "11"); i++; } actionPerform(); Assert.assertEquals("Trained Date", 1, getErrorSize(CustomerConstants.TRAINED_DATE_MANDATORY)); verifyInputForward(); center = TestObjectFactory.getCenter(center.getCustomerId()); } @SuppressWarnings("unchecked") private List<CustomFieldDto> getCustomFieldsFromSession() throws PageExpiredException { return (List<CustomFieldDto>) SessionUtils.getAttribute(CustomerConstants.CUSTOM_FIELDS_LIST, request); } @Test public void testFailurePreview_WithoutMandatoryCustomField_IfAny() throws Exception { createParentCustomer(); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); boolean isCustomFieldMandatory = false; for (CustomFieldDto customFieldDef : customFieldDefs) { if (customFieldDef.isMandatory()) { isCustomFieldMandatory = true; break; } } setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "preview"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); addRequestParameter("displayName", "group"); addRequestParameter("status", CustomerStatus.GROUP_PENDING.getValue().toString()); addRequestParameter("formedByPersonnel", center.getPersonnel().getPersonnelId().toString()); addRequestParameter("loanOfficerId", center.getLoanOfficerId().toString()); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", ""); i++; } actionPerform(); if (isCustomFieldMandatory) { Assert.assertEquals("CustomField", 1, getErrorSize(CustomerConstants.CUSTOM_FIELD)); verifyInputForward(); } else { Assert.assertEquals("CustomField", 0, getErrorSize(CustomerConstants.CUSTOM_FIELD)); verifyForward(ActionForwards.preview_success.toString()); } center = TestObjectFactory.getCenter(center.getCustomerId()); } @Test public void testFailurePreview_WithDuplicateFee() throws Exception { List<FeeDto> feesToRemove = getFees(RecurrenceType.WEEKLY); createParentCustomer(); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); List<ApplicableAccountFeeDto> feeList = getFeesFromSession(); ApplicableAccountFeeDto fee = feeList.get(0); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "preview"); addRequestParameter("selectedFee[0].feeId", fee.getFeeId().toString()); addRequestParameter("selectedFee[0].amount", "100"); addRequestParameter("selectedFee[1].feeId", fee.getFeeId().toString()); addRequestParameter("selectedFee[1].amount", "150"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); Assert.assertEquals("Fee", 1, getErrorSize(CustomerConstants.FEE)); verifyInputForward(); removeFees(feesToRemove); center = TestObjectFactory.getCenter(center.getCustomerId()); } @Test public void testFailurePreview_WithFee_WithoutFeeAmount() throws Exception { List<FeeDto> feesToRemove = getFees(RecurrenceType.WEEKLY); createParentCustomer(); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); List<ApplicableAccountFeeDto> feeList = getFeesFromSession(); ApplicableAccountFeeDto fee = feeList.get(0); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "preview"); addRequestParameter("selectedFee[0].feeId", fee.getFeeId().toString()); addRequestParameter("selectedFee[0].amount", ""); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); Assert.assertEquals("Fee", 1, getErrorSize(CustomerConstants.FEE)); verifyInputForward(); removeFees(feesToRemove); center = TestObjectFactory.getCenter(center.getCustomerId()); } @Test public void testSuccessfulPreview() throws Exception { List<FeeDto> feesToRemove = getFees(RecurrenceType.WEEKLY); createParentCustomer(); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); List<ApplicableAccountFeeDto> feeList = getFeesFromSession(); ApplicableAccountFeeDto fee = feeList.get(0); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "preview"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); addRequestParameter("displayName", "group"); addRequestParameter("status", CustomerStatus.GROUP_PENDING.getValue().toString()); addRequestParameter("formedByPersonnel", center.getPersonnel().getPersonnelId().toString()); addRequestParameter("loanOfficerId", center.getLoanOfficerId().toString()); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", "11"); i++; } addRequestParameter("selectedFee[0].feeId", fee.getFeeId().toString()); addRequestParameter("selectedFee[0].amount", fee.getAmount()); actionPerform(); Assert.assertEquals(0, getErrorSize()); verifyForward(ActionForwards.preview_success.toString()); verifyNoActionErrors(); verifyNoActionMessages(); StaticHibernateUtil.flushAndClearSession(); removeFees(feesToRemove); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.PENDING_APPROVAL_DEFINED, request)); center = TestObjectFactory.getCenter(center.getCustomerId()); } @SuppressWarnings("unchecked") private List<ApplicableAccountFeeDto> getFeesFromSession() throws PageExpiredException { return (List<ApplicableAccountFeeDto>) SessionUtils.getAttribute(CustomerConstants.ADDITIONAL_FEES_LIST, request); } @Test public void testSuccessfulPrevious() throws Exception { setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "previous"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.previous_success.toString()); verifyNoActionErrors(); verifyNoActionMessages(); } @Test public void testSuccessfulCreate_UnderCenter() throws Exception { createParentCustomer(); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "preview"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); addRequestParameter("displayName", "groupUnderCenter"); addRequestParameter("status", CustomerStatus.GROUP_PENDING.getValue().toString()); addRequestParameter("formedByPersonnel", center.getPersonnel().getPersonnelId().toString()); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", "11"); i++; } actionPerform(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "create"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyForward(ActionForwards.create_success.toString()); GroupCustActionForm actionForm = (GroupCustActionForm) request.getSession().getAttribute("groupCustActionForm"); group = TestObjectFactory.getGroup(actionForm.getCustomerIdAsInt()); center = TestObjectFactory.getCenter(center.getCustomerId()); actionForm.setParentCustomer(null); } @Test public void testSuccessfulCreate_UnderBranch() throws Exception { createParentCustomer(); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("branchId", officeId.toString()); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "preview"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); addRequestParameter("displayName", "groupUnderBranch"); addRequestParameter("status", CustomerStatus.GROUP_PENDING.getValue().toString()); addRequestParameter("formedByPersonnel", center.getPersonnel().getPersonnelId().toString()); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", "11"); i++; } actionPerform(); SessionUtils.setAttribute(GroupConstants.CENTER_HIERARCHY_EXIST, Boolean.FALSE, request); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "create"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyForward(ActionForwards.create_success.toString()); GroupCustActionForm actionForm = (GroupCustActionForm) request.getSession().getAttribute("groupCustActionForm"); group = TestObjectFactory.getGroup(actionForm.getCustomerIdAsInt()); center = TestObjectFactory.getCenter(center.getCustomerId()); actionForm.setParentCustomer(null); } @Test public void testFailureCreate_DuplicateName() throws Exception { createGroupWithCenter(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "load"); addRequestParameter("centerSystemId", center.getGlobalCustNum()); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "preview"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); addRequestParameter("displayName", "group"); addRequestParameter("status", CustomerStatus.GROUP_PENDING.getValue().toString()); addRequestParameter("formedByPersonnel", center.getPersonnel().getPersonnelId().toString()); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", "11"); i++; } actionPerform(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "create"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyActionErrors(new String[] { CustomerConstants.ERRORS_DUPLICATE_CUSTOMER }); verifyForward(ActionForwards.create_failure.toString()); group = TestObjectFactory.getGroup(group.getCustomerId()); center = TestObjectFactory.getCenter(center.getCustomerId()); GroupCustActionForm actionForm = (GroupCustActionForm) request.getSession().getAttribute("groupCustActionForm"); actionForm.setParentCustomer(null); } @Ignore @Test public void testGet() throws Exception { createCustomers(); CustomerPositionEntity customerPositionEntity = new CustomerPositionEntity(new PositionEntity((short) 1), client, client.getParentCustomer()); group.addCustomerPosition(customerPositionEntity); savingsBO = getSavingsAccount("fsaf6", "ads6"); loanBO = getLoanAccount(); group.update(); StaticHibernateUtil.flushAndClearSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "get"); addRequestParameter("globalCustNum", group.getGlobalCustNum()); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.get_success.toString()); center = TestObjectFactory.getCenter(center.getCustomerId()); group = TestObjectFactory.getGroup(group.getCustomerId()); client = TestObjectFactory.getClient(client.getCustomerId()); loanBO = (LoanBO) legacyAccountDao.getAccount(loanBO.getAccountId()); savingsBO = (SavingsBO) legacyAccountDao.getAccount(savingsBO.getAccountId()); GroupInformationDto groupInformationDto = (GroupInformationDto) SessionUtils.getAttribute( "groupInformationDto", request); Assert.assertEquals("Size of active loan accounts should be 1", 1, groupInformationDto.getLoanAccountsInUse().size()); Assert.assertEquals("Size of active savings accounts should be 1", 1,groupInformationDto.getSavingsAccountsInUse().size()); Assert.assertEquals("No of active (or on hold) clients should be 1", "1", groupInformationDto.getGroupPerformanceHistory().getActiveClientCount()); Assert.assertEquals("No of clients that are not closed or cancelled should be 1", 1, groupInformationDto .getClientsOtherThanClosedAndCancelled().size()); for (CustomerPositionEntity customerPosition : group.getCustomerPositions()) { Assert.assertEquals("Center Leader", customerPosition.getPosition().getName()); break; } TestObjectFactory.removeCustomerFromPosition(group); StaticHibernateUtil.flushAndClearSession(); center = TestObjectFactory.getCenter(Integer.valueOf(center.getCustomerId()).intValue()); group = TestObjectFactory.getGroup(Integer.valueOf(group.getCustomerId()).intValue()); client = TestObjectFactory.getClient(Integer.valueOf(client.getCustomerId()).intValue()); loanBO = (LoanBO) legacyAccountDao.getAccount(loanBO.getAccountId()); savingsBO = (SavingsBO) legacyAccountDao.getAccount(savingsBO.getAccountId()); } @Test public void testManage() throws Exception { request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); createGroupWithCenterAndSetInSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "manage"); addRequestParameter("officeId", "3"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.manage_success.toString()); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.CUSTOM_FIELDS_LIST, request)); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.CLIENT_LIST, request)); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.POSITIONS, request)); } @Test public void testManageWithoutCenterHierarchy() throws Exception { request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); createGroupWithCenterAndSetInSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "manage"); addRequestParameter("officeId", "3"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.manage_success.toString()); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.CUSTOM_FIELDS_LIST, request)); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.CLIENT_LIST, request)); Assert.assertNotNull(SessionUtils.getAttribute(CustomerConstants.POSITIONS, request)); } @Test public void testPreviewManageFailureForName() throws Exception { request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); createGroupWithCenterAndSetInSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "manage"); addRequestParameter("officeId", "3"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "previewManage"); addRequestParameter("officeId", "3"); addRequestParameter("displayName", ""); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", "Req"); i++; } addRequestParameter("trained", "1"); addRequestParameter("trainedDate", "20/3/2006"); actionPerform(); Assert.assertEquals(1, getErrorSize()); Assert.assertEquals("Group Name not present", 1, getErrorSize(CustomerConstants.NAME)); } @Test public void testPreviewManageFailureForTrainedDate() throws Exception { request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); createGroupWithCenterAndSetInSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "manage"); addRequestParameter("officeId", "3"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "previewManage"); addRequestParameter("officeId", "3"); addRequestParameter("displayName", "group"); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", "Req"); i++; } addRequestParameter("trained", "1"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); Assert.assertEquals(1, getErrorSize()); Assert .assertEquals("Group Trained date not present", 1, getErrorSize(CustomerConstants.TRAINED_DATE_MANDATORY)); } @Test public void testPreviewManageFailureForTrained() throws Exception { request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); createGroupWithCenterAndSetInSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "manage"); addRequestParameter("officeId", "3"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "previewManage"); addRequestParameter("officeId", "3"); addRequestParameter("displayName", "group"); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", "Req"); i++; } addRequestParameter("trainedDate", "20/03/2006"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); Assert.assertEquals(1, getErrorSize()); Assert.assertEquals("Group Trained checkbox not checked ", 1, getErrorSize(CustomerConstants.TRAINED_CHECKED)); } @Test public void testPreviewManageSuccess() throws Exception { request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); createGroupWithCenterAndSetInSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "manage"); addRequestParameter("officeId", "3"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "previewManage"); addRequestParameter("officeId", "3"); addRequestParameter("displayName", "group"); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", "Req"); i++; } addRequestParameter("trained", "1"); addRequestParameter("trainedDate", "20/3/2006"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.previewManage_success.toString()); } /** * This test asserts that when a group name for a trained group is edited, there are no errors and the trained date * is present in the action form. */ @Test public void testPreviewManageSuccessForNameChange_AfterTrainedSet() throws Exception { Calendar cal = new GregorianCalendar(); cal.set(Calendar.DAY_OF_MONTH, 2); cal.set(Calendar.MONTH, 5); cal.set(Calendar.YEAR, 2008); request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); createTrainedGroupAndSetInSession(cal.getTime()); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "manage"); addRequestParameter("officeId", "3"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "previewManage"); addRequestParameter("officeId", "3"); addRequestParameter("displayName", "group123"); // editing group name int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldValue", "Req"); i++; } addRequestParameter("trained", "1"); addRequestParameter("trainedDate", "2/6/2008"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); GroupCustActionForm actionForm = (GroupCustActionForm) getActionForm(); Assert.assertEquals("2/6/2008", actionForm.getTrainedDate()); Assert.assertEquals(0, getErrorSize()); } @Test public void testUpdateSuccess() throws Exception { String newDisplayName = "group_01"; request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); createGroupWithCenterAndSetInSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "manage"); addRequestParameter("officeId", "3"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "previewManage"); addRequestParameter("officeId", "3"); addRequestParameter("displayName", newDisplayName); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldType", customFieldDef.getFieldType().toString()); addRequestParameter("customField[" + i + "].fieldValue", "Req"); i++; } addRequestParameter("trained", "1"); addRequestParameter("trainedDate", "20/03/2006"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.previewManage_success.toString()); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "update"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionMessages(); verifyForward(ActionForwards.update_success.toString()); group = TestObjectFactory.getGroup(Integer.valueOf(group.getCustomerId()).intValue()); Assert.assertTrue(group.isTrained()); Assert.assertEquals(newDisplayName, group.getDisplayName()); } @Test public void testUpdateSuccessForLogging() throws Exception { String newDisplayName = "group_01"; request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); createGroupWithCenterAndSetInSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "manage"); addRequestParameter("officeId", "3"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "previewManage"); addRequestParameter("officeId", "3"); addRequestParameter("displayName", newDisplayName); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldType", customFieldDef.getFieldType().toString()); addRequestParameter("customField[" + i + "].fieldValue", "Req"); i++; } addRequestParameter("trained", "1"); addRequestParameter("trainedDate", "20/03/2006"); addRequestParameter("externalId", "1"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.previewManage_success.toString()); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "update"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.update_success.toString()); group = TestObjectFactory.getGroup(Integer.valueOf(group.getCustomerId()).intValue()); Assert.assertTrue(group.isTrained()); Assert.assertEquals(newDisplayName, group.getDisplayName()); } @Test public void testUpdateSuccessWithoutTrained() throws Exception { String newDisplayName = "group_01"; request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); createGroupWithCenterAndSetInSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "manage"); addRequestParameter("officeId", "3"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); List<CustomFieldDto> customFieldDefs = getCustomFieldsFromSession(); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "previewManage"); addRequestParameter("officeId", "3"); addRequestParameter("displayName", newDisplayName); int i = 0; for (CustomFieldDto customFieldDef : customFieldDefs) { addRequestParameter("customField[" + i + "].fieldId", customFieldDef.getFieldId().toString()); addRequestParameter("customField[" + i + "].fieldType", customFieldDef.getFieldType().toString()); addRequestParameter("customField[" + i + "].fieldValue", "Req"); i++; } addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.previewManage_success.toString()); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "update"); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.update_success.toString()); group = (GroupBO) StaticHibernateUtil.getSessionTL().get(GroupBO.class, group.getCustomerId()); Assert.assertTrue(!group.isTrained()); Assert.assertEquals(newDisplayName, group.getDisplayName()); } @Test public void testCancelSuccess() throws Exception { request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "cancel"); addRequestParameter("input", GroupConstants.PREVIEW_MANAGE_GROUP); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.cancelEdit_success.toString()); } @Test public void testCancelSuccessForCreateGroup() throws Exception { request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", "cancel"); addRequestParameter("input", GroupConstants.CREATE_GROUP); addRequestParameter(Constants.CURRENTFLOWKEY, (String) request.getAttribute(Constants.CURRENTFLOWKEY)); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.cancelCreate_success.toString()); } @Test public void testLoadSearch() throws Exception { addActionAndMethod(Methods.loadSearch.toString()); addCurrentFlowKey(); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.loadSearch_success.toString()); } @Test public void testSearch() throws Exception { createGroupWithCenter(); addRequestParameter("searchString", "gr"); addActionAndMethod(Methods.search.toString()); addCurrentFlowKey(); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.search_success.toString()); QueryResult queryResult = (QueryResult) SessionUtils.getAttribute(Constants.SEARCH_RESULTS, request); Assert.assertNotNull(queryResult); Assert.assertEquals(1, queryResult.getSize()); Assert.assertEquals(1, queryResult.get(0, 10).size()); } private void addActionAndMethod(String method) { setRequestPathInfo("/groupCustAction.do"); addRequestParameter("method", method); } private void addCurrentFlowKey() { request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); } private void createGroupWithCenterAndSetInSession() throws Exception { createGroupWithCenter(); center = TestObjectFactory.getCenter(Integer.valueOf(center.getCustomerId()).intValue()); group = TestObjectFactory.getGroup(Integer.valueOf(group.getCustomerId()).intValue()); SessionUtils.setAttribute(Constants.BUSINESS_KEY, group, request); } private void createTrainedGroupAndSetInSession(Date trainedDate) throws Exception { createGroupWithCenterAndSetInSession(); group.setTrained(true); group.setTrainedDate(trainedDate); } private void createGroupWithCenter() throws Exception { createParentCustomer(); group = TestObjectFactory.createWeeklyFeeGroupUnderCenter("group", CustomerStatus.GROUP_ACTIVE, center); StaticHibernateUtil.flushAndClearSession(); } private void createParentCustomer() { meeting = TestObjectFactory.createMeeting(TestObjectFactory.getTypicalMeeting()); center = TestObjectFactory.createWeeklyFeeCenter("Center", meeting); } private void createCenterWithoutFee() throws Exception { meeting = new MeetingBO(WeekDay.MONDAY, EVERY_WEEK, new Date(), MeetingType.CUSTOMER_MEETING, "Delhi"); center = new CenterBO(userContext, "MyCenter", null, null, null, "1234", null, TestObjectFactory .getBranchOffice(), meeting, TestObjectFactory.getTestUser(), new CustomerPersistence()); new CenterPersistence().saveCenter(center); StaticHibernateUtil.flushAndClearSession(); } private void createCustomers() { createParentCustomer(); group = TestObjectFactory.createWeeklyFeeGroupUnderCenter("group", CustomerStatus.GROUP_ACTIVE, center); client = TestObjectFactory.createClient("Client", CustomerStatus.CLIENT_ACTIVE, group); StaticHibernateUtil.flushAndClearSession(); } private LoanBO getLoanAccount() { Date startDate = new Date(System.currentTimeMillis()); LoanOfferingBO loanOffering = TestObjectFactory.createLoanOffering(startDate, meeting); return TestObjectFactory.createLoanAccount("42423142341", group, AccountState.LOAN_ACTIVE_IN_GOOD_STANDING, startDate, loanOffering); } private SavingsBO getSavingsAccount(String offeringName, String shortName) throws Exception { savingsOffering = helper.createSavingsOffering(offeringName, shortName); return TestObjectFactory.createSavingsAccount("000100000000017", group, AccountStates.SAVINGS_ACC_APPROVED, new Date(System.currentTimeMillis()), savingsOffering); } private List<FeeDto> getFees(RecurrenceType frequency) { List<FeeDto> fees = new ArrayList<FeeDto>(); AmountFeeBO fee1 = (AmountFeeBO) TestObjectFactory.createPeriodicAmountFee("PeriodicAmountFee", FeeCategory.GROUP, "200", frequency, Short.valueOf("2")); fees.add(new FeeDto(TestObjectFactory.getContext(), fee1)); StaticHibernateUtil.flushAndClearSession(); return fees; } private void removeFees(List<FeeDto> feesToRemove) { // for (FeeDto fee : feesToRemove) { // TestObjectFactory.cleanUp(new FeePersistence().getFee(fee.getFeeIdValue())); // } } }