[FIX] Fixed mrp to ensure that mrp_jit can trigger the procurement assignation proper...
authorOlivier Dony <odo@openerp.com>
Fri, 26 Feb 2010 17:32:11 +0000 (18:32 +0100)
committerOlivier Dony <odo@openerp.com>
Fri, 26 Feb 2010 17:32:11 +0000 (18:32 +0100)
Added test cases to validate the behavior with and without mrp_jit, and to prevent regressions.
Minor change to mrp_jit description.

lp bug: https://launchpad.net/bugs/522977 fixed

bzr revid: odo@openerp.com-20100226173211-cmd5842nzujih889

addons/mrp/mrp.py
addons/mrp_jit/__terp__.py
addons/mrp_jit/mrp_jit_test.xml [new file with mode: 0644]
addons/sale/__terp__.py
addons/sale/sale_test.xml [new file with mode: 0644]
addons/sale/sale_unit_test.xml [deleted file]

index 6cc0558..7cac4a8 100644 (file)
@@ -997,8 +997,7 @@ class mrp_procurement(osv.osv):
                     })
                     self.write(cr, uid, [procurement.id], {'move_id': id, 'close_move':1})
                 else:
-                    # TODO: check this
-                    if procurement.procure_method=='make_to_stock' and procurement.move_id.state in ('waiting',):
+                    if procurement.procure_method=='make_to_stock' and procurement.move_id.state in ('draft','waiting',):
                         id = self.pool.get('stock.move').write(cr, uid, [procurement.move_id.id], {'state':'confirmed'})
         self.write(cr, uid, ids, {'state':'confirmed','message':''})
         return True
index 944971b..f6fb4a3 100644 (file)
     'description': """
     This module allows Just In Time computation of all procurement.
 
-    If you install this module, you will not have to run the schedulers anymore.
-    Each document is computed in real time. Note that this module can slow down your
-    system a little bit.
+    If you install this module, you will not have to run the regular procurement 
+    scheduler anymore (but you still need to run the minimum order point rule 
+    scheduler, or for example let it run daily.)
+    All procurement orders will be processed immediately, which could in some
+    cases entail a small performance impact.
 
     It may also increase your stock size because products are reserved as soon
-    as possible. In that case, you can not use priorities any more on the different
-    picking.
+    as possible and the scheduler time range is not taken into account anymore. 
+    In that case, you can not use priorities any more on the different picking.
     """,
     'author': 'Tiny',
     'depends': ['mrp', 'sale'],
     'update_xml': ['mrp_jit.xml'],
-    'demo_xml': [],
+    'demo_xml': ['mrp_jit_test.xml'],
     'installable': True,
     'active': False,
     'certificate': '0086634760061',
diff --git a/addons/mrp_jit/mrp_jit_test.xml b/addons/mrp_jit/mrp_jit_test.xml
new file mode 100644 (file)
index 0000000..7af114f
--- /dev/null
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+    
+       <!-- ================================================================  
+                         Smoke test for sale.order process with MRP-JIT installed,
+                         based on a similar smoke test in 'sale' module.
+                         
+                          0. Verify that the virtual stock level for the products is sufficient. 
+                          1. creates a simple sale order with 2 lines, 
+                            in manual invoice mode
+                          2. confirms the sale order
+                          3. creates the invoice manually
+                          4. confirm the invoice manually
+                          5. pay the invoice and reconcile it with payment
+                          6. deliver the products
+                          7. verify that everything is done: sale.order, invoice, picking. 
+                          
+            ================================================================
+       -->
+       
+       <!-- ==== 0. CHECK VIRTUAL STOCK LEVEL ==== -->
+        <assert id="product.product_product_pc1" model="product.product" string="The virtual stock of PC1 is sufficient for the smoke test.">
+            <test expr="virtual_available &gt; 2"/>
+        </assert>
+        <assert id="product.product_product_ram512" model="product.product" string="The virtual stock of RAM512 is sufficient for the smoke test.">
+            <test expr="virtual_available &gt; 3"/>
+        </assert>
+       
+       <!-- ==== 1. CREATE SALE ORDER ==== -->  
+        <!-- Resource: sale.order -->
+        <record id="smoke_test_sale_order" model="sale.order">
+            <field name="shop_id" ref="sale.shop"/>
+            <field model="product.pricelist" name="pricelist_id" search="[]"/>
+            <field name="user_id" ref="base.user_root"/>
+            <field model="res.partner" name="partner_id" search="[]"/>
+            <field name="order_policy">manual</field> <!-- force manual invoicing -->
+            <field name="picking_policy">one</field> <!-- full delivery only -->
+            <field name="invoice_quantity">order</field> <!-- invoice based on ordered quantities -->
+            <field model="res.partner.address" name="partner_invoice_id" search="[]"/>
+            <field model="res.partner.address" name="partner_shipping_id" search="[]"/>
+            <field model="res.partner.address" name="partner_order_id" search="[]"/>
+            <field name="name">SO-SMOKE-TEST-JIT</field>
+        </record>
+        <!-- Resource: sale.order.line -->
+        <record id="smoke_test_sale_order_line_1" model="sale.order.line">
+            <field name="order_id" ref="smoke_test_sale_order"/>
+            <field name="name">[PC1] Basic PC</field>
+            <field name="product_id" ref="product.product_product_pc1"/>
+            <field name="product_uom" ref="product.product_uom_unit"/>
+            <field name="price_unit">450</field>
+            <field name="product_uom_qty">2</field>
+            <field name="product_uos_qty">2</field>
+            <field name="type">make_to_stock</field>
+        </record>
+        <record id="smoke_test_sale_order_line_3" model="sale.order.line">
+            <field name="order_id" ref="smoke_test_sale_order"/>
+            <field name="name">[RAM512] DDR 512MB PC400</field>
+            <field name="product_id" ref="product.product_product_ram512"/>
+            <field name="product_uom" ref="product.product_uom_unit"/>
+            <field name="price_unit">90</field>
+            <field name="product_uom_qty">3</field>
+            <field name="product_uos_qty">3</field>
+            <field name="type">make_to_stock</field>
+        </record>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" severity="error" string="The amount of the sale order is correctly computed">
+            <test expr="sum([l.price_subtotal for l in order_line]) == amount_untaxed"/>
+        </assert>
+        
+        
+        <!-- ==== 2. CONFIRM SALE ORDER ==== --> 
+        <workflow action="order_confirm" model="sale.order" ref="smoke_test_sale_order"/>
+
+        <assert id="smoke_test_sale_order" model="sale.order" string="the sale order is now in 'Manual in progress' state">
+            <test expr="state">manual</test>
+        </assert>
+        
+        
+        <!-- ==== 3. CREATE DRAFT INVOICE ==== --> 
+        <workflow action="manual_invoice" model="sale.order" ref="smoke_test_sale_order" uid="base.user_root"/>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" string="the sale order is now in progress">
+            <test expr="state">progress</test>
+        </assert>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" severity="fatal" string="the sale order has now a corresponding invoice">
+            <test expr="len(invoice_ids) == 1"/>
+        </assert>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" severity="fatal" string="the sale order's has the same amount and is currently draft">
+            <test expr="invoice_ids[0].amount_untaxed == amount_untaxed"/>
+            <test expr="invoice_ids[0].amount_total == amount_total"/>
+            <test expr="invoice_ids[0].state">draft</test>
+        </assert>
+
+        <!-- ==== 4. CONFIRM INVOICE ==== -->         
+        <workflow action="invoice_open" model="account.invoice">
+            <value eval="obj(ref('smoke_test_sale_order')).invoice_ids[0].id" model="sale.order"/>
+        </workflow>
+        
+        
+        <!-- ==== 5. PAY THE INVOICE AND RECONCILE ==== -->
+        <function model="account.invoice" name="pay_and_reconcile">
+            <value eval="[obj(ref('smoke_test_sale_order')).invoice_ids[0].id]" model="sale.order"/>
+            <value eval="obj(ref('smoke_test_sale_order')).amount_total" model="sale.order"/>
+            <value model="account.account" search="[('user_type.name', '=', 'Cash')]"/>
+            <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
+            <value eval="ref('account.bank_journal')"/>
+            <value model="account.account" search="[('user_type.name', '=', 'Cash')]"/>
+            <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
+            <value eval="ref('account.bank_journal')"/>
+        </function>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" severity="fatal" string="the sale order's invoice is now paid">
+            <test expr="invoice_ids[0].state">paid</test>
+        </assert>
+        
+
+               <!-- ==== VERIFY THE PICKING AND MOVES ARE ALREADY ASSIGNED (AVAILABLE) ==== -->
+               <!-- Check the state of the picking and moves -->
+        <assert id="smoke_test_sale_order" model="sale.order" severity="fatal" string="the sale order has now a corresponding packing">
+            <test expr="len(picking_ids) == 1"/>
+        </assert>
+
+        
+        <!-- SPECIFIC TO JIT  -->
+        <assert id="smoke_test_sale_order" model="sale.order" severity="error" string="the sale order's picking will be sent to the correct address and is already confirmed">
+            <test expr="picking_ids[0].address_id == partner_shipping_id"/>
+            <test expr="picking_ids[0].state">assigned</test> <!-- This is specific to JIT, it would be 'confirmed' without JIT. -->
+        </assert>
+        <assert id="smoke_test_sale_order" model="sale.order" severity="error" string="the stock moves of the picking must be confirmed">
+            <test expr="picking_ids[0].move_lines[0].state">assigned</test> <!-- This is specific to JIT, it would be 'confirmed' without JIT. -->
+        </assert>
+        
+        <!-- ==== 6. MAKE THE DELIVERY ==== -->
+        <!-- See wizard_picking_make or wizard_partial_picking in stock module. -->
+        <function model="stock.picking" name="action_move">
+            <value eval="[obj(ref('smoke_test_sale_order')).picking_ids[0].id]" model="sale.order"/>
+        </function>
+        <workflow action="button_done" model="stock.picking">
+            <value eval="obj(ref('smoke_test_sale_order')).picking_ids[0].id" model="sale.order"/>
+        </workflow>
+        
+        
+        <!-- ==== 7. VERIFY THAT EVERYTHING IS DONE ==== -->
+        <assert id="smoke_test_sale_order" model="sale.order" string="the sale order's picking is now done">
+            <test expr="picking_ids[0].state">done</test>
+        </assert>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" string="the sale order is now done">
+            <test expr="state">done</test>
+        </assert>
+    </data>
+</openerp>
index 5c1c880..05d6cc8 100644 (file)
@@ -57,7 +57,7 @@
         'stock_view.xml',
         'process/sale_process.xml',
     ],
-    'demo_xml': ['sale_demo.xml'],
+    'demo_xml': ['sale_demo.xml', 'sale_test.xml'],
     'installable': True,
     'active': False,
     'certificate': '0058103601429',
diff --git a/addons/sale/sale_test.xml b/addons/sale/sale_test.xml
new file mode 100644 (file)
index 0000000..bc80fce
--- /dev/null
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+    
+       <!-- ================================================================  
+                         Smoke test for sale.order process.
+                         
+                          0. Verify that the virtual stock level for the products is sufficient. 
+                          1. creates a simple sale order with 2 lines, 
+                            in manual invoice mode
+                          2. confirms the sale order
+                          3. creates the invoice manually
+                          4. confirm the invoice manually
+                          5. pay the invoice and reconcile it with payment
+                          6. check availability on picking list
+                          7. deliver the products
+                          8. verify that everything is done: sale.order, invoice, picking. 
+                          
+            ================================================================
+       -->
+       
+       <!-- ==== 0. CHECK VIRTUAL STOCK LEVEL ==== -->
+        <assert id="product.product_product_pc1" model="product.product" string="The virtual stock of PC1 is sufficient for the smoke test.">
+            <test expr="virtual_available &gt; 2"/>
+        </assert>
+        <assert id="product.product_product_ram512" model="product.product" string="The virtual stock of RAM512 is sufficient for the smoke test.">
+            <test expr="virtual_available &gt; 3"/>
+        </assert>
+       
+       <!-- ==== 1. CREATE SALE ORDER ==== -->  
+        <!-- Resource: sale.order -->
+        <record id="smoke_test_sale_order" model="sale.order">
+            <field name="shop_id" ref="shop"/>
+            <field model="product.pricelist" name="pricelist_id" search="[]"/>
+            <field name="user_id" ref="base.user_root"/>
+            <field model="res.partner" name="partner_id" search="[]"/>
+            <field name="order_policy">manual</field> <!-- force manual invoicing -->
+            <field name="picking_policy">one</field> <!-- full delivery only -->
+            <field name="invoice_quantity">order</field> <!-- invoice based on ordered quantities -->
+            <field model="res.partner.address" name="partner_invoice_id" search="[]"/>
+            <field model="res.partner.address" name="partner_shipping_id" search="[]"/>
+            <field model="res.partner.address" name="partner_order_id" search="[]"/>
+            <field name="name">SO-SMOKE-TEST</field>
+        </record>
+        <!-- Resource: sale.order.line -->
+        <record id="smoke_test_sale_order_line_1" model="sale.order.line">
+            <field name="order_id" ref="smoke_test_sale_order"/>
+            <field name="name">[PC1] Basic PC</field>
+            <field name="product_id" ref="product.product_product_pc1"/>
+            <field name="product_uom" ref="product.product_uom_unit"/>
+            <field name="price_unit">450</field>
+            <field name="product_uom_qty">2</field>
+            <field name="product_uos_qty">2</field>
+            <field name="type">make_to_stock</field>
+        </record>
+        <record id="smoke_test_sale_order_line_3" model="sale.order.line">
+            <field name="order_id" ref="smoke_test_sale_order"/>
+            <field name="name">[RAM512] DDR 512MB PC400</field>
+            <field name="product_id" ref="product.product_product_ram512"/>
+            <field name="product_uom" ref="product.product_uom_unit"/>
+            <field name="price_unit">90</field>
+            <field name="product_uom_qty">3</field>
+            <field name="product_uos_qty">3</field>
+            <field name="type">make_to_stock</field>
+        </record>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" severity="error" string="The amount of the sale order is correctly computed">
+            <test expr="sum([l.price_subtotal for l in order_line]) == amount_untaxed"/>
+        </assert>
+        
+        
+        <!-- ==== 2. CONFIRM SALE ORDER ==== --> 
+        <workflow action="order_confirm" model="sale.order" ref="smoke_test_sale_order"/>
+
+        <assert id="smoke_test_sale_order" model="sale.order" string="the sale order is now in 'Manual in progress' state">
+            <test expr="state">manual</test>
+        </assert>
+        
+        
+        <!-- ==== 3. CREATE DRAFT INVOICE ==== --> 
+        <workflow action="manual_invoice" model="sale.order" ref="smoke_test_sale_order" uid="base.user_root"/>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" string="the sale order is now in progress">
+            <test expr="state">progress</test>
+        </assert>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" severity="fatal" string="the sale order has now a corresponding invoice">
+            <test expr="len(invoice_ids) == 1"/>
+        </assert>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" severity="fatal" string="the sale order's has the same amount and is currently draft">
+            <test expr="invoice_ids[0].amount_untaxed == amount_untaxed"/>
+            <test expr="invoice_ids[0].amount_total == amount_total"/>
+            <test expr="invoice_ids[0].state">draft</test>
+        </assert>
+
+        <!-- ==== 4. CONFIRM INVOICE ==== -->         
+        <workflow action="invoice_open" model="account.invoice">
+            <value eval="obj(ref('smoke_test_sale_order')).invoice_ids[0].id" model="sale.order"/>
+        </workflow>
+        
+        
+        <!-- ==== 5. PAY THE INVOICE AND RECONCILE ==== -->
+        <function model="account.invoice" name="pay_and_reconcile">
+            <value eval="[obj(ref('smoke_test_sale_order')).invoice_ids[0].id]" model="sale.order"/>
+            <value eval="obj(ref('smoke_test_sale_order')).amount_total" model="sale.order"/>
+            <value model="account.account" search="[('user_type.name', '=', 'Cash')]"/>
+            <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
+            <value eval="ref('account.bank_journal')"/>
+            <value model="account.account" search="[('user_type.name', '=', 'Cash')]"/>
+            <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
+            <value eval="ref('account.bank_journal')"/>
+        </function>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" severity="fatal" string="the sale order's invoice is now paid">
+            <test expr="invoice_ids[0].state">paid</test>
+        </assert>
+        
+
+               <!-- ==== VERIFY THE PICKING AND MOVES ARE CONFIRMED ==== -->
+               <!-- Check the state of the picking and moves -->
+        <assert id="smoke_test_sale_order" model="sale.order" severity="fatal" string="the sale order has now a corresponding packing">
+            <test expr="len(picking_ids) == 1"/>
+        </assert>
+        <!-- Verify the state of the picking and its moves  -->
+        <assert id="smoke_test_sale_order" model="sale.order" severity="error" string="the sale order's picking will be sent to the correct address and is already confirmed">
+            <test expr="picking_ids[0].address_id == partner_shipping_id"/>
+            <test expr="picking_ids[0].state in ('confirmed','assigned')"/> <!-- Both values are acceptable depending if mrp-jit is installed or not -->
+        </assert>
+        <assert id="smoke_test_sale_order" model="sale.order" severity="error" string="the stock moves of the picking must be confirmed">
+            <test expr="picking_ids[0].move_lines[0].state in ('confirmed','assigned')"/> <!-- Both values are acceptable depending if mrp-jit is installed or not -->
+        </assert>
+
+               <!-- ==== 6. PICKING: CHECK AVAILABILITY  ==== -->
+        <!-- Here we need to directly call the function tag because action_assign is a method of stock_picking and not part of the workflow -->
+        <function model="stock.picking" name="action_assign">
+            <value eval="[obj(ref('smoke_test_sale_order')).picking_ids[0].id]" model="sale.order"/>
+        </function>
+        <assert id="smoke_test_sale_order" model="sale.order" severity="fatal" string="the sale order's picking is now assigned">
+            <test expr="picking_ids[0].state">assigned</test>
+        </assert>
+        
+        <!-- The above step could also be replaced by the following call to the mrp schedulers:  -->
+        <!-- <function model="mrp.procurement" name="run_scheduler"/> -->
+
+        <!-- ==== 7. MAKE THE DELIVERY ==== -->
+        <!-- See wizard_picking_make or wizard_partial_picking in stock module. -->
+        <function model="stock.picking" name="action_move">
+            <value eval="[obj(ref('smoke_test_sale_order')).picking_ids[0].id]" model="sale.order"/>
+        </function>
+        <workflow action="button_done" model="stock.picking">
+            <value eval="obj(ref('smoke_test_sale_order')).picking_ids[0].id" model="sale.order"/>
+        </workflow>
+        
+        
+        <!-- ==== 8. VERIFY THAT EVERYTHING IS DONE ==== -->
+        <assert id="smoke_test_sale_order" model="sale.order" string="the sale order's picking is now done">
+            <test expr="picking_ids[0].state">done</test>
+        </assert>
+        
+        <assert id="smoke_test_sale_order" model="sale.order" string="the sale order is now done">
+            <test expr="state">done</test>
+        </assert>
+    </data>
+</openerp>
diff --git a/addons/sale/sale_unit_test.xml b/addons/sale/sale_unit_test.xml
deleted file mode 100644 (file)
index 6f2b932..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
-    <data>
-        <!-- Resource: sale.order -->
-        <record id="test_order_1" model="sale.order">
-            <field name="shop_id" ref="shop"/>
-            <field model="product.pricelist" name="pricelist_id" search="[]"/>
-            <field name="user_id" ref="base.user_root"/>
-            <field model="res.partner" name="partner_id" search="[]"/>
-            <field model="res.partner.address" name="partner_invoice_id" search="[]"/>
-            <field model="res.partner.address" name="partner_shipping_id" search="[]"/>
-            <field model="res.partner.address" name="partner_order_id" search="[]"/>
-        </record>
-        <!-- Resource: sale.order.line -->
-        <record id="test_order_1_line_1" model="sale.order.line">
-            <field name="order_id" ref="test_order_1"/>
-            <field name="name">[PC1] Basic PC</field>
-            <field name="product_id" ref="product.product_product_pc1"/>
-            <field name="product_uom" ref="product.product_uom_unit"/>
-            <field name="price_unit">450</field>
-            <field name="product_uom_qty">2</field>
-            <field name="product_uos_qty">2</field>
-            <field name="type">make_to_stock</field>
-        </record>
-        <record id="test_order_1_line_3" model="sale.order.line">
-            <field name="order_id" ref="test_order_1"/>
-            <field name="name">[RAM512] DDR 512MB PC400</field>
-            <field name="product_id" ref="product.product_product_ram512"/>
-            <field name="product_uom" ref="product.product_uom_unit"/>
-            <field name="price_unit">90</field>
-            <field name="product_uom_qty">3</field>
-            <field name="product_uos_qty">3</field>
-            <field name="type">make_to_stock</field>
-        </record>
-        
-        <assert id="test_order_1" model="sale.order" severity="error" string="The amount of the sale order is correctly computed">
-            <test expr="sum([l.price_subtotal for l in order_line]) == amount_untaxed"/>
-        </assert>
-        
-        <workflow action="order_confirm" model="sale.order" ref="test_order_1"/>
-        
-        <assert id="test_order_1" model="sale.order" string="the sale order is now in 'Manual in progress' state">
-            <test expr="state">manual</test>
-        </assert>
-        
-        <workflow action="manual_invoice" model="sale.order" ref="test_order_1" uid="base.user_root"/>
-        
-        <assert id="test_order_1" model="sale.order" string="the sale order is now in progress">
-            <test expr="state">progress</test>
-        </assert>
-        
-        <!-- Treat generated invoice -->
-        <assert id="test_order_1" model="sale.order" severity="fatal" string="the sale order has now a corresponding invoice">
-            <test expr="len(invoice_ids) == 1"/>
-        </assert>
-        
-        <assert id="test_order_1" model="sale.order" severity="fatal" string="the sale order's has the same amount and is currently a draft">
-            <test expr="invoice_ids[0].amount_untaxed == amount_untaxed"/>
-            <test expr="invoice_ids[0].amount_total == amount_total"/>
-            <test expr="invoice_ids[0].state">draft</test>
-        </assert>
-        
-        <workflow action="invoice_open" model="account.invoice">
-            <value eval="obj(ref('test_order_1')).invoice_ids[0].id" model="sale.order"/>
-        </workflow>
-        
-        <function model="account.invoice" name="pay_and_reconcile">
-            <value eval="[obj(ref('test_order_1')).invoice_ids[0].id]" model="sale.order"/>
-            <value eval="obj(ref('test_order_1')).amount_total" model="sale.order"/>
-            <value model="account.account" search="[('type', '=', 'cash')]"/>
-            <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
-            <value eval="ref('account.bank_journal')"/>
-            <value model="account.account" search="[('type', '=', 'cash')]"/>
-            <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
-            <value eval="ref('account.bank_journal')"/>
-        </function>
-        
-        <assert id="test_order_1" model="sale.order" severity="fatal" string="the sale order's invoice is now paid">
-            <test expr="invoice_ids[0].state">paid</test>
-        </assert>
-        
-        <!-- Treat generated picking -->
-        <assert id="test_order_1" model="sale.order" severity="fatal" string="the sale order has now a correspending packing">
-            <test expr="len(picking_ids) == 1"/>
-        </assert>
-        
-        <assert id="test_order_1" model="sale.order" severity="error" string="the sale order's picking will be sent to the good address and is already confirmed">
-            <test expr="picking_ids[0].address_id == partner_shipping_id"/>
-            <!-- test expr="picking_ids[0].state">confirmed</test # Desactivated because of MRP_JIT -->
-        </assert>
-        
-        <!-- Here we need to use the function tag because action_assign is a method of stock_picking and not part of the workflow -->
-        <function model="stock.picking" name="action_assign">
-            <value eval="[obj(ref('test_order_1')).picking_ids[0].id]" model="sale.order"/>
-        </function>
-        
-        <assert id="test_order_1" model="sale.order" severity="fatal" string="the sale order's picking is now assigned">
-            <test expr="picking_ids[0].state">assigned</test>
-        </assert>
-        
-        <!-- Do the same as in wizard_partial_picking lines 143-144 -->
-        <function model="stock.picking" name="action_move">
-            <value eval="[obj(ref('test_order_1')).picking_ids[0].id]" model="sale.order"/>
-        </function>
-        
-        <workflow action="button_done" model="stock.picking">
-            <value eval="obj(ref('test_order_1')).picking_ids[0].id" model="sale.order"/>
-        </workflow>
-        
-        <assert id="test_order_1" model="sale.order" string="the sale order's picking is now done">
-            <test expr="picking_ids[0].state">done</test>
-        </assert>
-        
-        <!-- Run all schedulers -->
-        <function model="mrp.procurement" name="run_scheduler"/>
-        
-        <assert id="test_order_1" model="sale.order" string="the sale order is now done">
-            <test expr="state">done</test>
-        </assert>
-    </data>
-</openerp>