Java tutorial
/* * 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.purap.util; import static org.kuali.kfs.sys.fixture.UserNameFixture.parke; import java.io.BufferedInputStream; import java.io.File; import java.sql.Date; import org.apache.commons.io.IOUtils; import org.kuali.kfs.module.purap.batch.ElectronicInvoiceInputFileType; import org.kuali.kfs.module.purap.businessobject.ElectronicInvoice; import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceContact; import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceDetailRequestHeader; import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceDetailRequestSummary; import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceItem; import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceOrder; import org.kuali.kfs.module.purap.fixture.ElectronicInvoiceParserFixture; import org.kuali.kfs.module.purap.service.ElectronicInvoiceMappingService; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.batch.service.BatchInputFileService; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.SpringContext; @ConfigureContext(session = parke, shouldCommitTransactions = false) public class ElectronicInvoiceParserTest extends KualiTestBase { private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger .getLogger(ElectronicInvoiceParserTest.class); private ElectronicInvoice eInvoice; private final String eInvoiceXMLFile = ".." + File.separator + "fixture" + File.separator + "electronicInvoiceFixture.xml"; /** * TODO: Remove once other tests are fixed */ public void testNothing() { } /** * TODO: Fix this test. It should not have a hard-coded URL for finding the schema. */ public void PATCHFIX_testEInvoiceXMLParsing() throws Exception { loadInvoiceXML(); assertNotNull(eInvoice); validateCXMLAttributes(); validateHeaderElement(); validateInvoiceDetailRequestElement(); } private void validateInvoiceDetailRequestElement() { validateInvoiceDetailRequestHeader(); validateInvoiceDetailOrder(); validateInvoiceDetailSummary(); } private void loadInvoiceXML() throws Exception { ElectronicInvoiceInputFileType eInvoiceInputFileType = SpringContext .getBean(ElectronicInvoiceInputFileType.class); BatchInputFileService batchInputFileService = SpringContext.getBean(BatchInputFileService.class); BufferedInputStream fileStream = new BufferedInputStream(getClass().getResourceAsStream(eInvoiceXMLFile)); byte[] fileByteContent = IOUtils.toByteArray(fileStream); //If we use the schemaLocation with DEV url and not running Tomcat locally, this test is going to fail, because //it won't be able to find the electronicInvoice.xsd unless Tomcat is running locally. //Therefore, for unit test purpose, let's set the schemaLocation to CNV url. String schemaLocation = eInvoiceInputFileType.getSchemaLocation(); int beginIndex = schemaLocation.indexOf("static"); String newSchemaLocation = "https://test.kuali.org/kfs-reg/" + schemaLocation.substring(beginIndex); eInvoiceInputFileType.setSchemaLocation(newSchemaLocation); eInvoice = (ElectronicInvoice) batchInputFileService.parse(eInvoiceInputFileType, fileByteContent); } private void validateCXMLAttributes() { assertEquals(ElectronicInvoiceParserFixture.payloadID, eInvoice.getPayloadID()); assertEquals(ElectronicInvoiceParserFixture.timestamp, eInvoice.getTimestamp()); assertEquals(ElectronicInvoiceParserFixture.version, eInvoice.getVersion()); assertEquals(ElectronicInvoiceParserFixture.locale, eInvoice.getLocale()); assertEquals(ElectronicInvoiceParserFixture.deploymentMode, eInvoice.getDeploymentMode()); } private void validateHeaderElement() { assertEquals(ElectronicInvoiceParserFixture.fromDomain, eInvoice.getCxmlHeader().getFromDomain()); assertEquals(ElectronicInvoiceParserFixture.fromIdentity, eInvoice.getCxmlHeader().getFromIdentity()); assertEquals(ElectronicInvoiceParserFixture.toDomain, eInvoice.getCxmlHeader().getToDomain()); assertEquals(ElectronicInvoiceParserFixture.toIdentity, eInvoice.getCxmlHeader().getToIdentity()); assertEquals(ElectronicInvoiceParserFixture.senderDomain, eInvoice.getCxmlHeader().getSenderDomain()); assertEquals(ElectronicInvoiceParserFixture.senderIdentity, eInvoice.getCxmlHeader().getSenderIdentity()); assertEquals(ElectronicInvoiceParserFixture.senderSharedSecret, eInvoice.getCxmlHeader().getSenderSharedSecret()); assertEquals(ElectronicInvoiceParserFixture.senderUserAgent, eInvoice.getCxmlHeader().getSenderUserAgent()); } private void validateInvoiceDetailRequestHeader() { String invoiceDate = eInvoice.getInvoiceDetailRequestHeader().getInvoiceDateString(); Date date = ElectronicInvoiceUtils.getDate(invoiceDate); assertEquals(ElectronicInvoiceParserFixture.invoiceDate, invoiceDate); assertEquals(date.toString(), eInvoice.getInvoiceDetailRequestHeader().getInvoiceDate().toString()); assertEquals(ElectronicInvoiceParserFixture.invoiceID, eInvoice.getInvoiceDetailRequestHeader().getInvoiceId()); assertEquals(ElectronicInvoiceParserFixture.operation, eInvoice.getInvoiceDetailRequestHeader().getOperation()); assertEquals(ElectronicInvoiceParserFixture.purpose, eInvoice.getInvoiceDetailRequestHeader().getPurpose()); assertTrue(eInvoice.getInvoiceDetailRequestHeader().isInformationOnly()); assertTrue(eInvoice.getInvoiceDetailRequestHeader().isHeaderInvoiceIndicator()); assertTrue(eInvoice.getInvoiceDetailRequestHeader().isTaxInLine()); assertTrue(eInvoice.getInvoiceDetailRequestHeader().isSpecialHandlingInLine()); assertTrue(eInvoice.getInvoiceDetailRequestHeader().isShippingInLine()); assertTrue(eInvoice.getInvoiceDetailRequestHeader().isDiscountInLine()); validateInvoicePartners(); validateShippingDetail(); validatePaymentTermElement(); } private void validateInvoicePartners() { validateBillToContact(); validateRemitToContact(); } private void validateBillToContact() { ElectronicInvoiceDetailRequestHeader requestHeader = eInvoice.getInvoiceDetailRequestHeader(); ElectronicInvoiceContact contact = requestHeader .getCxmlContactByRoleID(ElectronicInvoiceMappingService.CXML_ADDRESS_BILL_TO_ROLE_ID); assertNotNull(contact); assertEquals(ElectronicInvoiceParserFixture.BillToContact.addressId, contact.getAddressID()); assertEquals(ElectronicInvoiceParserFixture.BillToContact.role, contact.getRole()); assertEquals(1, contact.getPostalAddresses().size()); assertEquals(ElectronicInvoiceParserFixture.BillToContact.street1, contact.getPostalAddresses().get(0).getLine1()); assertEquals(ElectronicInvoiceParserFixture.BillToContact.street2, contact.getPostalAddresses().get(0).getLine2()); assertEquals(ElectronicInvoiceParserFixture.BillToContact.street3, contact.getPostalAddresses().get(0).getLine3()); assertEquals(ElectronicInvoiceParserFixture.BillToContact.city, contact.getPostalAddresses().get(0).getCityName()); assertEquals(ElectronicInvoiceParserFixture.BillToContact.state, contact.getPostalAddresses().get(0).getStateCode()); assertEquals(ElectronicInvoiceParserFixture.BillToContact.country, contact.getPostalAddresses().get(0).getCountryName()); assertEquals(ElectronicInvoiceParserFixture.BillToContact.countryCode, contact.getPostalAddresses().get(0).getCountryCode()); } private void validateRemitToContact() { ElectronicInvoiceDetailRequestHeader requestHeader = eInvoice.getInvoiceDetailRequestHeader(); ElectronicInvoiceContact contact = requestHeader .getCxmlContactByRoleID(ElectronicInvoiceMappingService.CXML_ADDRESS_REMIT_TO_ROLE_ID); assertNotNull(contact); assertEquals(ElectronicInvoiceParserFixture.RemitToContact.addressId, contact.getAddressID()); assertEquals(ElectronicInvoiceParserFixture.RemitToContact.role, contact.getRole()); assertEquals(1, contact.getPostalAddresses().size()); assertEquals(ElectronicInvoiceParserFixture.RemitToContact.street1, contact.getPostalAddresses().get(0).getLine1()); assertEquals(ElectronicInvoiceParserFixture.RemitToContact.street2, contact.getPostalAddresses().get(0).getLine2()); assertEquals(ElectronicInvoiceParserFixture.RemitToContact.street3, contact.getPostalAddresses().get(0).getLine3()); assertEquals(ElectronicInvoiceParserFixture.RemitToContact.city, contact.getPostalAddresses().get(0).getCityName()); assertEquals(ElectronicInvoiceParserFixture.RemitToContact.state, contact.getPostalAddresses().get(0).getStateCode()); assertEquals(ElectronicInvoiceParserFixture.RemitToContact.country, contact.getPostalAddresses().get(0).getCountryName()); assertEquals(ElectronicInvoiceParserFixture.RemitToContact.countryCode, contact.getPostalAddresses().get(0).getCountryCode()); } private void validateShippingDetail() { ElectronicInvoiceDetailRequestHeader requestHeader = eInvoice.getInvoiceDetailRequestHeader(); assertEquals(ElectronicInvoiceParserFixture.shippingDate, requestHeader.getShippingDateString()); ElectronicInvoiceContact contact = requestHeader .getCxmlContactByRoleID(ElectronicInvoiceMappingService.CXML_ADDRESS_SHIP_TO_ROLE_ID); assertNotNull(contact); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.addressId, contact.getAddressID()); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.role, contact.getRole()); assertEquals(1, contact.getPostalAddresses().size()); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.street1, contact.getPostalAddresses().get(0).getLine1()); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.street2, contact.getPostalAddresses().get(0).getLine2()); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.street3, contact.getPostalAddresses().get(0).getLine3()); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.city, contact.getPostalAddresses().get(0).getCityName()); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.state, contact.getPostalAddresses().get(0).getStateCode()); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.country, contact.getPostalAddresses().get(0).getCountryName()); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.countryCode, contact.getPostalAddresses().get(0).getCountryCode()); String emailName1 = contact.getEmailAddresses() .get(ElectronicInvoiceParserFixture.ShipToContact.emailName1); String emailName2 = contact.getEmailAddresses() .get(ElectronicInvoiceParserFixture.ShipToContact.emailName2); assertNotNull(emailName1); assertNotNull(emailName2); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.emailValue1, emailName1); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.emailValue2, emailName2); String phoneNumber = contact.getPhoneNumbers().get(ElectronicInvoiceParserFixture.ShipToContact.phoneName); assertNotNull(phoneNumber); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.phoneNumber, phoneNumber); String faxNumber = contact.getPhoneNumbers().get(ElectronicInvoiceParserFixture.ShipToContact.faxName); assertNotNull(faxNumber); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.faxNumber, faxNumber); String url = contact.getWebAddresses().get(0); assertNotNull(url); assertEquals(ElectronicInvoiceParserFixture.ShipToContact.url, url); } private void validatePaymentTermElement() { assertEquals(ElectronicInvoiceParserFixture.payInNumberOfDays, eInvoice.getInvoiceDetailRequestHeader().getPayInNumberOfDays()); assertEquals(ElectronicInvoiceParserFixture.percentageRate, eInvoice.getInvoiceDetailRequestHeader().getPercentageRate()); } private void validateInvoiceDetailOrder() { assertEquals(1, eInvoice.getInvoiceDetailOrders().size()); ElectronicInvoiceOrder order = eInvoice.getInvoiceDetailOrders().get(0); assertEquals(ElectronicInvoiceParserFixture.orderDate, order.getOrderReferenceOrderDateString()); assertEquals(ElectronicInvoiceParserFixture.orderID, order.getOrderReferenceOrderID()); assertEquals(ElectronicInvoiceParserFixture.documentRefPayloadID, order.getOrderReferenceDocumentRefPayloadID()); /** * Validate item */ assertEquals(1, order.getInvoiceItems().size()); ElectronicInvoiceItem item = order.getInvoiceItems().get(0); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.invoiceLineNumber, item.getInvoiceLineNumber()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.quantity, item.getQuantity()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.uom, item.getUnitOfMeasure()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.unitPrice, item.getUnitPrice()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.itemReferenceLineNumber, item.getReferenceLineNumber()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.SupplierPartID, item.getReferenceItemIDSupplierPartID()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.itemDescription, item.getReferenceDescription()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.lineSubTotalAmt, item.getInvoiceLineSubTotalAmountBigDecimal().doubleValue()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.lineTaxAmt, item.getInvoiceLineTaxAmountBigDecimal().doubleValue()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.lineTaxDesc, item.getTaxDescription()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.lineShippingAmt, item.getInvoiceLineShippingAmountBigDecimal().doubleValue()); assertEquals(ElectronicInvoiceParserFixture.InvoiceItem.lineSpecialHandlingAmt, item.getInvoiceLineSpecialHandlingAmountBigDecimal().doubleValue()); } private void validateInvoiceDetailSummary() { ElectronicInvoiceDetailRequestSummary summary = eInvoice.getInvoiceDetailRequestSummary(); assertNotNull(summary); assertEquals(ElectronicInvoiceParserFixture.SummaryDetail.subTotalAmt, summary.getSubTotalAmount()); assertEquals(ElectronicInvoiceParserFixture.SummaryDetail.taxAmount, summary.getTaxAmount()); assertEquals(ElectronicInvoiceParserFixture.SummaryDetail.taxDescription, summary.getTaxDescription()); assertEquals(ElectronicInvoiceParserFixture.SummaryDetail.splHandlingAmt, summary.getSpecialHandlingAmount()); assertEquals(ElectronicInvoiceParserFixture.SummaryDetail.shippingAmt, summary.getShippingAmount()); assertEquals(ElectronicInvoiceParserFixture.SummaryDetail.discountAmt, summary.getDiscountAmount()); assertEquals(ElectronicInvoiceParserFixture.SummaryDetail.grossAmt, summary.getGrossAmount()); assertEquals(ElectronicInvoiceParserFixture.SummaryDetail.netAmt, summary.getNetAmount()); assertEquals(ElectronicInvoiceParserFixture.SummaryDetail.depositAmt, summary.getDepositAmount()); assertEquals(ElectronicInvoiceParserFixture.SummaryDetail.dueAmt, summary.getDueAmount()); } }