/* * 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.ec.document.validation.impl; import static org.kuali.kfs.sys.businessobject.AccountingLineOverride.CODE.EXPIRED_ACCOUNT; import static org.kuali.kfs.sys.businessobject.AccountingLineOverride.CODE.EXPIRED_ACCOUNT_AND_NON_FRINGE_ACCOUNT_USED; import static org.kuali.kfs.sys.businessobject.AccountingLineOverride.CODE.NONE; import java.util.Arrays; import java.util.List; import java.util.Properties; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.module.ec.businessobject.EffortCertificationDetail; import org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition; import org.kuali.kfs.module.ec.document.EffortCertificationDocument; import org.kuali.kfs.module.ec.testdata.EffortTestDataPropertyConstants; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.ObjectUtil; import org.kuali.kfs.sys.TestDataPreparator; import org.kuali.kfs.sys.businessobject.FinancialSystemDocumentHeader; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.rice.core.api.util.type.KualiDecimal; /** * unit tests for the methods in EffortCertificationDocumentRuleUtil * * @see org.kuali.kfs.module.ec.document.validation.impl.EffortCertificationDocumentRuleUtil */ @ConfigureContext public class EffortCertificationDocumentRuleUtilTest extends KualiTestBase { private final Properties properties, message; private final String detailFieldNames, documentFieldNames, documentHeaderFieldNames, reportDefinitionFieldNames; private final String deliminator; /** * Constructs a EffortCertificationDocumentRuleUtilTest.java. */ public EffortCertificationDocumentRuleUtilTest() { super(); String messageFileName = EffortTestDataPropertyConstants.TEST_DATA_PACKAGE_NAME + "/message.properties"; String propertiesFileName = EffortTestDataPropertyConstants.TEST_DATA_PACKAGE_NAME + "/effortCertificationDocumentRuleUtil.properties"; properties = TestDataPreparator.loadPropertiesFromClassPath(propertiesFileName); message = TestDataPreparator.loadPropertiesFromClassPath(messageFileName); deliminator = properties.getProperty(EffortTestDataPropertyConstants.DELIMINATOR); detailFieldNames = properties.getProperty(EffortTestDataPropertyConstants.DETAIL_FIELD_NAMES); documentFieldNames = properties.getProperty(EffortTestDataPropertyConstants.DOCUMENT_FIELD_NAMES); reportDefinitionFieldNames = properties.getProperty(EffortTestDataPropertyConstants.REPORT_DEFINITION_FIELD_NAMES); documentHeaderFieldNames = properties.getProperty(EffortTestDataPropertyConstants.DOCUMENT_HEADER_FIELD_NAMES); } /** * the default values will be applied into the specific fields when they are blank */ public void testApplyDefaultvalues() throws Exception { String testTarget = "applyDefaultValues."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { EffortCertificationDocumentRuleUtil.applyDefaultValues(detailLine); } int numberOfExpectedDetails = Integer.valueOf(StringUtils.trim(properties.getProperty(testTarget + EffortTestDataPropertyConstants.NUM_OF_EXPECTED_DETAILS))); List<EffortCertificationDetail> expectedDetails = TestDataPreparator.buildTestDataList(EffortCertificationDetail.class, properties, testTarget + EffortTestDataPropertyConstants.EXPECTED_DETAIL, detailFieldNames, deliminator, numberOfExpectedDetails); assertEquals(numberOfExpectedDetails, details.size()); List<String> detailKeyFields = ObjectUtil.split(detailFieldNames, deliminator); detailKeyFields.remove(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); assertTrue(TestDataPreparator.hasSameElements(expectedDetails, details, detailKeyFields)); } /** * test if an expired account can be used through surveying the override code on the detail line */ public void testCanExpiredAccountBeUsed() throws Exception { String testTarget = "canExpiredAccountBeUsed."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.ACCOUNT); detailLine.setOverrideCode(EXPIRED_ACCOUNT); assertTrue(EffortCertificationDocumentRuleUtil.canExpiredAccountBeUsed(detailLine)); } for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.ACCOUNT); detailLine.setOverrideCode(EXPIRED_ACCOUNT_AND_NON_FRINGE_ACCOUNT_USED); assertTrue(EffortCertificationDocumentRuleUtil.canExpiredAccountBeUsed(detailLine)); } for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.ACCOUNT); detailLine.setOverrideCode(NONE); assertFalse(EffortCertificationDocumentRuleUtil.canExpiredAccountBeUsed(detailLine)); } } /** * an A21 sub account is associated with the detail line */ public void testHasA21SubAccount_Yes() throws Exception { String testTarget = "hasA21SubAccount.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.SUB_ACCOUNT); assertTrue(EffortCertificationDocumentRuleUtil.hasA21SubAccount(detailLine)); } } /** * no A21 sub account is associated with the detail line */ public void testHasA21SubAccount_No() throws Exception { String testTarget = "hasA21SubAccount.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.SUB_ACCOUNT); assertFalse(EffortCertificationDocumentRuleUtil.hasA21SubAccount(detailLine)); } } /** * the account associated with the detail line is closed */ public void testHasClosedAccount_Yes() throws Exception { String testTarget = "hasClosedAccount.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.ACCOUNT); assertTrue(EffortCertificationDocumentRuleUtil.hasClosedAccount(detailLine)); } } /** * the account associated with the detail line is not closed (Still active) */ public void testHasClosedAccount_No() throws Exception { String testTarget = "hasClosedAccount.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.ACCOUNT); assertFalse(EffortCertificationDocumentRuleUtil.hasClosedAccount(detailLine)); } } /** * the account associated with the detail line is a contract & grant account */ public void testHasContractGrantAccount_Yes() throws Exception { String testTarget = "hasContractGrantAccount.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.ACCOUNT); assertTrue(EffortCertificationDocumentRuleUtil.hasContractGrantAccount(detailLine)); } } /** * the account associated with the detail line is not a contract & grant account */ public void testHasContractGrantAccount_No() throws Exception { String testTarget = "hasContractGrantAccount.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.ACCOUNT); assertFalse(EffortCertificationDocumentRuleUtil.hasContractGrantAccount(detailLine)); } } /** * the sub account associated with the detail line is cost shared */ public void testHasCostShareSubAccount_Yes() throws Exception { String testTarget = "hasCostShareSubAccount.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<String> designatedCostShareSubAccountTypeCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.COST_SHARE_SUB_ACCOUNT_TYPE_CODES), deliminator); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.SUB_ACCOUNT); assertTrue(EffortCertificationDocumentRuleUtil.hasCostShareSubAccount(detailLine, designatedCostShareSubAccountTypeCodes)); } } /** * the sub account associated with the detail line is not cost shared */ public void testHasCostShareSubAccount_No() throws Exception { String testTarget = "hasCostShareSubAccount.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<String> designatedCostShareSubAccountTypeCodes = ObjectUtil.split(properties.getProperty(testTarget + EffortTestDataPropertyConstants.COST_SHARE_SUB_ACCOUNT_TYPE_CODES), deliminator); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.SUB_ACCOUNT); assertFalse(EffortCertificationDocumentRuleUtil.hasCostShareSubAccount(detailLine, designatedCostShareSubAccountTypeCodes)); } } /** * the payroll amount of the detail line is zero or positive number */ public void testHasNonnegativePayrollAmount_Yes() throws Exception { String testTarget = "hasNonnegativePayrollAmount.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { assertTrue(EffortCertificationDocumentRuleUtil.hasNonnegativePayrollAmount(detailLine)); } } /** * the payroll amount of the detail line is a negatitive number */ public void testHasNonnegativePayrollAmount_No() throws Exception { String testTarget = "hasNonnegativePayrollAmount.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { assertFalse(EffortCertificationDocumentRuleUtil.hasNonnegativePayrollAmount(detailLine)); } } /** * there is an existing detail line in the document with the same chart, account and sub account as the new detail line */ public void testHasSameExistingLine_Yes() throws Exception { String testTarget = "hasSameExistingLine.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); EffortCertificationDetail newDetail = this.buildDetailLine(testTarget, EffortTestDataPropertyConstants.NEW_DETAIL); List<String> comparableFields = Arrays.asList(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, KFSPropertyConstants.ACCOUNT_NUMBER, KFSPropertyConstants.SUB_ACCOUNT_NUMBER); assertTrue(EffortCertificationDocumentRuleUtil.hasSameExistingLine(document, newDetail, comparableFields)); } /** * there is no existing detail line in the document with the same chart, account and sub account as the new detail line */ public void testHasSameExistingLine_No() throws Exception { String testTarget = "hasSameExistingLine.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); EffortCertificationDetail newDetail = this.buildDetailLine(testTarget, EffortTestDataPropertyConstants.NEW_DETAIL); List<String> comparableFields = Arrays.asList(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, KFSPropertyConstants.ACCOUNT_NUMBER, KFSPropertyConstants.SUB_ACCOUNT_NUMBER); assertFalse(EffortCertificationDocumentRuleUtil.hasSameExistingLine(document, newDetail, comparableFields)); } /** * the detail line has valid effort percent */ public void testHasValidEffortPercent_Yes() throws Exception { String testTarget = "hasValidEffortPercent.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { assertTrue(EffortCertificationDocumentRuleUtil.hasValidEffortPercent(detailLine)); } } /** * the detail line has no valid effort percent */ public void testHasValidEffortPercent_No() throws Exception { String testTarget = "hasValidEffortPercent.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { assertFalse(EffortCertificationDocumentRuleUtil.hasValidEffortPercent(detailLine)); } } /** * the payroll amounts of the detail lines have been changed */ public void testIsPayrollAmountChanged_Line_Yes() throws Exception { String testTarget = "isPayrollAmountChanged.line.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { assertTrue(EffortCertificationDocumentRuleUtil.isPayrollAmountChangedFromOriginal(detailLine)); } } /** * the payroll amounts of the detail lines have not been changed */ public void testIsPayrollAmountChanged_Line_No() throws Exception { String testTarget = "isPayrollAmountChanged.line.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { assertFalse(EffortCertificationDocumentRuleUtil.isPayrollAmountChangedFromOriginal(detailLine)); } } /** * the payroll amount of the document has been changed */ public void testIsPayrollAmountChanged_Document_Yes() throws Exception { String testTarget = "isPayrollAmountChanged.document.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); assertTrue(EffortCertificationDocumentRuleUtil.isPayrollAmountChangedFromOriginal(document)); } /** * the payroll amount of the document has not been changed */ public void testIsPayrollAmountChanged_Document_No() throws Exception { String testTarget = "isPayrollAmountChanged.document.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); assertFalse(EffortCertificationDocumentRuleUtil.isPayrollAmountChangedFromOriginal(document)); } /** * the payroll amount of the detail line is zero or positive number */ public void testIsPayrollAmountNonnegative_Yes() throws Exception { this.testHasNonnegativePayrollAmount_Yes(); } /** * the payroll amount of the detail line is a negatitive number */ public void testIsPayrollAmountNonnegative_No() throws Exception { this.testHasNonnegativePayrollAmount_No(); } /** * the payroll amount of the detail line is overchanged */ public void testIsPayrollAmountOverChanged_Line_Yes() throws Exception { String testTarget = "isPayrollAmountOverChanged.line.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); KualiDecimal originalTotalAmount = document.getTotalOriginalPayrollAmount(); double limitOfLinePayrollAmountChange = Double.parseDouble(StringUtils.trim(properties.getProperty(testTarget + EffortTestDataPropertyConstants.LIMIT_OF_LINE_PAYROLL_AMOUNT_CHANGE))); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); int countOfOverChangedLine = 0; for (EffortCertificationDetail detailLine : details) { if(EffortCertificationDocumentRuleUtil.isPayrollAmountOverChanged(detailLine, originalTotalAmount, limitOfLinePayrollAmountChange)) { countOfOverChangedLine++; } } assertEquals("All line amounts are overchanged.", details.size(), countOfOverChangedLine); } /** * the payroll amount of the detail line is not overchanged */ public void testIsPayrollAmountOverChanged_Line_No() throws Exception { String testTarget = "isPayrollAmountOverChanged.line.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); KualiDecimal originalTotalAmount = document.getTotalOriginalPayrollAmount(); double limitOfLinePayrollAmountChange = Double.parseDouble(StringUtils.trim(properties.getProperty(testTarget + EffortTestDataPropertyConstants.LIMIT_OF_LINE_PAYROLL_AMOUNT_CHANGE))); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); int countOfOverChangedLine = 0; for (EffortCertificationDetail detailLine : details) { if(EffortCertificationDocumentRuleUtil.isPayrollAmountOverChanged(detailLine, originalTotalAmount, limitOfLinePayrollAmountChange)) { countOfOverChangedLine++; } } assertEquals("There is no line whose amount is overchanged.", 0, countOfOverChangedLine); } /** * the payroll amount of at least one the detail line in the document is not overchanged */ public void testIsPayrollAmountOverChanged_Document_Yes() throws Exception { String testTarget = "isPayrollAmountOverChanged.document.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); double limitOfLinePayrollAmountChange = Double.parseDouble(StringUtils.trim(properties.getProperty(testTarget + EffortTestDataPropertyConstants.LIMIT_OF_LINE_PAYROLL_AMOUNT_CHANGE))); assertTrue(EffortCertificationDocumentRuleUtil.isPayrollAmountOverChanged(document, limitOfLinePayrollAmountChange)); } /** * the payroll amounts of the detail lines in the document are not overchanged */ public void testIsPayrollAmountOverChanged_Document_No() throws Exception { String testTarget = "isPayrollAmountOverChanged.document.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); double limitOfLinePayrollAmountChange = Double.parseDouble(StringUtils.trim(properties.getProperty(testTarget + EffortTestDataPropertyConstants.LIMIT_OF_LINE_PAYROLL_AMOUNT_CHANGE))); assertFalse(EffortCertificationDocumentRuleUtil.isPayrollAmountOverChanged(document, limitOfLinePayrollAmountChange)); } /** * the total effort of the document is 100 */ public void testIsTotalEffortPercentageAs100_Yes() throws Exception { String testTarget = "isTotalEffortPercentageAs100.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); assertTrue(EffortCertificationDocumentRuleUtil.isTotalEffortPercentageAs100(document)); } /** * the total effort of the document is not 100 */ public void testIsTotalEffortPercentageAs100_No() throws Exception { String testTarget = "isTotalEffortPercentageAs100.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); assertFalse(EffortCertificationDocumentRuleUtil.isTotalEffortPercentageAs100(document)); } /** * the total payroll amount of the document is overchanged */ public void testIsTotalPayrollAmountOverChanged_Yes() throws Exception { String testTarget = "isTotalPayrollAmountOverChanged.yes."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); double limitOfTotalPayrollAmountChange = Double.parseDouble(StringUtils.trim(properties.getProperty(testTarget + EffortTestDataPropertyConstants.LIMIT_OF_TOTAL_PAYROLL_AMOUNT_CHANGE))); assertTrue(EffortCertificationDocumentRuleUtil.isTotalPayrollAmountOverChanged(document, limitOfTotalPayrollAmountChange)); } /** * the total payroll amount of the document is not overchanged */ public void testIsTotalPayrollAmountOverChanged_No() throws Exception { String testTarget = "isTotalPayrollAmountOverChanged.no."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); double limitOfTotalPayrollAmountChange = Double.parseDouble(StringUtils.trim(properties.getProperty(testTarget + EffortTestDataPropertyConstants.LIMIT_OF_TOTAL_PAYROLL_AMOUNT_CHANGE))); assertFalse(EffortCertificationDocumentRuleUtil.isTotalPayrollAmountOverChanged(document, limitOfTotalPayrollAmountChange)); } /** * the detail line has valid effort percent */ public void testIsValidPercent_Yes() throws Exception { this.testHasValidEffortPercent_Yes(); } /** * the detail line has invalid effort percent */ public void testIsValidPercent_No() throws Exception { this.testHasValidEffortPercent_No(); } /** * test if the source account information is updated approperitely */ public void testUpdateSourceAccountInformation() throws Exception { String testTarget = "updateSourceAccountInformation."; EffortCertificationDocument document = this.loadEffortCertificationDocument(testTarget); List<EffortCertificationDetail> details = document.getEffortCertificationDetailLines(); for (EffortCertificationDetail detailLine : details) { detailLine.refreshReferenceObject(KFSPropertyConstants.SUB_ACCOUNT); EffortCertificationDocumentRuleUtil.updateSourceAccountInformation(detailLine); } List<EffortCertificationDetail> expectedDetails = this.buildExpectedDetailLines(testTarget); List<String> detailKeyFields = ObjectUtil.split(detailFieldNames, deliminator); assertTrue(TestDataPreparator.hasSameElements(expectedDetails, details, detailKeyFields)); } /** * load test data into database before a test case starts * * @param testTarget the target test case */ private EffortCertificationDocument loadEffortCertificationDocument(String testTarget) throws Exception { TestDataPreparator.doCleanUpWithReference(EffortCertificationDocument.class, properties, EffortTestDataPropertyConstants.DOCUMENT_CLEANUP, documentFieldNames, deliminator); EffortCertificationReportDefinition reportDefinition = this.buildReportDefinition(""); reportDefinition = TestDataPreparator.persistDataObject(reportDefinition); FinancialSystemDocumentHeader documentHeader = TestDataPreparator.buildTestDataObject(FinancialSystemDocumentHeader.class, properties, testTarget + EffortTestDataPropertyConstants.DOCUMENT_HEADER, documentHeaderFieldNames, deliminator); documentHeader = TestDataPreparator.persistDataObject(documentHeader); EffortCertificationDocument document = this.buildDocument(testTarget); document.setDocumentHeader(documentHeader); List<EffortCertificationDetail> detailLines = this.buildDetailLines(testTarget); document.setEffortCertificationDetailLines(detailLines); document = TestDataPreparator.persistDataObject(document); return document; } /** * build a report defintion object from the given test target * * @param testTarget the given test target that specifies the test data being used * @return a report defintion object */ private EffortCertificationReportDefinition buildReportDefinition(String testTarget) { return TestDataPreparator.buildTestDataObject(EffortCertificationReportDefinition.class, properties, testTarget + EffortTestDataPropertyConstants.REPORT_DEFINITION_FIELD_VALUES, reportDefinitionFieldNames, deliminator); } /** * build an Effort Certification Document object from the given test target * * @param testTarget the given test target that specifies the test data being used * @return an Effort Certification Document object */ private EffortCertificationDocument buildDocument(String testTarget) { return TestDataPreparator.buildTestDataObject(EffortCertificationDocument.class, properties, testTarget + EffortTestDataPropertyConstants.DOCUMENT, documentFieldNames, deliminator); } /** * build a list of detail lines for the specified test target * * @param testTarget the given test target that specifies the test data being used * @return a list of detail lines for the specified test target */ private List<EffortCertificationDetail> buildDetailLines(String testTarget) { int numberOfDetails = Integer.valueOf(StringUtils.trim(properties.getProperty(testTarget + EffortTestDataPropertyConstants.NUM_OF_DETAILS))); return TestDataPreparator.buildTestDataList(EffortCertificationDetail.class, properties, testTarget + EffortTestDataPropertyConstants.DETAIL, detailFieldNames, deliminator, numberOfDetails); } /** * build a list of expected detail lines for the specified test target * * @param testTarget the given test target that specifies the test data being used * @return a list of expected detail lines for the specified test target */ private List<EffortCertificationDetail> buildExpectedDetailLines(String testTarget) { int numberOfDetails = Integer.valueOf(StringUtils.trim(properties.getProperty(testTarget + EffortTestDataPropertyConstants.NUM_OF_EXPECTED_DETAILS))); return TestDataPreparator.buildTestDataList(EffortCertificationDetail.class, properties, testTarget + EffortTestDataPropertyConstants.EXPECTED_DETAIL, detailFieldNames, deliminator, numberOfDetails); } /** * build a detail lines for the specified test target * * @param testTarget the given test target that specifies the test data being used * @param propertyName the name the specified property that contains the data being used to build a detail line * @return a detail lines for the specified test target with the given property */ private EffortCertificationDetail buildDetailLine(String testTarget, String propertyName) { return TestDataPreparator.buildTestDataObject(EffortCertificationDetail.class, properties, testTarget + propertyName, detailFieldNames, deliminator); } }