/* * 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.security.rolesandpermission.struts; import java.util.List; import junit.framework.Assert; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mifos.application.servicefacade.RolesPermissionServiceFacadeWebTier; import org.mifos.application.util.helpers.ActionForwards; import org.mifos.framework.MifosMockStrutsTestCase; import org.mifos.framework.TestUtils; import org.mifos.framework.util.helpers.Constants; import org.mifos.framework.util.helpers.SessionUtils; import org.mifos.security.rolesandpermission.RoleTestUtil; import org.mifos.security.rolesandpermission.business.ActivityEntity; import org.mifos.security.rolesandpermission.business.RoleBO; import org.mifos.security.rolesandpermission.persistence.LegacyRolesPermissionsDao; import org.mifos.security.rolesandpermission.struts.action.RolesPermissionsAction; import org.mifos.security.rolesandpermission.struts.actionforms.RolesPermissionsActionForm; import org.mifos.security.rolesandpermission.util.helpers.RolesAndPermissionConstants; import org.mifos.security.util.ActivityContext; import org.mifos.security.util.UserContext; import org.springframework.beans.factory.annotation.Autowired; public class RolesPermissionsActionStrutsTest extends MifosMockStrutsTestCase { @Autowired private RolesPermissionServiceFacadeWebTier rolesPermissionService; @Autowired private LegacyRolesPermissionsDao legacyRolesPermissionsDao; private UserContext userContext = null; private String flowKey; private RoleBO role = null; @Before public void setUp() throws Exception { userContext = TestUtils.makeUser(); request.getSession().setAttribute(Constants.USERCONTEXT, userContext); addRequestParameter("recordLoanOfficerId", "1"); addRequestParameter("recordOfficeId", "1"); ActivityContext ac = new ActivityContext((short) 0, userContext.getBranchId().shortValue(), userContext.getId() .shortValue()); request.getSession(false).setAttribute("ActivityContext", ac); flowKey = createFlow(request, RolesPermissionsAction.class); } @After public void tearDown() throws Exception { role = null; } @SuppressWarnings("unchecked") @Test public void testViewRoles() throws Exception { setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "viewRoles"); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.viewRoles_success.toString()); List<RoleBO> roles = (List<RoleBO>) SessionUtils.getAttribute(RolesAndPermissionConstants.ROLES, request); Assert.assertEquals(3, roles.size()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } @SuppressWarnings("unchecked") @Test public void testLoad() throws Exception { setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "load"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.load_success.toString()); List<ActivityEntity> activities = (List<ActivityEntity>) SessionUtils.getAttribute(RolesAndPermissionConstants.ACTIVITYLIST, request); Assert.assertNull(SessionUtils.getAttribute(Constants.BUSINESS_KEY, request)); Assert.assertEquals(RoleTestUtil.EXPECTED_ACTIVITY_COUNT, activities.size()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } @Test public void testCreate() throws Exception { setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "load"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.load_success.toString()); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "create"); addRequestParameter("name", "New Role"); addRequestParameter("activity(1)", "checkbox"); addRequestParameter("activity(2)", "3"); addRequestParameter("activity(3)", "4"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.create_success.toString()); role = legacyRolesPermissionsDao.getRole("New Role"); Assert.assertEquals(2, role.getActivities().size()); UserContext userContext = TestUtils.makeUser(role.getId()); ActivityContext activityContext = new ActivityContext((short) 3, (short) 1, (short) 0); Assert.assertTrue(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); activityContext = new ActivityContext((short) 4, (short) 1, (short) 0); Assert.assertTrue(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); activityContext = new ActivityContext((short) 5, (short) 1, (short) 0); Assert.assertFalse(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); } @Test public void testCreateFailureWhenNameIsNull() throws Exception { setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "load"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.load_success.toString()); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "create"); addRequestParameter("activity(1)", "checkbox"); addRequestParameter("activity(2)", "3"); addRequestParameter("activity(3)", "4"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.create_failure.toString()); } @Test public void testCreateFailureWhenNameIsEmpty() throws Exception { setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "load"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.load_success.toString()); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "create"); addRequestParameter("name", ""); addRequestParameter("activity(1)", "checkbox"); addRequestParameter("activity(2)", "3"); addRequestParameter("activity(3)", "4"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.create_failure.toString()); } @Test public void testCreateFailureActivitiesAreNull() throws Exception { setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "load"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.load_success.toString()); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "create"); addRequestParameter("name", "New Role"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.create_failure.toString()); } @Test public void testCreateFailureActivitiesAreEmpty() throws Exception { setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "load"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.load_success.toString()); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "create"); addRequestParameter("name", "New Role"); addRequestParameter("activity(1)", "checkbox"); addRequestParameter("activity(2)", ""); addRequestParameter("activity(3)", ""); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyForward(ActionForwards.create_failure.toString()); } @Test public void testManage() throws Exception { rolesPermissionService.createRole(RolesAndPermissionConstants.ADMIN_ROLE, "New Role", legacyRolesPermissionsDao.getActivitieIds()); role = legacyRolesPermissionsDao.getRole("New Role"); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "manage"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("id", role.getId().toString()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.manage_success.toString()); Assert.assertEquals("New Role", ((RolesPermissionsActionForm) request.getSession().getAttribute( "rolesPermissionsActionForm")).getName()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } @Test public void testUpdateSuccess() throws Exception { rolesPermissionService.createRole(RolesAndPermissionConstants.ADMIN_ROLE, "New Role", legacyRolesPermissionsDao.getActivitieIds()); role = legacyRolesPermissionsDao.getRole("New Role"); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "manage"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("id", role.getId().toString()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.manage_success.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "update"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("name", role.getName()); addRequestParameter("activity(1)", "checkbox"); addRequestParameter("activity(2)", "3"); addRequestParameter("activity(3)", "4"); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.update_success.toString()); Assert.assertNull(request.getAttribute(Constants.CURRENTFLOWKEY)); role = legacyRolesPermissionsDao.getRole(role.getId()); Assert.assertEquals(2, role.getActivities().size()); UserContext userContext = TestUtils.makeUser(role.getId()); ActivityContext activityContext = new ActivityContext((short) 3, (short) 1, (short) 0); Assert.assertTrue(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); activityContext = new ActivityContext((short) 4, (short) 1, (short) 0); Assert.assertTrue(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); activityContext = new ActivityContext((short) 5, (short) 1, (short) 0); Assert.assertFalse(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); } @Test public void testUpdateFailureWhenNameIsNull() throws Exception { rolesPermissionService.createRole(RolesAndPermissionConstants.ADMIN_ROLE, "New Role", legacyRolesPermissionsDao.getActivitieIds()); role = legacyRolesPermissionsDao.getRole("New Role"); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "manage"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("id", role.getId().toString()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.manage_success.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "update"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("activity(1)", "checkbox"); addRequestParameter("activity(2)", "3"); addRequestParameter("activity(3)", "4"); addRequestParameter("name", ""); actionPerform(); verifyActionErrors(new String[] { RolesAndPermissionConstants.KEYROLENAMENOTSPECIFIED }); verifyForward(ActionForwards.update_failure.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } @Test public void testUpdateFailureWhenNameIsEmpty() throws Exception { rolesPermissionService.createRole(RolesAndPermissionConstants.ADMIN_ROLE, "New Role", legacyRolesPermissionsDao.getActivitieIds()); role = legacyRolesPermissionsDao.getRole("New Role"); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "manage"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("id", role.getId().toString()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.manage_success.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "update"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("name", ""); addRequestParameter("activity(1)", "checkbox"); addRequestParameter("activity(2)", "3"); addRequestParameter("activity(3)", "4"); actionPerform(); verifyActionErrors(new String[] { RolesAndPermissionConstants.KEYROLENAMENOTSPECIFIED }); verifyForward(ActionForwards.update_failure.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } @Test public void testUpdateFailureForDuplicateName() throws Exception { rolesPermissionService.createRole(RolesAndPermissionConstants.ADMIN_ROLE, "New Role", legacyRolesPermissionsDao.getActivitieIds()); role = legacyRolesPermissionsDao.getRole("New Role"); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "manage"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("id", role.getId().toString()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.manage_success.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "update"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("name", "Admin"); addRequestParameter("activity(1)", "checkbox"); addRequestParameter("activity(2)", "3"); addRequestParameter("activity(3)", "4"); actionPerform(); verifyActionErrors(new String[] { RolesAndPermissionConstants.KEYROLEALREADYEXIST }); verifyForward(ActionForwards.update_failure.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } @Test public void testUpdateFailureWhenActivitiesAreNull() throws Exception { rolesPermissionService.createRole(RolesAndPermissionConstants.ADMIN_ROLE, "New Role", legacyRolesPermissionsDao.getActivitieIds()); role = legacyRolesPermissionsDao.getRole("New Role"); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "manage"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("id", role.getId().toString()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.manage_success.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "update"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("name", "New Role"); actionPerform(); verifyActionErrors(new String[] { RolesAndPermissionConstants.KEYROLEWITHNOACTIVITIES }); verifyForward(ActionForwards.update_failure.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } @Test public void testUpdateFailureWhenActivitiesAreEmpty() throws Exception { rolesPermissionService.createRole(RolesAndPermissionConstants.ADMIN_ROLE, "New Role", legacyRolesPermissionsDao.getActivitieIds()); role = legacyRolesPermissionsDao.getRole("New Role"); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "manage"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("id", role.getId().toString()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.manage_success.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "update"); addRequestParameter("activity(1)", "checkbox"); addRequestParameter("activity(2)", ""); addRequestParameter("activity(3)", ""); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("name", "New Role"); actionPerform(); verifyActionErrors(new String[] { RolesAndPermissionConstants.KEYROLEWITHNOACTIVITIES }); verifyForward(ActionForwards.update_failure.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } @Test public void testPreview() throws Exception { rolesPermissionService.createRole(RolesAndPermissionConstants.ADMIN_ROLE, "New Role", legacyRolesPermissionsDao.getActivitieIds()); role = legacyRolesPermissionsDao.getRole("New Role"); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "preview"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("id", role.getId().toString()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.preview_success.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } @Test public void testDelete() throws Exception { Short roleId = null; List<ActivityEntity> activityList = legacyRolesPermissionsDao.getActivities(); ActivityEntity activityEntity_0 = activityList.get(0); ActivityEntity activityEntity_1 = activityList.get(1); ActivityEntity activityEntity_2 = activityList.get(2); ActivityEntity activityEntity_3 = activityList.get(3); ActivityEntity activityEntity_4 = activityList.get(4); rolesPermissionService.createRole(RolesAndPermissionConstants.ADMIN_ROLE, "New Role", legacyRolesPermissionsDao.getActivitieIds()); role = legacyRolesPermissionsDao.getRole("New Role"); roleId = role.getId(); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "preview"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("id", role.getId().toString()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.preview_success.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "delete"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.delete_success.toString()); Assert.assertNull(request.getAttribute(Constants.CURRENTFLOWKEY)); role = legacyRolesPermissionsDao.getRole("New Role"); Assert.assertNull(role); UserContext userContext = TestUtils.makeUser(roleId); ActivityContext activityContext = new ActivityContext(activityEntity_0.getId(), (short) 1, (short) 0); Assert.assertFalse(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); activityContext = new ActivityContext(activityEntity_1.getId(), (short) 1, (short) 0); Assert.assertFalse(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); activityContext = new ActivityContext(activityEntity_2.getId(), (short) 1, (short) 0); Assert.assertFalse(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); activityContext = new ActivityContext(activityEntity_3.getId(), (short) 1, (short) 0); Assert.assertFalse(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); activityContext = new ActivityContext(activityEntity_4.getId(), (short) 1, (short) 0); Assert.assertFalse(legacyRolesPermissionsDao.isActivityAllowed(userContext, activityContext)); } @Test public void testDeleteFailure() throws Exception { RoleBO roleBO = legacyRolesPermissionsDao.getRole("Admin"); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "preview"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("id", roleBO.getId().toString()); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.preview_success.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "delete"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyActionErrors(new String[] { RolesAndPermissionConstants.KEYROLEASSIGNEDTOPERSONNEL }); verifyForward(ActionForwards.delete_failure.toString()); Assert.assertNotNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } @Test public void testCancel() { setRequestPathInfo("/rolesPermission.do"); addRequestParameter("method", "cancel"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); actionPerform(); verifyNoActionErrors(); verifyNoActionMessages(); verifyForward(ActionForwards.cancel_success.toString()); Assert.assertNull(request.getAttribute(Constants.CURRENTFLOWKEY)); } }