/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.sys.batch.service.impl;
import static org.kuali.kfs.sys.fixture.UserNameFixture.kfs;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import org.kuali.kfs.sys.ConfigureContext;
import org.kuali.kfs.sys.KFSParameterKeyConstants;
import org.kuali.kfs.sys.batch.AutoDisapproveDocumentsStep;
import org.kuali.kfs.sys.batch.BatchSpringContext;
import org.kuali.kfs.sys.batch.Step;
import org.kuali.kfs.sys.context.KualiTestBase;
import org.kuali.kfs.sys.context.ProxyUtils;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.context.TestUtils;
import org.kuali.kfs.sys.dataaccess.UnitTestSqlDao;
import org.kuali.rice.core.api.config.property.ConfigurationService;
import org.kuali.rice.core.api.datetime.DateTimeService;
import org.kuali.rice.krad.service.DocumentService;
import org.springframework.aop.support.AopUtils;
@ConfigureContext(session = kfs)
public class AutoDisapproveDocumentsServiceImplTest extends KualiTestBase {
private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(AutoDisapproveDocumentsServiceImplTest.class);
private AutoDisapproveDocumentsServiceImpl autoDisapproveDocumentsService;
private DateTimeService dateTimeService;
private UnitTestSqlDao unitTestSqlDao;
private DocumentService documentService;
/**
* @see junit.framework.TestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
super.setUp();
unitTestSqlDao = SpringContext.getBean(UnitTestSqlDao.class);
autoDisapproveDocumentsService = (AutoDisapproveDocumentsServiceImpl) TestUtils.getUnproxiedService("sysMockAutoDisapproveDocumentsService");
dateTimeService = SpringContext.getBean(DateTimeService.class);
ConfigurationService kualiConfigurationService = SpringContext.getBean(ConfigurationService.class);
}
/**
* This method tests if the YEAR_END_AUTO_DISAPPROVE_DOCUMENTS_RUN_DATE parameter is setup. If not, accessing it will cause a NPE
*/
public final void testCheckIfRunDateParameterExists() {
boolean parameterExists = autoDisapproveDocumentsService.checkIfRunDateParameterExists();
assertTrue("YEAR_END_AUTO_DISAPPROVE_DOCUMENTS_RUN_DATE System parameter does not exist.", parameterExists);
}
/**
* This method tests if the YEAR_END_AUTO_DISAPPROVE_PARENT_DOCUMENT_TYPE parameter is setup. If not, accessing it will cause a NPE
*/
public final void testCheckIfParentDocumentTypeParameterExists() {
boolean parameterExists = autoDisapproveDocumentsService.checkIfParentDocumentTypeParameterExists();
assertTrue("YEAR_END_AUTO_DISAPPROVE_PARENT_DOCUMENT_TYPE System parameter does not exist.", parameterExists);
}
/**
* This method tests if the YEAR_END_AUTO_DISAPPROVE_PARENT_DOCUMENT_TYPE parameter is setup. If not, accessing it will cause a NPE
*/
public final void testCheckIfDocumentCompareCreateDateParameterExists() {
boolean parameterExists = autoDisapproveDocumentsService.checkIfDocumentCompareCreateDateParameterExists();
assertTrue("YEAR_END_AUTO_DISAPPROVE_DOCUMENT_CREATE_DATE System parameter does not exist.", parameterExists);
}
/**
* This method tests if the YEAR_END_AUTO_DISAPPROVE_DOCUMENT_TYPES parameter is setup. If not, accessing it will cause a NPE
*/
public final void testCheckIfDocumentTypesExceptionParameterExists() {
boolean parameterExists = autoDisapproveDocumentsService.checkIfParentDocumentTypeParameterExists();
assertTrue("YEAR_END_AUTO_DISAPPROVE_DOCUMENT_TYPES System parameter does not exist.", parameterExists);
}
/**
* This method tests if the YEAR_END_AUTO_DISAPPROVE_ANNOTATION parameter is setup. If not, accessing it will cause a NPE
*/
public final void testCheckIfAnnotationForDisapprovalParameterExists() {
boolean parameterExists = autoDisapproveDocumentsService.checkIfAnnotationForDisapprovalParameterExists();
assertTrue("YEAR_END_AUTO_DISAPPROVE_ANNOTATION System parameter does not exist.", parameterExists);
}
/**
* This method prepares today's date and returns the today's date
*/
protected Date getToday() {
Date compareDate = null;
String today = dateTimeService.toDateString(dateTimeService.getCurrentDate());
try {
Date tmpcompareDate = dateTimeService.convertToDate(today);
Calendar calendar = Calendar.getInstance();
calendar.setTime(tmpcompareDate);
calendar.set(Calendar.HOUR, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
compareDate = calendar.getTime();
}
catch (ParseException pe) {
}
return compareDate;
}
/**
* This method will test today's date and compare to that the system parameter date
* Today's date will be extended by adding 1 second less than 24 and this will be compared to the returned value
* from getDocumentCompareDateParameter() method.
*/
public final void testGetDocumentCompareDateParameter() {
boolean datesEqual = true;
Date compareDate = getToday();
Step step = BatchSpringContext.getStep("autoDisapproveDocumentsStep");
AutoDisapproveDocumentsStep autoDisapproveDocumentsStep = (AutoDisapproveDocumentsStep) ProxyUtils.getTargetIfProxied(step);
if (autoDisapproveDocumentsService.systemParametersForAutoDisapproveDocumentsJobExist()) {
// set the parameter to today and then compare to the date retrieved from the method getDocumentCompareDateParameter..
String today = dateTimeService.toDateString(dateTimeService.getCurrentDate());
TestUtils.setSystemParameter(AopUtils.getTargetClass(autoDisapproveDocumentsStep), KFSParameterKeyConstants.YearEndAutoDisapprovalConstants.YEAR_END_AUTO_DISAPPROVE_DOCUMENT_CREATE_DATE, today);
Date documentCompareDate = autoDisapproveDocumentsService.getDocumentCompareDateParameter();
datesEqual = (compareDate.equals(documentCompareDate));
assertTrue("The two Dates are not equal. The getDocumentCompareDateParameter() method did not extend the date by 23 hours, 59 mins and 59 seconds", datesEqual);
}
}
/**
* This test method will test if the auto disapproval job can be run by comparing today's date to
* the system parameter YEAR_END_AUTO_DISAPPROVE_DOCUMENTS_STEP_RUN_DATE value
*/
public final void testCanAutoDisapproveJobRun() {
Step step = BatchSpringContext.getStep("autoDisapproveDocumentsStep");
AutoDisapproveDocumentsStep autoDisapproveDocumentsStep = (AutoDisapproveDocumentsStep) ProxyUtils.getTargetIfProxied(step);
if (autoDisapproveDocumentsService.systemParametersForAutoDisapproveDocumentsJobExist()) {
// intentionally set the run date to 00/00/00 so the test fails...
TestUtils.setSystemParameter(AopUtils.getTargetClass(autoDisapproveDocumentsStep), KFSParameterKeyConstants.YearEndAutoDisapprovalConstants.YEAR_END_AUTO_DISAPPROVE_DOCUMENT_STEP_RUN_DATE, "00/00/00");
boolean canJobRun = autoDisapproveDocumentsService.canAutoDisapproveJobRun();
assertFalse("The canAutoDisapproveJobRun() method did not fail..", canJobRun);
//set the system parameter to today's date. The test should pass...
String today = dateTimeService.toDateString(dateTimeService.getCurrentDate());
TestUtils.setSystemParameter(AopUtils.getTargetClass(autoDisapproveDocumentsStep), KFSParameterKeyConstants.YearEndAutoDisapprovalConstants.YEAR_END_AUTO_DISAPPROVE_DOCUMENT_STEP_RUN_DATE, today);
canJobRun = autoDisapproveDocumentsService.canAutoDisapproveJobRun();
assertTrue("The canAutoDisapproveJobRun() method failed because system parameter date does not equal to today's date.", canJobRun);
}
}
/**
* This test method will add a document to the table and call the method in impl class
* to see if the document can be retrieve properly.
*/
public final void testAutoDisapproveDocumentsInEnrouteStatus() {
Step step = BatchSpringContext.getStep("autoDisapproveDocumentsStep");
AutoDisapproveDocumentsStep autoDisapproveDocumentsStep = (AutoDisapproveDocumentsStep) ProxyUtils.getTargetIfProxied(step);
if (autoDisapproveDocumentsService.systemParametersForAutoDisapproveDocumentsJobExist()) {
//set the system parameter to today's date. The test should pass...
String today = dateTimeService.toDateString(dateTimeService.getCurrentDate());
TestUtils.setSystemParameter(AopUtils.getTargetClass(autoDisapproveDocumentsStep), KFSParameterKeyConstants.YearEndAutoDisapprovalConstants.YEAR_END_AUTO_DISAPPROVE_DOCUMENT_STEP_RUN_DATE, today);
boolean success = autoDisapproveDocumentsService.autoDisapproveDocumentsInEnrouteStatus();
assertTrue("The auto disproval job did not succeed.", success);
}
}
}