/* * 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.office.struts.action; import java.util.List; import junit.framework.Assert; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mifos.application.util.helpers.ActionForwards; import org.mifos.application.util.helpers.Methods; import org.mifos.customers.office.business.OfficeBO; import org.mifos.customers.office.struts.actionforms.OffActionForm; import org.mifos.customers.office.util.helpers.OfficeConstants; import org.mifos.dto.domain.OfficeDetailsDto; import org.mifos.dto.domain.OfficeDto; import org.mifos.framework.MifosMockStrutsTestCase; import org.mifos.framework.util.helpers.Constants; import org.mifos.framework.util.helpers.FlowManager; import org.mifos.framework.util.helpers.SessionUtils; import org.mifos.framework.util.helpers.TestObjectFactory; import org.mifos.security.util.UserContext; @SuppressWarnings("unchecked") public class OfficeActionStrutsTest extends MifosMockStrutsTestCase { private UserContext userContext; private String flowKey; @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, OffAction.class); } @After public void tearDown() throws Exception { } @Test public void testGetAllOffices() throws Exception { setRequestPathInfo("/offAction.do"); addRequestParameter("method", "getAllOffices"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.search_success.toString()); Assert.assertEquals(1, ((List) SessionUtils.getAttribute(OfficeConstants.GET_HEADOFFICE, request)).size()); Assert.assertEquals(0, ((List) SessionUtils.getAttribute(OfficeConstants.GET_REGIONALOFFICE, request)).size()); Assert.assertEquals(0, ((List) SessionUtils.getAttribute(OfficeConstants.GET_SUBREGIONALOFFICE, request)).size()); Assert.assertEquals(1, ((List) SessionUtils.getAttribute(OfficeConstants.GET_BRANCHOFFICE, request)).size()); Assert.assertEquals(1, ((List) SessionUtils.getAttribute(OfficeConstants.GET_AREAOFFICE, request)).size()); } @Test public void testLoad() throws Exception { setRequestPathInfo("/offAction.do"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("method", Methods.load.toString()); addRequestParameter("officeLevel", "5"); actionPerform(); verifyForward(ActionForwards.load_success.toString()); List<OfficeDto> parents = (List<OfficeDto>) SessionUtils.getAttribute(OfficeConstants.PARENTS, request); Assert.assertEquals(2, parents.size()); List<OfficeDetailsDto> levels = (List<OfficeDetailsDto>) SessionUtils.getAttribute( OfficeConstants.OFFICELEVELLIST, request); Assert.assertEquals(4, levels.size()); } @Test public void testLoadLevel() throws Exception { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.load.toString()); addRequestParameter("officeLevel", "5"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.load_success.toString()); List<OfficeDetailsDto> parents = (List<OfficeDetailsDto>) SessionUtils.getAttribute(OfficeConstants.PARENTS, request); Assert.assertEquals(2, parents.size()); List<OfficeDetailsDto> levels = (List<OfficeDetailsDto>) SessionUtils.getAttribute( OfficeConstants.OFFICELEVELLIST, request); Assert.assertEquals(4, levels.size()); OffActionForm offActionForm = (OffActionForm) request.getSession().getAttribute("offActionForm"); Assert.assertNotNull(offActionForm); Assert.assertEquals("5", offActionForm.getOfficeLevel()); } @Test public void testLoadParent() throws Exception { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.loadParent.toString()); addRequestParameter("officeLevel", "2"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.load_success.toString()); List<OfficeDetailsDto> parents = (List<OfficeDetailsDto>) SessionUtils.getAttribute(OfficeConstants.PARENTS, request); Assert.assertEquals(1, parents.size()); } @Test public void testPreview() { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.preview.toString()); addRequestParameter("officeName", "abcd"); addRequestParameter("shortName", "abcd"); addRequestParameter("officeLevel", "5"); addRequestParameter("parentOfficeId", "1"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.preview_success.toString()); } @Test public void testPreview_failure() { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.preview.toString()); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); Assert.assertEquals("Office Name", 1, getErrorSize(OfficeConstants.OFFICE_NAME)); Assert.assertEquals("Office Short Name", 1, getErrorSize(OfficeConstants.OFFICESHORTNAME)); Assert.assertEquals("Office level", 1, getErrorSize(OfficeConstants.OFFICETYPE)); Assert.assertEquals("Office parent", 1, getErrorSize(OfficeConstants.PARENTOFFICE)); verifyInputForward(); } @Test public void testPrevious() { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.previous.toString()); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.previous_success.toString()); } @Test public void testCreate() throws Exception { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.create.toString()); addRequestParameter("officeName", "abcd"); addRequestParameter("shortName", "abcd"); addRequestParameter("officeLevel", "5"); addRequestParameter("parentOfficeId", "1"); addRequestParameter("address.line1", "123"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.create_success.toString()); OffActionForm offActionForm = (OffActionForm) request.getSession().getAttribute("offActionForm"); Assert.assertEquals("abcd", offActionForm.getOfficeName()); Assert.assertEquals("abcd", offActionForm.getShortName()); Assert.assertEquals("123", offActionForm.getAddress().getLine1()); } @Test public void testGet() throws Exception { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.get.toString()); addRequestParameter("officeId", "1"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); OfficeDto office = (OfficeDto) SessionUtils.getAttribute("officeDto", request); Assert.assertNotNull(office); Assert.assertEquals(1, office.getId().intValue()); } @Test public void testEditPreview() { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.editpreview.toString()); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyInputForward(); } @Test public void testEditPrevious() { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.editprevious.toString()); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.editprevious_success.toString()); } @Test public void testEditPreviewHO() throws Exception { addActionMethod(Methods.editpreview.toString()); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); OfficeBO headoffice = TestObjectFactory.getOffice(TestObjectFactory.HEAD_OFFICE); addRequestParameter("officeName", "RAJOFFICE"); addRequestParameter("shortName", headoffice.getShortName()); addRequestParameter("officeLevel", headoffice.getOfficeLevel().getValue().toString()); addRequestParameter("parentOfficeId", ""); addRequestParameter("officeStatus", headoffice.getOfficeStatus().getValue().toString()); actionPerform(); verifyNoActionErrors(); verifyForward(ActionForwards.editpreview_success.toString()); } private void addActionMethod(String method) { setRequestPathInfo("/offAction.do"); addRequestParameter("method", method); } public void ignore_testFlowSuccess() throws Exception { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.load.toString()); addRequestParameter("officeLevel", "5"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.load_success.toString()); flowKey = request.getAttribute(Constants.CURRENTFLOWKEY).toString(); FlowManager fm = (FlowManager) SessionUtils.getAttribute(Constants.FLOWMANAGER, request.getSession()); Assert.assertEquals(true, fm.isFlowValid(flowKey)); setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.preview.toString()); addRequestParameter("officeName", "abcd"); addRequestParameter("shortName", "abcd"); addRequestParameter("officeLevel", "5"); addRequestParameter("parentOfficeId", "1"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyInputForward(); fm = (FlowManager) SessionUtils.getAttribute(Constants.FLOWMANAGER, request.getSession()); Assert.assertEquals(true, fm.isFlowValid(flowKey)); setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.create.toString()); addRequestParameter("officeName", "abcd"); addRequestParameter("shortName", "abcd"); addRequestParameter("officeLevel", "5"); addRequestParameter("parentOfficeId", "1"); addRequestParameter("address.line1", "123"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.create_success.toString()); fm = (FlowManager) SessionUtils.getAttribute(Constants.FLOWMANAGER, request.getSession()); Assert.assertEquals(false, fm.isFlowValid(flowKey)); } public void ignore_testFlowFailure() throws Exception { setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.load.toString()); addRequestParameter("officeLevel", "5"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.load_success.toString()); flowKey = request.getAttribute(Constants.CURRENTFLOWKEY).toString(); FlowManager fm = (FlowManager) SessionUtils.getAttribute(Constants.FLOWMANAGER, request.getSession()); Assert.assertEquals(true, fm.isFlowValid(flowKey)); setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.preview.toString()); addRequestParameter("officeName", "abcd"); addRequestParameter("shortName", "abcd"); addRequestParameter("officeLevel", "5"); addRequestParameter("parentOfficeId", "1"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyInputForward(); fm = (FlowManager) SessionUtils.getAttribute(Constants.FLOWMANAGER, request.getSession()); Assert.assertEquals(true, fm.isFlowValid(flowKey)); setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.create.toString()); addRequestParameter("officeName", "abcd"); addRequestParameter("shortName", "abcd"); addRequestParameter("officeLevel", "5"); addRequestParameter("parentOfficeId", "1"); addRequestParameter("address.line1", "123"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.create_success.toString()); fm = (FlowManager) SessionUtils.getAttribute(Constants.FLOWMANAGER, request.getSession()); Assert.assertEquals(false, fm.isFlowValid(flowKey)); setRequestPathInfo("/offAction.do"); addRequestParameter("method", Methods.create.toString()); addRequestParameter("officeName", "abcd"); addRequestParameter("shortName", "abcd"); addRequestParameter("officeLevel", "5"); addRequestParameter("parentOfficeId", "1"); addRequestParameter("address.line1", "123"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyActionErrors(new String[] { "exception.framework.PageExpiredException" }); verifyForwardPath("/pages/framework/jsp/pageexpirederror.jsp"); } }