/*
* 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.module.cab.batch.service;
import java.io.File;
import java.sql.Date;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.kuali.kfs.module.cab.CabConstants;
import org.kuali.kfs.module.cab.batch.ExtractProcessLog;
import org.kuali.kfs.module.cab.batch.ExtractStep;
import org.kuali.kfs.module.cab.businessobject.GeneralLedgerEntry;
import org.kuali.kfs.module.cab.businessobject.PurchasingAccountsPayableDocument;
import org.kuali.kfs.module.cab.businessobject.PurchasingAccountsPayableItemAsset;
import org.kuali.kfs.module.cab.businessobject.PurchasingAccountsPayableLineAssetAccount;
import org.kuali.kfs.sys.ConfigureContext;
import org.kuali.kfs.sys.batch.Step;
import org.kuali.kfs.sys.context.ProxyUtils;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.fixture.UserNameFixture;
import org.kuali.rice.core.api.datetime.DateTimeService;
import org.kuali.rice.krad.service.BusinessObjectService;
/**
* This class tests the extract step involved in CAB Batch job
*/
public class ExtractStepTest extends BatchTestBase {
/**
* This class prevents creating PDF files for every test run. Also it helps in asserting the extract log content
*/
private static class MockBatchExtractReportService implements BatchExtractReportService {
public File generateStatusReportPDF(ExtractProcessLog extractProcessLog) {
assertNotNull(extractProcessLog);
assertTrue(extractProcessLog.isSuccess());
assertEquals(Integer.valueOf(13), extractProcessLog.getTotalGlCount());
assertEquals(Integer.valueOf(2), extractProcessLog.getNonPurApGlCount());
assertEquals(Integer.valueOf(11), extractProcessLog.getPurApGlCount());
assertNotNull(extractProcessLog.getStartTime());
assertNotNull(extractProcessLog.getFinishTime());
assertNotNull(extractProcessLog.getLastExtractTime());
assertTrue(extractProcessLog.getIgnoredGLEntries() == null || extractProcessLog.getIgnoredGLEntries().isEmpty());
assertTrue(extractProcessLog.getMismatchedGLEntries() == null || extractProcessLog.getMismatchedGLEntries().isEmpty());
assertTrue(extractProcessLog.getDuplicateGLEntries() == null || extractProcessLog.getDuplicateGLEntries().isEmpty());
return null;
}
public File generateMismatchReportPDF(ExtractProcessLog extractProcessLog) {
return null;
}
}
private Timestamp beforeRun = null;
private DateTimeService dateTimeService;
private BusinessObjectService boService;
private ExtractStep extractStep;
@ConfigureContext(session = UserNameFixture.khuntley, shouldCommitTransactions = false)
@Override
protected void setUp() throws Exception {
super.setUp();
dateTimeService = SpringContext.getBean(DateTimeService.class);
extractStep = (ExtractStep) ProxyUtils.getTargetIfProxied( SpringContext.getBean(Step.class,"cabExtractStep") );
beforeRun = dateTimeService.getCurrentTimestamp();
extractStep.setBatchExtractReportService(new MockBatchExtractReportService());
boService = SpringContext.getBean(BusinessObjectService.class);
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
extractStep.setBatchExtractReportService(SpringContext.getBean(BatchExtractReportService.class));
}
//NO RUN SETUP
public void testNothing() {
}
public void NORUN_testExecute() throws Exception {
// java.sql.Date currentSqlDate = SpringContext.getBean(DateTimeService.class).getCurrentSqlDate();
Date currentSqlDate = dateTimeService.getCurrentSqlDate();
extractStep.execute("CabBatchExtractJob", dateTimeService.getCurrentDate());
// Count of GL lines
Map<String,Object> m = new HashMap<String,Object>();
m.put("transactionDate", dateTimeService.getCurrentSqlDate());
Collection<GeneralLedgerEntry> gls = boService.findMatching(GeneralLedgerEntry.class,m);
assertEquals(13, gls.size());
// Count of purap docs
Map<String,String> m2 = new HashMap<String,String>();
m2.put("activityStatusCode", CabConstants.ActivityStatusCode.NEW);
Collection<PurchasingAccountsPayableDocument> allCabDocs = boService.findMatching(PurchasingAccountsPayableDocument.class,m2);
assertEquals(7, allCabDocs.size());
// Count of purap items ---- drill through doc header to get itemAssets and test against qty = 1....
//Map<String, Object> keys = new HashMap<String, Object>();
//keys.put(CabPropertyConstants.PurchasingAccountsPayableItemAsset.DOCUMENT_NUMBER, cabPurapDoc.getDocumentNumber());
//keys.put(CabPropertyConstants.PurchasingAccountsPayableItemAsset.ACCOUNTS_PAYABLE_LINE_ITEM_IDENTIFIER, apItem.getItemIdentifier());
//Collection<PurchasingAccountsPayableItemAsset> matchingItems = businessObjectService.findMatching(PurchasingAccountsPayableItemAsset.class, keys);
Map<String,Object> m3 = new HashMap<String,Object>();
m3.put("activityStatusCode", CabConstants.ActivityStatusCode.NEW);
Collection<PurchasingAccountsPayableItemAsset> allCabItems = boService.findMatching(PurchasingAccountsPayableItemAsset.class, m3);
for(PurchasingAccountsPayableItemAsset aci:allCabItems){
System.out.println(aci.isActive()+" - "+aci.getActivityStatusCode());
}
//assertEquals(14, allCabItems.size());
// Count of purap account lines
Collection<PurchasingAccountsPayableLineAssetAccount> allCabAccts = boService.findAll(PurchasingAccountsPayableLineAssetAccount.class);
//for(PurchasingAccountsPayableLineAssetAccount aca:allCabAccts){
// System.out.println(aca.isActive()+" - "+aca.getGeneralLedgerEntry().getTransactionDate());
// }
//assertEquals(17, allCabAccts.size());
// assert the extract date value
SimpleDateFormat fmt = new SimpleDateFormat("MM/dd/yyyy");
assertEquals(fmt.format(currentSqlDate), findCabExtractTimeParam().getValue().substring(0, 10));
}
// END NO RUN SETUP
}