/*
* 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.ld.batch.service;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.kuali.kfs.gl.businessobject.OriginEntryFull;
import org.kuali.kfs.module.ld.LaborConstants;
import org.kuali.kfs.module.ld.batch.LaborScrubberStep;
import org.kuali.kfs.module.ld.businessobject.LaborOriginEntry;
import org.kuali.kfs.sys.ConfigureContext;
import org.kuali.kfs.sys.Message;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.context.TestUtils;
@ConfigureContext
public class LaborScrubberServiceTest extends LaborOriginEntryTestBase {
private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(LaborScrubberServiceTest.class);
private LaborScrubberService laborScrubberService = null;
@Override
protected void setUp() throws Exception {
super.setUp();
laborScrubberService = SpringContext.getBean(LaborScrubberService.class);
laborScrubberService.setDateTimeService(dateTimeService);
dateTimeService.setCurrentDate(new java.util.Date());
}
public void testDemerger() throws Exception {
String[] inputTransactions = {
"2026BA6044900-----2400---ACEX06BT PLM01010207 0000100009529----------KUALI TEST DESCRIPTION +00000000000003493.50D2008-12-22 2008-12-222008-12-31000168.002007060000149952 001REGS12PAE 11 M001010207 IU IUBLA",
"2009BA6044900-----2400---ACEX06BT PLM01010207 0000100009529----------KUALI TEST DESCRIPTION +00000000000003493.50C2008-12-22 2008-12-222008-12-31000168.002007060000149952 001REGS12PAE 11 M001010207 IU IUBLA",
"2026BA6044900-----2400---ACEX06ST PLM01010207 0000100009529----------KUALI TEST DESCRIPTION +00000000000003493.50C2008-12-22 2008-12-222008-12-31000168.002007060000149952 001REGS12PAE 11 M001010207 IU IUBLA",
"2009BA6044900-----2400---ACEX06ST PLM01010207 0000100009529----------KUALI TEST DESCRIPTION +00000000000003493.50C2008-12-22 2008-12-222008-12-31000168.002007060000149952 001REGS12PAE 11 M001010207 IU IUBLA"
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[1]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[2]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[3]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[1]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[2]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[3])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testValidEntries() throws Exception {
String[] inputTransactions = {
"2009BA6044900-----2400---ACEX06BT PLM01010207 0000100009529----------KUALI TEST DESCRIPTION +00000000000003493.50D2008-12-22 2008-12-222008-12-31000168.002009060000149952 001REGS12PAE 11 M001010207 IU IUBLA",
"2009BA6044900-----2400---ACEX06BT PLM01010207 0000200014789----------KUALI TEST DESCRIPTION +00000000000003329.27D2008-12-22 2008-12-222008-12-31000082.322009060000649044 000REGS12PAE 16 M001010207 IU IUBLA",
"2009BA6044900-----2400---ACEX06BT PLM01010207 0000300015213----------KUALI TEST DESCRIPTION +00000000000002716.89D2008-12-22 2008-12-222008-12-31000084.862009060000683206 000REGS12PAE 13 M001010207 IU IUBLA",
"2009BA6044900-----2400---ACEX06BT PLM01010207 0000400017659----------KUALI TEST DESCRIPTION +00000000000001620.08D2008-12-22 2008-12-222008-12-31000041.382009060001316908 000REGS12PAE 13 M001010207 IU IUBLA",
"2009BA6044900-----2400---ACEX06BT PLM01010207 0000500019196----------KUALI TEST DESCRIPTION +00000000000005106.15D2008-12-22 2008-12-222008-12-31000104.932009060001368813 000REGS12PAE 19 M001010207 IU IUBLA",
"2009BA6044900-----2400---ACEX06BT PLM01010207 0000600022120----------KUALI TEST DESCRIPTION +00000000000003071.10D2008-12-22 2008-12-222008-12-31000106.752009060001773996 000REGS12PAE 12 M001010207 IU IUBLA",
"2009BA6044900-----2400---ACEX07BT PLM04013107 0000100009529----------KUALI TEST DESCRIPTION +00000000000003493.50D2009-01-25 2009-01-252009-01-31000184.002009070000149952 001REGS12PAE 11 M004013107 IU IUBLA",
"2009BA6044900-----2400---ACEX07BT PLM04013107 0000200014789----------KUALI TEST DESCRIPTION +00000000000003329.27D2009-01-25 2009-01-252009-01-31000090.162009070000649044 000REGS12PAE 16 M004013107 IU IUBLA",
"2009BA6044900-----2400---ACEX07BT PLM04013107 0000300015213----------KUALI TEST DESCRIPTION +00000000000002716.89D2009-01-25 2009-01-252009-01-31000092.942009070000683206 000REGS12PAE 13 M004013107 IU IUBLA",
"2009BA6044900-----2400---ACEX07BT PLM04013107 0000400017659----------KUALI TEST DESCRIPTION +00000000000001620.08D2009-01-25 2009-01-252009-01-31000045.322009070001316908 000REGS12PAE 13 M004013107 IU IUBLA"
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[1]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[2]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[3]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[4]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[5]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[6]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[7]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[8]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[9]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[1]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[2]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[3]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[4]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[5]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[6]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[7]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[8]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[9])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testBlankFiscalYear() throws Exception {
String[] inputTransactions = {
" BA6044900-----2400---ACEX06BT PLBLANKFISC 0000100009529----------KUALI TEST DESCRIPTION +00000000000003493.50D2008-12-22 2008-12-222008-12-31000168.002009060000149952 001REGS12PAE 11 M001010207 IU IUBLA"
};
String expectedOutput = this.testingYear + StringUtils.substring(inputTransactions[0], 4, 29) + this.testingPeriodCode + StringUtils.substring(inputTransactions[0], 31);
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, expectedOutput)
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testInvalidObjectCode() throws Exception {
String[] inputTransactions = {
"2000BA6044906-----2400---ACEX06BT PLCLOSEFISC 0000300015213----------KUALI TEST DESCRIPTION +00000000000002716.89D2006-12-22 2006-12-222006-12-31000084.862007060000683206 000REGS12PAE 13 M001010207 IU IUBLA",
"2000BA6044906-----2400---ACEX06BT PLCLOSEFISC 0000400017659----------KUALI TEST DESCRIPTION +00000000000001620.08D2006-12-22 2006-12-222006-12-31000041.382007060001316908 000REGS12PAE 13 M001010207 IU IUBLA"
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[1]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[1])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testInvalidFiscalYear() throws Exception {
String[] inputTransactions = {
"2026BA6044913-----2400---ACEX06BT PLINVALFISC 0000500019196----------KUALI TEST DESCRIPTION +00000000000005106.15D2006-12-22 2006-12-222006-12-31000104.932007060001368813 000REGS12PAE 19 M001010207 IU IUBLA",
"2026BA6044913-----2400---ACEX06BT PLINVALFISC 0000600022120----------KUALI TEST DESCRIPTION +00000000000003071.10D2006-12-22 2006-12-222006-12-31000106.752007060001773996 000REGS12PAE 12 M001010207 IU IUBLA"
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[1]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[1])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testInvalid() throws Exception {
String[] inputTransactions = {
"2009 1031400-----2400---ACEX07BT PLBLANKCHAR 0000100009529----------KUALI TEST DESCRIPTION +00000000000003493.50D2009-01-25 2009-01-252009-01-31000184.002009070000149952 001REGS12PAE 11 M004013107 IU IUBLA",
"2009 1031400-----2400---ACEX07BT PLBLANKCHAR 0000200014789----------KUALI TEST DESCRIPTION +00000000000003329.27D2009-01-25 2009-01-252009-01-31000090.162009070000649044 000REGS12PAE 16 M004013107 IU IUBLA"
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[1]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[1])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testInvalidDebitCreditCode() throws Exception {
String[] inputTransactions = {
"2009BA6044900-----2400---ACEX06BT PLM01010207 0000100009529----------KUALI TEST DESCRIPTION +00000000000003493.50X2008-12-22 2008-12-222008-12-31000168.002009060000149952 001REGS12PAE 11 M001010207 IU IUBLA",
"2009BA6044900-----2400---ACEX06BT PLM01010207 0000100009529----------KUALI TEST DESCRIPTION +00000000000003495.50X2008-12-25 2008-12-222008-12-31000168.002009060000149952 001REGS12PAE 11 M001010207 IU IUBLA"
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[1]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[1])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testA2balanceTypeAcceptClosedFiscalPeriod() throws Exception {
String[] inputTransactions = {
"2008BL1031400-----5772---A2EX06ST PLPRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[0])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testValidateAccountWithAllParametersOff() throws Exception {
TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "N");
String[] inputTransactions = {
"2008BL2131401-----5772---ACEX08ST PLPRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_EXPIRED_OUTPUT_FILE, inputTransactions[0])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
// All parameters are off, except a parameter for continuation account.
// Test with closed account and special origination code that has override ability
public void testInvalidateAccountWithOnlyContinuationAccountOn() throws Exception {
TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "N");
String[] inputTransactions = {
"2008BL2131401-----5772---ACEX08ST PLPRENC-07 00002MTFRING ----------AUTO FR BL2631476KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_EXPIRED_OUTPUT_FILE, inputTransactions[0])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
// All parameters are off, except a parameter for continuation account. Test with closed account.
public void testValidateAccountWithOnlyContinuationAccountOn() throws Exception {
TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "N");
// This entry is expired or closed. This entry will be saved in LSCV.
String[] inputTransactions = {
"2008BL2131401-----5772---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
String expectedOutput = "2008BL2331489-----5772---ACEX08ST 99PRENC-07 00002MTFRING ----------AUTO FR BL2131401KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 ";
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, expectedOutput),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_EXPIRED_OUTPUT_FILE, expectedOutput)
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testNotSubfundWageExclusion() throws Exception {
TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "Y");
// This entry is expired or closed, but it won't use alternative continuation account
// because there is no Expiration Date.
// This entry accepts sunfundwage, so will not run subfundWageExclusion logic.
// This entry will not run accountFringeExclusion logic.
// This entry will be saved in LSCX and LSCV.
String[] inputTransactions = {
"2008BL2131401-----5772---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
String expectedOutput = "2008BL2331489-----5772---ACEX08ST 99PRENC-07 00002MTFRING ----------AUTO FR BL2131401KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 ";
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, expectedOutput),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_EXPIRED_OUTPUT_FILE, expectedOutput)
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testSubfundWageExclusion() throws Exception {
TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "Y");
// This entry is expired or closed.
// This entry doensn't accept sunfundwage, so will run subfundWageExclusion logic and use suspense account.
// This entry will be saved in LSCX and LSCV.
String[] inputTransactions = {
"2008EA6867070-----5772---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
String expectedOutput = "2008UA6812756-----5772---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 ";
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, expectedOutput),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_EXPIRED_OUTPUT_FILE, expectedOutput)
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testSubfundWageExclusionWithSubfundParameterOff() throws Exception {
TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "Y");
// This entry is expired or closed.
// This account doesn't have closed indicator, so continuation account logic won't run and it is stored only in LSCV.
// This entry not accept sunfundwage, but the parameter is off, so subfundWageExclusion logic won't run.
String[] inputTransactions = {
"2008UA6812756-----5772---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[0])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
/**
* Test non-fringe, non-alt, non-closed
* @throws Exception
*/
public void testNonFringeNonAltNonClosed() throws Exception {
TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "Y");
// This entry is expired or closed, but, this account doesn't have closed indicator, so it is stored in LSCV.
// This entry accept sunfundwage, and not accept Fringe
// Chart code: BL, Object code: 5760, Fiscal Year: 2008
// It doesn't have alternative fringe account, so it uses suspense account.
// This entry will be changed 2008UA6812756-----5760---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION 28988.60C2008-12-14 2008-12-14 0 200906-----------0 M037113006
// "2008BL2631476-----5760---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +0000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
// Test entries provided by Damon Dorsey on 5/10/11
String[] inputTransactions = {
"2011UA6812757-----2000---ACEX06ST LDNOWAGE1 00000001----------NO WAGE ACCOUNT +00000000000001000.00D2011-09-01 2011-10-232011-08-090000000102011010001537923 01 RGNS12",
"2011UA6812757-----5625---ACEX06ST LDNOWAGE2 00000001----------NO WAGE ACCOUNT +00000000000000125.00D2011-09-01 2011-10-232011-08-090000000102011010001537923 01 RGNS12",
"2011EA0366595-----5625---ACEX06ST LDNOFRINGE2 00000001----------NO FRINGE ACCOUNT +00000000000003500.00D2011-09-01 2011-10-232011-08-090000000102011010001537923 01 RGNS12"
};
String[] expectedOutput = {
"2011UA6812756-----2000---ACEX06ST LDNOWAGE1 0000000000001----------NO WAGE ACCOUNT +00000000000001000.00D2011-09-01 2011-10-232011-08-09 102011010001537923 1RGNS12",
"2011UA6812756-----5625---ACEX06ST LDNOWAGE2 0000000000001----------NO WAGE ACCOUNT +00000000000000125.00D2011-09-01 2011-10-232011-08-09 102011010001537923 1RGNS12",
"2011UA6612160-----5625---ACEX06ST LDNOFRINGE2 0000000000001----------NO FRINGE ACCOUNT +00000000000003500.00D2011-09-01 2011-10-232011-08-09 102011010001537923 1RGNS12"
// "2011UA6812757-----2000---ACEX ST LDNOWAGE1 00000001----------NO WAGE ACCOUNT +00000000000001000.00D2011-09-01 2011-10-232011-08-090000000102011010001537923 01 RGNS12",
// "2011UA6812757-----5625---ACEX ST LDNOWAGE2 00000001----------NO WAGE ACCOUNT +00000000000000125.00D2011-09-01 2011-10-232011-08-090000000102011010001537923 01 RGNS12",
// "2011UA6612160-----5625---ACEX11ST LDNOFRINGE2 0000000000001----------NO FRINGE ACCOUNT +00000000000003500.00D2011-09-01 2011-10-232011-08-09 102011010001537923 1RGNS12"
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[1]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[2]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, expectedOutput[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, expectedOutput[1]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, expectedOutput[2])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
// TODO: the tested account has an continuation account, so the suspense account logic cannot be reached
public void testNonFringeNonAltNonClosedIndicatorWithSuspenseParameterOff() throws Exception {
/*TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "N");
// This entry is expired or closed, but, this account doesn't have closed indicator, so it is stored in LSCV.
// This entry accept sunfundwage, and not accept Fringe Chart code: BL, Object code: 5760, Fiscal Year: 2008
// It doesn't have alternative fringe account, so it uses suspense account.
// But, since the parameter for suspense account indicator is off, this entry will be saved in LSCE.
String[] inputTransactions = {
"2008BL2631476-----5760---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +0000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_ERROR_OUTPUT_FILE, inputTransactions[0])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions); */
}
public void testNonFringeNonAltNonClosedIndicatorWithFringeParameterOff() throws Exception {
TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "Y");
String[] inputTransactions = {
"2008BL2631476-----5760---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
String expectedOutput = "2008BL2331489-----5760---ACEX08ST 99PRENC-07 00002MTFRING ----------AUTO FR BL2631476KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 ";
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_EXPIRED_OUTPUT_FILE, expectedOutput),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, expectedOutput)
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testClosedAccountWithAllParemetersOff() throws Exception {
TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "N");
String[] inputTransactions = {
"2008EA6867070-----5760---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_EXPIRED_OUTPUT_FILE, inputTransactions[0])
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
public void testClosedAccountWithAllParemetersOffOnlyContinuationOn() throws Exception {
TestUtils tu = new TestUtils();
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUBFUND_WAGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.ACCOUNT_FRINGE_EXCLUSION_PARAMETER, "N");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.CONTINUATION_ACCOUNT_LOGIC_PARAMETER, "Y");
TestUtils.setSystemParameter(LaborScrubberStep.class, LaborConstants.Scrubber.SUSPENSE_ACCOUNT_LOGIC_PARAMETER, "N");
String[] inputTransactions = {
"2008EA6867070-----5760---ACEX08ST 99PRENC-07 00002MTFRING ----------KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 "
};
String expectedOutput = "2008EA9567000-----5760---ACEX08ST 99PRENC-07 00002MTFRING ----------AUTO FR EA6867070KUALI TEST DESCRIPTION +00000000000028988.60C2008-12-14 D2008-12-14 000000.00200906-----------000 M037113006 ";
EntryHolder[] outputTransactions = {
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions[0]),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_VALID_OUTPUT_FILE, expectedOutput),
new EntryHolder(LaborConstants.BatchFileSystem.SCRUBBER_EXPIRED_OUTPUT_FILE, expectedOutput)
};
scrub(inputTransactions);
assertOriginEntries(4, outputTransactions);
}
/**
* Loads an array of String-formatted entries into the database, and then runs the scrubber on those entries
*
* @param inputTransactions an array of String-formatted entries to scrub
*/
private void scrub(String[] inputTransactions) {
clearBatchFiles();
int count = 1;
for (String transaction: inputTransactions) {
OriginEntryFull entry = new LaborOriginEntry();
List<Message> messages = entry.setFromTextFileForBatch(transaction, count);
if (messages.size() > 0) {
LOG.warn("Transaction "+transaction+"could not be parsed correctly");
for (Message message : messages) {
LOG.warn(message.getMessage());
}
}
count += 1;
}
loadInputTransactions(LaborConstants.BatchFileSystem.SCRUBBER_INPUT_FILE, inputTransactions);
laborScrubberService.scrubEntries();
}
}