You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by pa...@apache.org on 2020/06/27 12:39:42 UTC

[ofbiz-framework] branch trunk updated: Improved: Convert InvoicePerShipmentTests.xml tests to groovy (OFBIZ-11553) (#208)

This is an automated email from the ASF dual-hosted git repository.

pawan pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 0f9307c  Improved: Convert InvoicePerShipmentTests.xml tests to groovy (OFBIZ-11553) (#208)
0f9307c is described below

commit 0f9307c0711fff7b8aef5c795918c21b0b9243d8
Author: Priya Sharma <pr...@gmail.com>
AuthorDate: Sat Jun 27 18:09:34 2020 +0530

    Improved: Convert InvoicePerShipmentTests.xml tests to groovy (OFBIZ-11553) (#208)
    
    * Improved: Convert InvoicePerShipmentTests.xml tests to groovy (OFBIZ-11553)
    Done following:
    - converted all xml test implementation to groovy
    - used MockHttpServletRequest MockHttpServletResponse objects for triggering the events
    - removed the xml version of the test implementations
    - updated the test service mapping in the invoicetests.xml
    (OFBIZ-11553)
    
    * Improved: Moved the common code into a method so as to avoid duplication of code.
    - passed in two parameters i.e. product id and the invoicePerShipment flag, to be used as per the need of the testcase.
    (OFBIz-11553)
    
    * Improved: Added support to get access to the Debug log methods in the groovy tests. (OFBIZ-11553)
    - Also updated the references in the InvoicePerShipment tests.
    
    Co-authored-by: Priya Sharma <pr...@hotwaxsystems.com>
---
 .../minilang/test/InvoicePerShipmentTests.xml      | 526 ---------------------
 .../accounting/InvoicePerShipmentTests.groovy      | 190 ++++++++
 applications/accounting/testdef/invoicetests.xml   |   2 +-
 .../ofbiz/service/testtools/OFBizTestCase.java     |  14 +
 4 files changed, 205 insertions(+), 527 deletions(-)

diff --git a/applications/accounting/minilang/test/InvoicePerShipmentTests.xml b/applications/accounting/minilang/test/InvoicePerShipmentTests.xml
deleted file mode 100644
index dcf34f2..0000000
--- a/applications/accounting/minilang/test/InvoicePerShipmentTests.xml
+++ /dev/null
@@ -1,526 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xmlns="http://ofbiz.apache.org/Simple-Method" xsi:schemaLocation="http://ofbiz.apache.org/Simple-Method http://ofbiz.apache.org/dtds/simple-methods.xsd">
-
-    <simple-method method-name="testInvoicePerShipmentSetFalse" short-description="Test Invoice Per Shipment Set False" login-required="false">
-        <!-- Test Invoice Per Shipment
-             Step 1) Set create.invoice.per.shipment=N in accounting.properties file.
-             Step 2) Create order and approve order.
-             Step 3) Pack Shipment For Ship Group.
-             Step 4) Check invoice should not created.
-        -->
-        <!-- Step 1 -->
-        <script>groovy:
-            import org.apache.ofbiz.base.util.UtilProperties;
-            UtilProperties.setPropertyValueInMemory("accounting", "create.invoice.per.shipment", "N");
-        </script>
-        <log level="info" message="===== >>> Set Accounting.properties / create.invoice.per.shipment = N"/>
-        <!-- Step 2 -->
-        <field-to-session field="nullField" session-name="orderMode"/>
-        <set field="request" from-field="parameters.request"/>
-        <set field="response" from-field="parameters.response"/>
-        <call-class-method method-name="routeOrderEntry" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : routeOrderEntry, Response : ${result}"/>
-        <entity-one entity-name="UserLogin" value-field="userLogin">
-            <field-map field-name="userLoginId" value="admin"/>
-        </entity-one>
-        <script>groovy:
-            request.setParameter("orderMode", "SALES_ORDER");
-            request.setParameter("productStoreId", "9000");
-            request.setParameter("partyId", "DemoCustomer");
-            request.setParameter("currencyUom", "USD");
-            session = request.getSession();
-            session.setAttribute("userLogin", userLogin);
-        </script>
-        <call-class-method method-name="initializeOrderEntry" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : initializeOrderEntry, Response : ${result}"/>
-        <call-class-method method-name="setOrderCurrencyAgreementShipDates" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : setOrderCurrencyAgreementShipDates, Response : ${result}"/>
-        <script>groovy:
-            request.setParameter("add_product_id", "GZ-1000");
-        </script>
-        <call-class-method method-name="addToCart" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : addToCart, Response : ${result}"/>
-        <script>groovy:
-            request.setParameter("checkoutpage", "quick");
-            request.setParameter("shipping_contact_mech_id", "9015");
-            request.setParameter("shipping_method", "GROUND@UPS");
-            request.setParameter("checkOutPaymentId", "EXT_COD");
-            request.setParameter("is_gift", "false");
-            request.setParameter("may_split", "false");
-        </script>
-        <field-to-request field="nullField" request-name="shoppingCart"/>
-        <call-class-method method-name="setQuickCheckOutOptions" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : setQuickCheckOutOptions, Response : ${result}"/>
-        <call-class-method method-name="createOrder" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : createOrder, Response : ${result}"/>
-        <call-class-method method-name="processPayment" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : processPayment, Response : ${result}"/>
-        <call-service-asynch service-name="sendOrderConfirmation"/>
-        <call-class-method method-name="destroyCart" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : destroyCart, Response = ${result}"/>
-        <!-- Step 3 -->
-        <entity-condition entity-name="OrderHeader" list="orderHeaders">
-            <condition-expr field-name="orderTypeId" value="SALES_ORDER"/>
-            <order-by field-name="-entryDate"/>
-        </entity-condition>
-        <first-from-list list="orderHeaders" entry="orderHeader"/>
-        <log level="info" message="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : ${orderHeader}"/>
-        <script>groovy:
-            import org.apache.ofbiz.shipment.packing.PackingSession;
-            packingSession = new PackingSession(dispatcher, userLogin);
-            packingSession.setPrimaryOrderId(orderHeader.get("orderId"));
-            packingSession.setPrimaryShipGroupSeqId("00001");
-            parameters.put("packingSession", packingSession);
-        </script>
-        <set field="packInput.orderId" from-field="orderHeader.orderId"/>
-        <set field="packInput.shipGroupSeqId" value="00001"/>
-        <set field="packInput.packingSession" from-field="parameters.packingSession"/>
-        <set field="packInput.nextPackageSeq" value="1" type="Integer"/>
-        <set field="packInput.userLogin" from-field="userLogin"/>
-        <!-- Items -->
-        <set field="packInput.selInfo._1" value="Y"/>
-        <set field="packInput.pkgInfo._1" value="1"/>
-        <set field="packInput.qtyInfo._1" value="1"/>
-        <set field="packInput.prdInfo._1" value="GZ-1000"/>
-        <set field="packInput.iteInfo._1" value="00001"/>
-        <set field="packInput.wgtInfo._1" value="0"/>
-        <set field="packInput.numPackagesInfo._1" value="1"/>
-        <call-service service-name="packBulkItems" in-map-name="packInput">
-            <result-to-field result-name="responseMessage"/>
-        </call-service>
-        <log level="info" message="===== >>> Service: packBulkItems, Response = ${responseMessage}"/>
-        <set-service-fields service-name="completePack" map="packInput" to-map="completePackInput"/>
-        <call-service service-name="completePack" in-map-name="completePackInput">
-            <result-to-field result-name="shipmentId"/>
-        </call-service>
-        <log level="info" message="===== >>> Service: completePack, shipmentId = ${shipmentId}"/>
-        <!-- Step 4 -->
-        <entity-and entity-name="OrderItemBillingAndInvoiceAndItem" list="invoices">
-            <field-map field-name="orderId" from-field="orderHeader.orderId"/>
-        </entity-and>
-        <assert>
-            <if-empty field="invoices"/>
-        </assert>
-        
-        <check-errors/>
-    </simple-method>
-    <simple-method method-name="testInvoicePerShipmentSetTrue" short-description="Test Invoice Per Shipment Set True" login-required="false">
-        <!-- Test Invoice Per Shipment
-             Step 1) Set create.invoice.per.shipment=N in accounting.properties file.
-             Step 2) Create order and approve order.
-             Step 3) Pack Shipment For Ship Group.
-             Step 4) Check invoice should created.
-        -->
-        <!-- Step 1 -->
-        <script>groovy:
-            import org.apache.ofbiz.base.util.UtilProperties;
-            UtilProperties.setPropertyValueInMemory("accounting", "create.invoice.per.shipment", "Y");
-        </script>
-        <log level="info" message="===== >>> Set Accounting.properties / create.invoice.per.shipment = Y"/>
-        <!-- Step 2 -->
-        <field-to-session field="nullField" session-name="orderMode"/>
-        <set field="request" from-field="parameters.request"/>
-        <set field="response" from-field="parameters.response"/>
-        <call-class-method method-name="routeOrderEntry" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : routeOrderEntry, Response = ${result}"/>
-        <entity-one entity-name="UserLogin" value-field="userLogin">
-            <field-map field-name="userLoginId" value="admin"/>
-        </entity-one>
-        <script>groovy:
-            request.setParameter("orderMode", "SALES_ORDER");
-            request.setParameter("productStoreId", "9000");
-            request.setParameter("partyId", "DemoCustomer");
-            request.setParameter("currencyUom", "USD");
-            session = request.getSession();
-            session.setAttribute("userLogin", userLogin);
-        </script>
-        <call-class-method method-name="initializeOrderEntry" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : initializeOrderEntry, Response = ${result}"/>
-        <call-class-method method-name="setOrderCurrencyAgreementShipDates" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : setOrderCurrencyAgreementShipDates, Response = ${result}"/>
-        <script>groovy:
-            request.setParameter("add_product_id", "GZ-1000");
-        </script>
-        <call-class-method method-name="addToCart" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : addToCart, Response = ${result}"/>
-        <script>groovy:
-            request.setParameter("checkoutpage", "quick");
-            request.setParameter("shipping_contact_mech_id", "9015");
-            request.setParameter("shipping_method", "GROUND@UPS");
-            request.setParameter("checkOutPaymentId", "EXT_COD");
-            request.setParameter("is_gift", "false");
-            request.setParameter("may_split", "false");
-        </script>
-        <field-to-request field="nullField" request-name="shoppingCart"/>
-        <call-class-method method-name="setQuickCheckOutOptions" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : setQuickCheckOutOptions, Response = ${result}"/>
-        <call-class-method method-name="createOrder" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : createOrder, Response = ${result}"/>
-        <call-class-method method-name="processPayment" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : processPayment, Response = ${result}"/>
-        <call-service-asynch service-name="sendOrderConfirmation"/>
-        <call-class-method method-name="destroyCart" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : destroyCart, Response = ${result}"/>
-        <!-- Step 3 -->
-        <entity-condition entity-name="OrderHeader" list="orderHeaders">
-            <condition-expr field-name="orderTypeId" value="SALES_ORDER"/>
-            <order-by field-name="-entryDate"/>
-        </entity-condition>
-        <first-from-list list="orderHeaders" entry="orderHeader"/>
-        <script>groovy:
-            import org.apache.ofbiz.shipment.packing.PackingSession;
-            packingSession = new PackingSession(dispatcher, userLogin);
-            packingSession.setPrimaryOrderId(orderHeader.get("orderId"));
-            packingSession.setPrimaryShipGroupSeqId("00001");
-            parameters.put("packingSession", packingSession);
-        </script>
-        <set field="packInput.orderId" from-field="orderHeader.orderId"/>
-        <set field="packInput.shipGroupSeqId" value="00001"/>
-        <set field="packInput.packingSession" from-field="parameters.packingSession"/>
-        <set field="packInput.nextPackageSeq" value="1" type="Integer"/>
-        <set field="packInput.userLogin" from-field="userLogin"/>
-        <!-- Items -->
-        <set field="packInput.selInfo._1" value="Y"/>
-        <set field="packInput.pkgInfo._1" value="1"/>
-        <set field="packInput.qtyInfo._1" value="1"/>
-        <set field="packInput.prdInfo._1" value="GZ-1000"/>
-        <set field="packInput.iteInfo._1" value="00001"/>
-        <set field="packInput.wgtInfo._1" value="0"/>
-        <set field="packInput.numPackagesInfo._1" value="1"/>
-        <call-service service-name="packBulkItems" in-map-name="packInput">
-            <result-to-field result-name="responseMessage"/>
-        </call-service>
-        <log level="info" message="===== >>> Service: packBulkItems, Response = ${responseMessage}"/>
-        <set-service-fields service-name="completePack" map="packInput" to-map="completePackInput"/>
-        <call-service service-name="completePack" in-map-name="completePackInput">
-            <result-to-field result-name="shipmentId"/>
-        </call-service>
-        <log level="info" message="===== >>> Service: completePack, shipmentId = ${shipmentId}"/>
-        <!-- Step 4 -->
-        <entity-and entity-name="OrderItemBillingAndInvoiceAndItem" list="invoices">
-            <field-map field-name="orderId" from-field="orderHeader.orderId"/>
-        </entity-and>
-        <assert>
-            <not><if-empty field="invoices"/></not>
-        </assert>
-        <check-errors/>
-    </simple-method>
-    <simple-method method-name="testInvoicePerShipmentSetOrderFalse" short-description="Test Invoice Per Shipment Set Order False" login-required="false">
-        <!-- Test Invoice Per Shipment
-             Step 1) Create order and set invoicePerShipment=N.
-             Step 2) Pack Shipment For Ship Group.
-             Step 3) Check invoice should not created.
-        -->
-        <!-- Step 1 -->
-        <field-to-session field="nullField" session-name="orderMode"/>
-        <set field="request" from-field="parameters.request"/>
-        <set field="response" from-field="parameters.response"/>
-        <call-class-method method-name="routeOrderEntry" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : routeOrderEntry, Response = ${result}"/>
-        <entity-one entity-name="UserLogin" value-field="userLogin">
-            <field-map field-name="userLoginId" value="admin"/>
-        </entity-one>
-        <script>groovy:
-            request.setParameter("orderMode", "SALES_ORDER");
-            request.setParameter("productStoreId", "9000");
-            request.setParameter("partyId", "DemoCustomer");
-            request.setParameter("currencyUom", "USD");
-            session = request.getSession();
-            session.setAttribute("userLogin", userLogin);
-        </script>
-        <call-class-method method-name="initializeOrderEntry" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : initializeOrderEntry, Response = ${result}"/>
-        <call-class-method method-name="setOrderCurrencyAgreementShipDates" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : setOrderCurrencyAgreementShipDates, Response = ${result}"/>
-        <script>groovy:
-            request.setParameter("add_product_id", "GZ-2644");
-        </script>
-        <call-class-method method-name="addToCart" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : addToCart, Response = ${result}"/>
-        <script>groovy:
-            request.setParameter("checkoutpage", "quick");
-            request.setParameter("shipping_contact_mech_id", "9015");
-            request.setParameter("shipping_method", "GROUND@UPS");
-            request.setParameter("checkOutPaymentId", "EXT_COD");
-            request.setParameter("is_gift", "false");
-            request.setParameter("may_split", "false");
-        </script>
-        <field-to-request field="nullField" request-name="shoppingCart"/>
-        <call-class-method method-name="setQuickCheckOutOptions" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : setQuickCheckOutOptions, Response = ${result}"/>
-        <call-class-method method-name="createOrder" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : createOrder, Response = ${result}"/>
-        <call-class-method method-name="processPayment" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : processPayment, Response = ${result}"/>
-        <call-service-asynch service-name="sendOrderConfirmation"/>
-        <call-class-method method-name="destroyCart" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : destroyCart, Response = ${result}"/>
-        <entity-condition entity-name="OrderHeader" list="orderHeaders">
-            <condition-expr field-name="orderTypeId" value="SALES_ORDER"/>
-            <order-by field-name="-entryDate"/>
-        </entity-condition>
-        <first-from-list list="orderHeaders" entry="orderHeader"/>
-        <set field="orderInput.orderId" from-field="orderHeader.orderId"/>
-        <set field="orderInput.invoicePerShipment" value="N"/>
-        <set field="orderInput.userLogin" from-field="userLogin"/>
-        <call-service service-name="updateOrderHeader" in-map-name="orderInput">
-            <result-to-field result-name="responseMessage"/>
-        </call-service>
-        <log level="info" message="===== >>> Service : updateOrderHeader / invoicePerShipment = N,  Response = ${responseMessage}"/>
-        <!-- Step 2 -->
-        <script>groovy:
-            import org.apache.ofbiz.shipment.packing.PackingSession;
-            packingSession = new PackingSession(dispatcher, userLogin);
-            packingSession.setPrimaryOrderId(orderHeader.get("orderId"));
-            packingSession.setPrimaryShipGroupSeqId("00001");
-            parameters.put("packingSession", packingSession);
-        </script>
-        <set field="packInput.orderId" from-field="orderHeader.orderId"/>
-        <set field="packInput.shipGroupSeqId" value="00001"/>
-        <set field="packInput.packingSession" from-field="parameters.packingSession"/>
-        <set field="packInput.nextPackageSeq" value="1" type="Integer"/>
-        <set field="packInput.userLogin" from-field="userLogin"/>
-        <!-- Items -->
-        <set field="packInput.selInfo._1" value="Y"/>
-        <set field="packInput.pkgInfo._1" value="1"/>
-        <set field="packInput.qtyInfo._1" value="1"/>
-        <set field="packInput.prdInfo._1" value="GZ-2644"/>
-        <set field="packInput.iteInfo._1" value="00001"/>
-        <set field="packInput.wgtInfo._1" value="0"/>
-        <set field="packInput.numPackagesInfo._1" value="1"/>
-        <call-service service-name="packBulkItems" in-map-name="packInput">
-            <result-to-field result-name="responseMessage"/>
-        </call-service>
-        <log level="info" message="===== >>> Service: packBulkItems, Response = ${responseMessage}"/>
-        <set-service-fields service-name="completePack" map="packInput" to-map="completePackInput"/>
-        <call-service service-name="completePack" in-map-name="completePackInput">
-            <result-to-field result-name="shipmentId"/>
-        </call-service>
-        <log level="info" message="===== >>> Service: completePack, shipmentId = ${shipmentId}"/>
-        <!-- Step 3 -->
-        <entity-and entity-name="OrderItemBillingAndInvoiceAndItem" list="invoices">
-            <field-map field-name="orderId" from-field="orderHeader.orderId"/>
-        </entity-and>
-        <assert>
-            <if-empty field="invoices"/>
-        </assert>
-        <check-errors/>
-    </simple-method>
-    <simple-method method-name="testInvoicePerShipmentSetOrderTrue" short-description="Test Invoice Per Shipment Set Order True" login-required="false">
-        <!-- Test Invoice Per Shipment
-             Step 1) Create order and set invoicePerShipment=Y.
-             Step 2) Pack Shipment For Ship Group.
-             Step 3) Check invoice should created.
-        -->
-        <!-- Step 1 -->
-        <field-to-session field="nullField" session-name="orderMode"/>
-        <set field="request" from-field="parameters.request"/>
-        <set field="response" from-field="parameters.response"/>
-        <call-class-method method-name="routeOrderEntry" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : routeOrderEntry, Response = ${result}"/>
-        <entity-one entity-name="UserLogin" value-field="userLogin">
-            <field-map field-name="userLoginId" value="admin"/>
-        </entity-one>
-        <script>groovy:
-            request.setParameter("orderMode", "SALES_ORDER");
-            request.setParameter("productStoreId", "9000");
-            request.setParameter("partyId", "DemoCustomer");
-            request.setParameter("currencyUom", "USD");
-            session = request.getSession();
-            session.setAttribute("userLogin", userLogin);
-        </script>
-        <call-class-method method-name="initializeOrderEntry" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : initializeOrderEntry, Response = ${result}"/>
-        <call-class-method method-name="setOrderCurrencyAgreementShipDates" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : setOrderCurrencyAgreementShipDates, Response = ${result}"/>
-        <script>groovy:
-            request.setParameter("add_product_id", "GZ-2644");
-        </script>
-        <call-class-method method-name="addToCart" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : addToCart, Response = ${result}"/>
-        <script>groovy:
-            request.setParameter("checkoutpage", "quick");
-            request.setParameter("shipping_contact_mech_id", "9015");
-            request.setParameter("shipping_method", "GROUND@UPS");
-            request.setParameter("checkOutPaymentId", "EXT_COD");
-            request.setParameter("is_gift", "false");
-            request.setParameter("may_split", "false");
-        </script>
-        <field-to-request field="nullField" request-name="shoppingCart"/>
-        <call-class-method method-name="setQuickCheckOutOptions" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : setQuickCheckOutOptions, Response = ${result}"/>
-        <call-class-method method-name="createOrder" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : createOrder, Response = ${result}"/>
-        <call-class-method method-name="processPayment" class-name="org.apache.ofbiz.order.shoppingcart.CheckOutEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : processPayment, Response = ${result}"/>
-        <call-service-asynch service-name="sendOrderConfirmation"/>
-        <call-class-method method-name="destroyCart" class-name="org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents" ret-field="result">
-            <field field="request" type="javax.servlet.http.HttpServletRequest"/>
-            <field field="response" type="javax.servlet.http.HttpServletResponse"/>
-        </call-class-method>
-        <log level="info" message="===== >>> Event : destroyCart, Response = ${result}"/>
-        <entity-condition entity-name="OrderHeader" list="orderHeaders">
-            <condition-expr field-name="orderTypeId" value="SALES_ORDER"/>
-            <order-by field-name="-entryDate"/>
-        </entity-condition>
-        <first-from-list list="orderHeaders" entry="orderHeader"/>
-        <set field="orderInput.orderId" from-field="orderHeader.orderId"/>
-        <set field="orderInput.invoicePerShipment" value="Y"/>
-        <set field="orderInput.userLogin" from-field="userLogin"/>
-        <call-service service-name="updateOrderHeader" in-map-name="orderInput">
-            <result-to-field result-name="responseMessage"/>
-        </call-service>
-        <log level="info" message="===== >>> Service : updateOrderHeader / invoicePerShipment = Y,  Response = ${responseMessage}"/>
-        <!-- Step 2 -->
-        <script>groovy:
-            import org.apache.ofbiz.shipment.packing.PackingSession;
-            packingSession = new PackingSession(dispatcher, userLogin);
-            packingSession.setPrimaryOrderId(orderHeader.get("orderId"));
-            packingSession.setPrimaryShipGroupSeqId("00001");
-            parameters.put("packingSession", packingSession);
-        </script>
-        <set field="packInput.orderId" from-field="orderHeader.orderId"/>
-        <set field="packInput.shipGroupSeqId" value="00001"/>
-        <set field="packInput.packingSession" from-field="parameters.packingSession"/>
-        <set field="packInput.nextPackageSeq" value="1" type="Integer"/>
-        <set field="packInput.userLogin" from-field="userLogin"/>
-        <!-- Items -->
-        <set field="packInput.selInfo._1" value="Y"/>
-        <set field="packInput.pkgInfo._1" value="1"/>
-        <set field="packInput.qtyInfo._1" value="1"/>
-        <set field="packInput.prdInfo._1" value="GZ-2644"/>
-        <set field="packInput.iteInfo._1" value="00001"/>
-        <set field="packInput.wgtInfo._1" value="0"/>
-        <set field="packInput.numPackagesInfo._1" value="1"/>
-        <call-service service-name="packBulkItems" in-map-name="packInput">
-            <result-to-field result-name="responseMessage"/>
-        </call-service>
-        <log level="info" message="===== >>> Service: packBulkItems, Response = ${responseMessage}"/>
-        <set-service-fields service-name="completePack" map="packInput" to-map="completePackInput"/>
-        <call-service service-name="completePack" in-map-name="completePackInput">
-            <result-to-field result-name="shipmentId"/>
-        </call-service>
-        <log level="info" message="===== >>> Service: completePack, shipmentId = ${shipmentId}"/>
-        <!-- Step 3 -->
-        <entity-and entity-name="OrderItemBillingAndInvoiceAndItem" list="invoices">
-            <field-map field-name="orderId" from-field="orderHeader.orderId"/>
-        </entity-and>
-        <assert>
-            <not><if-empty field="invoices"/></not>
-        </assert>
-        <check-errors/>
-    </simple-method>
-</simple-methods>
diff --git a/applications/accounting/src/main/groovy/org/apache/ofbiz/accounting/InvoicePerShipmentTests.groovy b/applications/accounting/src/main/groovy/org/apache/ofbiz/accounting/InvoicePerShipmentTests.groovy
new file mode 100644
index 0000000..fe81f7d
--- /dev/null
+++ b/applications/accounting/src/main/groovy/org/apache/ofbiz/accounting/InvoicePerShipmentTests.groovy
@@ -0,0 +1,190 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ofbiz.accounting
+
+import javax.servlet.http.HttpSession
+import org.apache.ofbiz.base.util.UtilProperties
+import org.apache.ofbiz.base.util.UtilValidate
+import org.apache.ofbiz.entity.GenericValue
+import org.apache.ofbiz.order.shoppingcart.CheckOutEvents
+import org.apache.ofbiz.order.shoppingcart.ShoppingCartEvents
+import org.apache.ofbiz.security.Security
+import org.apache.ofbiz.security.SecurityFactory
+import org.apache.ofbiz.service.ModelService
+import org.apache.ofbiz.service.ServiceUtil
+import org.apache.ofbiz.service.testtools.OFBizTestCase
+import org.apache.ofbiz.shipment.packing.PackingSession
+import org.springframework.mock.web.MockHttpServletRequest
+import org.springframework.mock.web.MockHttpServletResponse
+
+
+public class InvoicePerShipmentTests extends OFBizTestCase {
+    public InvoicePerShipmentTests(String name) {
+        super(name)
+    }
+
+    def testInvoicePerShipment(String productId, String invoicePerShipment) {
+        MockHttpServletRequest request = new MockHttpServletRequest()
+        MockHttpServletResponse response = new MockHttpServletResponse()
+
+        Security security = SecurityFactory.getInstance(delegator)
+        request.setAttribute("security", security)
+        request.setAttribute("delegator", delegator)
+        request.setAttribute("dispatcher", dispatcher)
+        HttpSession session = request.getSession()
+        session.setAttribute("orderMode", null)
+
+        String result = ShoppingCartEvents.routeOrderEntry(request, response)
+        logInfo("===== >>> Event : routeOrderEntry, Response : " + result)
+
+        request.setParameter("orderMode", "SALES_ORDER")
+        request.setParameter("productStoreId", "9000")
+        request.setParameter("partyId", "DemoCustomer")
+        request.setParameter("currencyUom", "USD")
+        session.setAttribute("userLogin", userLogin)
+
+        result = ShoppingCartEvents.initializeOrderEntry(request, response)
+        logInfo("===== >>> Event : initializeOrderEntry, Response : " + result)
+
+        result = ShoppingCartEvents.setOrderCurrencyAgreementShipDates(request, response)
+        logInfo("===== >>> Event : setOrderCurrencyAgreementShipDates, Response : " + result)
+
+        request.setParameter("add_product_id", productId)
+
+        result = ShoppingCartEvents.addToCart(request, response)
+        logInfo("===== >>> Event : addToCart, Response : " + result)
+
+        request.setParameter("checkoutpage", "quick")
+        request.setParameter("shipping_contact_mech_id", "9015")
+        request.setParameter("shipping_method", "GROUND@UPS")
+        request.setParameter("checkOutPaymentId", "EXT_COD")
+        request.setParameter("is_gift", "false")
+        request.setParameter("may_split", "false")
+        request.setAttribute("shoppingCart", null)
+
+        result = CheckOutEvents.setQuickCheckOutOptions(request, response)
+        logInfo("===== >>> Event : setQuickCheckOutOptions, Response : " + result)
+
+        result = CheckOutEvents.createOrder(request, response)
+        logInfo("===== >>> Event : createOrder, Response : " + result)
+
+        result = CheckOutEvents.processPayment(request, response)
+        logInfo("===== >>> Event : processPayment, Response : " + result)
+
+        dispatcher.runAsync("sendOrderConfirmation", null)
+
+        result = ShoppingCartEvents.destroyCart(request, response)
+        logInfo("===== >>> Event : destroyCart, Response = " + result)
+
+        // Step 3
+        GenericValue orderHeader = from("OrderHeader").where("orderTypeId", "SALES_ORDER").orderBy("-entryDate").queryFirst()
+        logInfo("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : " + orderHeader)
+
+        if (invoicePerShipment) {
+            // if this value is available that means we need to set this on the order
+            Map orderInput = [:]
+            orderInput.orderId = orderHeader.orderId
+            orderInput.invoicePerShipment = invoicePerShipment
+            orderInput.userLogin = userLogin
+            Map serviceResult = dispatcher.runSync("updateOrderHeader", orderInput)
+            logInfo("===== >>> Service : updateOrderHeader / invoicePerShipment = N,  Response = " + serviceResult.responseMessage)
+        }
+
+        PackingSession packingSession = new PackingSession(dispatcher, userLogin)
+        session.setAttribute("packingSession", packingSession)
+        packingSession.setPrimaryOrderId(orderHeader.orderId)
+        packingSession.setPrimaryShipGroupSeqId("00001")
+
+        Map packInput = [:]
+        packInput.orderId = orderHeader.orderId
+        packInput.shipGroupSeqId = "00001"
+        packInput.packingSession = packingSession
+        packInput.nextPackageSeq = 1
+        packInput.userLogin = userLogin
+
+        // Items
+        packInput.selInfo = [_1: "Y"]
+        packInput.pkgInfo = [_1: "1"]
+        packInput.qtyInfo = [_1: "1"]
+        packInput.prdInfo = [_1: productId]
+        packInput.iteInfo = [_1: "00001"]
+        packInput.wgtInfo = [_1: "0"]
+        packInput.numPackagesInfo = [_1: "1"]
+
+        Map serviceResult = dispatcher.runSync("packBulkItems", packInput)
+        assert ServiceUtil.isSuccess(serviceResult)
+        logInfo("===== >>> Service: packBulkItems, Response = " + serviceResult.responseMessage)
+
+        Map completePackInput = dispatcher.getDispatchContext().makeValidContext("completePack", ModelService.IN_PARAM, packInput)
+        serviceResult = dispatcher.runSync("completePack", completePackInput)
+        assert ServiceUtil.isSuccess(serviceResult)
+        logInfo("===== >>> Service: completePack, shipmentId = " + serviceResult.shipmentId)
+
+        // Step 4
+        List invoices = from("OrderItemBillingAndInvoiceAndItem").where("orderId", orderHeader.orderId).queryList()
+        return invoices
+    }
+    void testInvoicePerShipmentSetFalse() {
+        /* Test Invoice Per Shipment
+            Step 1) Set create.invoice.per.shipment=N in accounting.properties file.
+            Step 2) Create order and approve order.
+            Step 3) Pack Shipment For Ship Group.
+            Step 4) Check invoice should not created.
+        */
+        UtilProperties.setPropertyValueInMemory("accounting", "create.invoice.per.shipment", "N")
+        logInfo("===== >>> Set Accounting.properties / create.invoice.per.shipment = N")
+
+        List invoices = testInvoicePerShipment("GZ-1000", null)
+        assert UtilValidate.isEmpty(invoices)
+    }
+
+    void testInvoicePerShipmentSetTrue() {
+        /* Test Invoice Per Shipment
+             Step 1) Set create.invoice.per.shipment=Y in accounting.properties file.
+             Step 2) Create order and approve order.
+             Step 3) Pack Shipment For Ship Group.
+             Step 4) Check invoice should be created.
+         */
+        UtilProperties.setPropertyValueInMemory("accounting", "create.invoice.per.shipment", "Y")
+        logInfo("===== >>> Set Accounting.properties / create.invoice.per.shipment = Y")
+
+        List invoices = testInvoicePerShipment("GZ-1000", null)
+        assert UtilValidate.isNotEmpty(invoices)
+    }
+
+    void testInvoicePerShipmentSetOrderFalse() {
+        /* Test Invoice Per Shipment
+            Step 1) Create order and set invoicePerShipment=N.
+            Step 2) Pack Shipment For Ship Group.
+            Step 3) Check invoice should not be created.
+        */
+        List invoices = testInvoicePerShipment("GZ-2644", "N")
+        assert UtilValidate.isEmpty(invoices)
+    }
+
+    void testInvoicePerShipmentSetOrderTrue() {
+        /* Test Invoice Per Shipment
+            Step 1) Create order and set invoicePerShipment=Y
+            Step 2) Pack Shipment For Ship Group.
+            Step 3) Check invoice should be created.
+        */
+        List invoices = testInvoicePerShipment("GZ-2644", "Y")
+        assert UtilValidate.isNotEmpty(invoices)
+    }
+}
\ No newline at end of file
diff --git a/applications/accounting/testdef/invoicetests.xml b/applications/accounting/testdef/invoicetests.xml
index 09d2e5f..a3e8388 100644
--- a/applications/accounting/testdef/invoicetests.xml
+++ b/applications/accounting/testdef/invoicetests.xml
@@ -27,6 +27,6 @@
         <junit-test-suite class-name="org.apache.ofbiz.accounting.AutoInvoiceTests"/>
     </test-group>
     <test-case case-name="invoice-per-shipment-tests">
-        <simple-method-test location="component://accounting/minilang/test/InvoicePerShipmentTests.xml"/>
+        <junit-test-suite class-name="org.apache.ofbiz.accounting.InvoicePerShipmentTests"/>
     </test-case>
 </test-suite>
diff --git a/framework/service/src/main/java/org/apache/ofbiz/service/testtools/OFBizTestCase.java b/framework/service/src/main/java/org/apache/ofbiz/service/testtools/OFBizTestCase.java
index 257ae47..ca60fb7 100644
--- a/framework/service/src/main/java/org/apache/ofbiz/service/testtools/OFBizTestCase.java
+++ b/framework/service/src/main/java/org/apache/ofbiz/service/testtools/OFBizTestCase.java
@@ -19,6 +19,7 @@
 
 package org.apache.ofbiz.service.testtools;
 
+import org.apache.ofbiz.base.util.Debug;
 import org.apache.ofbiz.entity.GenericEntityException;
 import org.apache.ofbiz.entity.GenericValue;
 import org.apache.ofbiz.entity.model.DynamicViewEntity;
@@ -31,6 +32,7 @@ import java.util.Set;
 public class OFBizTestCase extends EntityTestCase {
 
     protected LocalDispatcher dispatcher = null;
+    protected String MODULE = this.getClass().getName();
 
     public LocalDispatcher getDispatcher() {
         return dispatcher;
@@ -72,4 +74,16 @@ public class OFBizTestCase extends EntityTestCase {
     protected EntityQuery select(Set<String> fields) {
         return EntityQuery.use(delegator).select(fields);
     }
+
+    protected void logInfo(String msg) {
+        Debug.logInfo(msg, MODULE);
+    }
+
+    protected void logError(String msg) {
+        Debug.logError(msg, MODULE);
+    }
+
+    protected void logWarning(String msg) {
+        Debug.logWarning(msg, MODULE);
+    }
 }