/*
* 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.reports.struts.action;
import java.io.IOException;
import junit.framework.Assert;
import org.junit.Test;
import org.mifos.application.master.business.LookUpEntity;
import org.mifos.application.master.business.LookUpValueEntity;
import org.mifos.application.master.persistence.LegacyMasterDao;
import org.mifos.framework.MifosMockStrutsTestCase;
import org.mifos.framework.exceptions.PersistenceException;
import org.mifos.reports.struts.actionforms.ReportsCategoryActionForm;
import org.mifos.reports.util.helpers.ReportsConstants;
import org.mifos.security.rolesandpermission.business.ActivityEntity;
import org.mifos.security.rolesandpermission.persistence.LegacyRolesPermissionsDao;
import org.springframework.beans.factory.annotation.Autowired;
public class ReportsCategoryActionStrutsTest extends MifosMockStrutsTestCase {
@Autowired
LegacyMasterDao legacyMasterDao;
@Autowired
LegacyRolesPermissionsDao legacyRolesPermissionsDao;
@Override
protected void setStrutsConfig() throws IOException {
super.setStrutsConfig();
setConfigFile("/WEB-INF/struts-config.xml,/WEB-INF/reports-struts-config.xml");
}
@Test
public void testShouldForwardToDefineNewCategoryPage() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "loadDefineNewCategoryPage");
actionPerform();
verifyForward("load_success");
verifyForwardPath("/pages/application/reports/jsp/defineNewReportsCategory.jsp");
verifyNoActionErrors();
}
@Test
public void testShouldPreviewSuccessIfCategoryNameIsNotNull() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "preview");
addRequestParameter("categoryName", "NotNull");
actionPerform();
verifyForward("preview_success");
verifyForwardPath("/pages/application/reports/jsp/defineNewReportsCategoryPreview.jsp");
verifyNoActionErrors();
}
@Test
public void testShouldPreviewFailureIfReportCategoryNameIsNull() {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "preview");
actionPerform();
verifyForwardPath("/reportsCategoryAction.do?method=validate");
String[] errors = { ReportsConstants.ERROR_CATEGORYNAME };
verifyActionErrors(errors);
}
@Test
public void testCategoryNameShouldEqualsToInputValueWhenDoPreivewAction() throws Exception {
String categoryName = "hahaCategoryName";
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "preview");
addRequestParameter("categoryName", categoryName);
actionPerform();
Assert.assertEquals(categoryName, ((ReportsCategoryActionForm) getActionForm()).getCategoryName());
}
@Test
public void testShouldSubmitSuccess() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "addNewCategory");
addRequestParameter("categoryName", "Haha");
actionPerform();
verifyForward("create_success");
verifyForwardPath("/reportsCategoryAction.do?method=viewReportsCategory");
verifyNoActionErrors();
shouldForwardToDefineNewCategoryPageIfCategoryNameExisted();
}
private void shouldForwardToDefineNewCategoryPageIfCategoryNameExisted() {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "preview");
addRequestParameter("categoryName", "Haha");
actionPerform();
addRequestParameter("method", "preview");
addRequestParameter("categoryName", "Haha");
actionPerform();
verifyForwardPath("/pages/application/reports/jsp/defineNewReportsCategory.jsp");
String[] errors = { ReportsConstants.ERROR_CATEGORYNAMEALREADYEXIST };
verifyActionErrors(errors);
}
@Test
public void testCategoryNameShouldBeNullBeforeDefineNewCategory() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
ReportsCategoryActionForm form = new ReportsCategoryActionForm();
String categoryName = "Not Null";
form.setCategoryName(categoryName);
setActionForm(form);
addRequestParameter("method", "loadDefineNewCategoryPage");
actionPerform();
Assert.assertNull(((ReportsCategoryActionForm) getActionForm()).getCategoryName());
}
@Test
public void testShouldForwardToViewReportsCategoryPage() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "viewReportsCategory");
actionPerform();
verifyForwardPath("/pages/application/reports/jsp/viewReportsCategory.jsp");
verifyNoActionErrors();
}
@Test
public void testShouldForwardToEditReportsCategoryPages() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "edit");
addRequestParameter("categoryId", "1");
actionPerform();
verifyNoActionErrors();
verifyForwardPath("/pages/application/reports/jsp/editReportsCategory.jsp");
verifyNoActionErrors();
}
@Test
public void testShouldHaveReportCategoriesBOWhenViewReportsCategoryPage() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "viewReportsCategory");
actionPerform();
Assert.assertNotNull(getSession().getAttribute(ReportsConstants.LISTOFREPORTCATEGORIES));
}
@Test
public void testCategoryNameShouldEqualsToInputValueWhenDoEditPreivewAction() throws Exception {
String categoryName = "hahaCategoryName";
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "editPreview");
addRequestParameter("categoryName", categoryName);
addRequestParameter("categoryId", "1");
actionPerform();
Assert.assertEquals(categoryName, ((ReportsCategoryActionForm) getActionForm()).getCategoryName());
}
@Test
public void testShouldSubmitSuccessAfterEdit() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "editThenSubmit");
ReportsCategoryActionForm form = new ReportsCategoryActionForm();
String categoryName = "neverExist";
form.setCategoryName(categoryName);
form.setCategoryId((short) 1);
setActionForm(form);
actionPerform();
verifyForward("create_success");
verifyForwardPath("/reportsCategoryAction.do?method=viewReportsCategory");
verifyNoActionErrors();
}
@Test
public void testShouldForwardToConfirmDeleteReportsCategoryPage() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "confirmDeleteReportsCategory");
addRequestParameter("categoryId", "1");
actionPerform();
verifyForward("confirm_delete");
verifyForwardPath("/pages/application/reports/jsp/confirmDeleteCategory.jsp");
}
@Test
public void testShouldForwardToConfirmDeleteReportsCategoryPageWhenDeleteReportCategoryHasReports()
throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "deleteReportsCategory");
addRequestParameter("categoryId", "1");
actionPerform();
verifyForward("confirm_delete");
verifyForwardPath("/pages/application/reports/jsp/confirmDeleteCategory.jsp");
}
@Test
public void testShouldEditPreviewSuccessIfCategoryNameIsNotNull() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "editPreview");
addRequestParameter("categoryName", "NotNull");
addRequestParameter("categoryId", "1");
actionPerform();
verifyForward("editpreview_success");
verifyForwardPath("/pages/application/reports/jsp/edit_preview_reports_category.jsp");
verifyNoActionErrors();
}
@Test
public void testShouldEditPreviewFailureIfReportCategoryNameIsNull() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "editPreview");
actionPerform();
verifyForwardPath("/reportsCategoryAction.do?method=validate");
String[] errors = { ReportsConstants.ERROR_CATEGORYNAME };
verifyActionErrors(errors);
}
@Test
public void testShouldEditPreviewFailureIfReportCategoryNotEdit() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
ReportsCategoryActionForm form = new ReportsCategoryActionForm();
String categoryName = "categoryName3";
form.setCategoryName(categoryName);
form.setCategoryId((short) 1);
setActionForm(form);
addRequestParameter("method", "editThenSubmit");
actionPerform();
addRequestParameter("method", "editPreview");
addRequestParameter("categoryName", "categoryName3");
addRequestParameter("categoryId", "1");
actionPerform();
verifyForwardPath("/pages/application/reports/jsp/editReportsCategory.jsp");
String[] errors = { ReportsConstants.ERROR_CATEGORYNAMENOTEDIT };
verifyActionErrors(errors);
}
@Test
public void testShouldEditPreviewFailureIfReportCategoryAlreadyExist() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "addNewCategory");
addRequestParameter("categoryName", "jijiwaiwai");
actionPerform();
addRequestParameter("method", "editPreview");
addRequestParameter("categoryName", "jijiwaiwai");
addRequestParameter("categoryId", "1");
actionPerform();
verifyForwardPath("/pages/application/reports/jsp/editReportsCategory.jsp");
String[] errors = { ReportsConstants.ERROR_CATEGORYNAMEALREADYEXIST };
verifyActionErrors(errors);
}
@Test
public void testShouldPreviewSuccessAfterEdit() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
ReportsCategoryActionForm form = new ReportsCategoryActionForm();
String categoryName = "Not Null";
form.setCategoryName(categoryName);
form.setCategoryId((short) 1);
setActionForm(form);
addRequestParameter("method", "editPreview");
actionPerform();
verifyForwardPath("/pages/application/reports/jsp/edit_preview_reports_category.jsp");
verifyNoActionErrors();
}
@Test
public void testShouldEditFailureIfReportCategoryAlreadyExist() throws Exception {
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "addNewCategory");
addRequestParameter("categoryName", "wuwulala");
actionPerform();
ReportsCategoryActionForm form = new ReportsCategoryActionForm();
String categoryName = "wuwulala";
form.setCategoryName(categoryName);
form.setCategoryId((short) 1);
setActionForm(form);
addRequestParameter("method", "editThenSubmit");
actionPerform();
verifyForwardPath("/pages/application/reports/jsp/editReportsCategory.jsp");
String[] errors = { ReportsConstants.ERROR_CATEGORYNAMEALREADYEXIST };
verifyActionErrors(errors);
}
@Test
public void testShouldCreateFailureWhenActivityIdOutOfRange() throws Exception {
ActivityEntity activity = insertActivityForTest(Short.MIN_VALUE);
setRequestPathInfo("/reportsCategoryAction.do");
addRequestParameter("method", "addNewCategory");
addRequestParameter("categoryName", "willFailureForRangeNewCategory");
actionPerform();
verifyForward("preview_failure");
String[] errors = { ReportsConstants.ERROR_NOMOREDYNAMICACTIVITYID };
verifyActionErrors(errors);
deleteActivityForTest(activity);
}
public ActivityEntity insertActivityForTest(short activityId) throws PersistenceException {
LookUpValueEntity anLookUp = new LookUpValueEntity();
LookUpEntity lookUpEntity = legacyMasterDao.getPersistentObject(LookUpEntity.class, Short
.valueOf((short) LookUpEntity.ACTIVITY));
anLookUp.setLookUpEntity(lookUpEntity);
ActivityEntity parent = legacyMasterDao.getPersistentObject(ActivityEntity.class, (short) 13);
ActivityEntity activityEntity = new ActivityEntity(activityId, parent, anLookUp);
legacyRolesPermissionsDao.createOrUpdate(anLookUp);
legacyRolesPermissionsDao.createOrUpdate(activityEntity);
return activityEntity;
}
private void deleteActivityForTest(ActivityEntity activityEntity) throws PersistenceException {
LookUpValueEntity anLookUp = activityEntity.getActivityNameLookupValues();
legacyRolesPermissionsDao.delete(activityEntity);
legacyRolesPermissionsDao.delete(anLookUp);
}
}