fixed bug:308803
[odoo/odoo.git] / addons / purchase / purchase_unit_test.xml
1 <?xml version="1.0"?>
2 <openerp>
3     <data>
4         <!-- Resource: purchase.order -->
5         <!--
6                 Optional fields:
7                 'name': fields.char('Order Description', size=64, required=True, select=True),
8                 'origin': fields.char('Origin', size=64),
9                 'ref': fields.char('Order Reference', size=64),
10                 'partner_ref': fields.char('Partner Reference', size=64),
11                 'dest_address_id':fields.many2one('res.partner.address', 'Destination Address', states={'posted':[('readonly',True)]}),
12                 'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse', states={'posted':[('readonly',True)]}),
13                 'invoice_method': fields.selection([('manual','Manual'),('order','From order'),('picking','From picking')], 'Invoicing method', required=True),
14                 
15                 Mandatory fields:
16                 'pricelist_id':fields.many2one('product.pricelist', 'Pricelist', required=True, states={'confirmed':[('readonly',True)], 'approved':[('readonly',True)]}),
17                 'partner_id':fields.many2one('res.partner', 'Partner', required=True, states={'confirmed':[('readonly',True)], 'approved':[('readonly',True)]}, change_default=True),
18                 'partner_address_id':fields.many2one('res.partner.address', 'Address', required=True, states={'posted':[('readonly',True)]}),
19                 'location_id': fields.many2one('stock.location', 'Delivery destination', required=True),
20
21                 *2many relationships:
22                 'order_line': fields.one2many('purchase.order.line', 'order_id', 'Order State', states={'confirmed':[('readonly',True)], 'approved':[('readonly',True)]}),
23                 'invoice_id': fields.many2one('account.invoice', 'Invoice', readonly=True),
24                 -->
25         <record model="purchase.order" id="test_purchase_1">
26             <field name="name">Test purchase</field>
27             <field name="dest_address_id" search="[]" model="res.partner.address"/>
28             <field name="pricelist_id" ref="list0"/>
29             <field name="partner_id" search="[]" model="res.partner"/>
30             <field name="partner_address_id" search="[]" model="res.partner.address"/>
31             <field name="location_id" search="[]" model="stock.location"/>
32         </record>
33         <!-- Resource: purchase.order.line -->
34         <!--
35                 Optinal fields:
36                 'name': fields.char('Description', size=64, required=True),
37                 'product_qty': fields.float('Quantity', required=True, digits=(16,2)),
38                 'taxes_id': fields.many2many('account.tax', 'purchase_order_taxe', 'ord_id', 'tax_id', 'Taxes'),
39                 'product_uom': fields.many2one('product.uom', 'Product UOM', required=True),
40                 'notes': fields.text('Notes'),
41                 'account_analytic_id':fields.many2one('account.analytic.account', 'Analytic Account',),
42                 
43                 Mandatory fields:
44                 'date_planned': fields.date('Date Promised', required=True),
45                 'product_id': fields.many2one('product.product', 'Product', domain=[('purchase_ok','=',True)], change_default=True),
46                 'price_unit': fields.float('Unit Price', required=True, digits=(16, int(config['price_accuracy']))),
47                 'order_id': fields.many2one('purchase.order', 'Order Ref', select=True, required=True, ondelete='cascade'),
48                 -->
49         <record model="purchase.order.line" id="test_purchase_1_line_1">
50             <field name="order_id" ref="test_purchase_1"/>
51             <field name="name">[PC1] Basic PC</field>
52             <field name="date_planned" eval="time.strftime('%Y-%m-%d', time.localtime(time.time() + 2 * 86400))" />
53             <field name="product_id" ref="product.product_product_pc1"/>
54             <field name="product_uom" ref="product.product_uom_unit"/>
55             <field name="price_unit">450</field>
56             <field name="product_qty">2</field>
57         </record>
58         <record model="purchase.order.line" id="test_purchase_1_line_3">
59             <field name="order_id" ref="test_purchase_1"/>
60             <field name="name">[MB1] Mainboard ASUStek A7N8X</field>
61             <field name="date_planned" eval="time.strftime('%Y-%m-%d', time.localtime(time.time() + 2 * 86400))" />
62             <field name="product_id" ref="product.product_product_mb1"/>
63             <field name="product_uom" ref="product.product_uom_unit"/>
64             <field name="price_unit">88</field>
65             <field name="product_qty">3</field>
66         </record>
67         
68         <assert model="purchase.order" id="test_purchase_1" string="The amount of Test purchase is correctly computed" severity="error">
69             <test expr="sum([l.price_subtotal for l in order_line]) == amount_untaxed" />
70         </assert>
71         
72         <workflow model="purchase.order" ref="test_purchase_1" action="purchase_confirm" />
73         
74         <assert model="purchase.order" id="test_purchase_1" string="Test purchase is now confirmed">
75             <test expr="state">confirmed</test>
76         </assert>
77         
78         <workflow model="purchase.order" ref="test_purchase_1" action="purchase_approve" uid="base.user_root" />
79         
80         <assert model="purchase.order" id="test_purchase_1" string="Test purchase is now in progress">
81             <test expr="state">approved</test>
82         </assert>
83         
84         <!-- Treat generated invoice -->
85         <assert model="purchase.order" id="test_purchase_1" string="Test purchase has now a corresponding invoice" severity="fatal">
86             <test expr="bool(invoice_id)" />
87         </assert>
88         
89         <assert model="purchase.order" id="test_purchase_1" string="Test purchase's invoice has the same amount and is currently a draft" severity="error">
90             <test expr="invoice_id.amount_untaxed == amount_untaxed" />
91             <test expr="invoice_id.amount_total == amount_total" />
92             <test expr="invoice_id.state">draft</test>
93         </assert>
94         
95         <workflow model="account.invoice" action="invoice_open">
96             <value model="purchase.order" eval="obj(ref('test_purchase_1')).invoice_id.id" />
97         </workflow>
98         
99         <function model="account.invoice" name="pay_and_reconcile">
100             <value model="purchase.order" eval="[obj(ref('test_purchase_1')).invoice_id.id]" />
101             <value eval="1164" />
102             <value search="[('type', '=', 'cash')]" model="account.account"/>
103             <value eval="ref('account.period_' + str(int(time.strftime('%m'))))" />
104             <value eval="ref('account.bank_journal')" />
105             <value search="[('type', '=', 'cash')]" model="account.account"/>
106             <value eval="ref('account.period_' + str(int(time.strftime('%m'))))" />
107             <value eval="ref('account.bank_journal')" />
108         </function>
109         
110         <assert model="purchase.order" id="test_purchase_1" string="Test purchase's invoice is now paid" severity="error">
111             <test expr="invoice_id.state">paid</test>
112         </assert>
113         
114         <!-- Treat generated picking -->
115         <assert model="purchase.order" id="test_purchase_1" string="Test purchase has now a corresponding packing" severity="fatal">
116             <test expr="len(picking_ids) == 1" />
117         </assert>
118         
119         <assert model="purchase.order" id="test_purchase_1" string="Test purchase's packing will be sent to the good address" severity="error">
120             <test expr="picking_ids[0].address_id == partner_address_id" />
121         </assert>
122         
123         <!-- Do the same as in wizard_partial_picking lines 143-144 -->
124         <function model="stock.picking" name="action_move">
125             <value model="purchase.order" eval="[obj(ref('test_purchase_1')).picking_ids[0].id]" />
126         </function>
127         
128         <workflow model="stock.picking" action="button_done">
129             <value model="purchase.order" eval="obj(ref('test_purchase_1')).picking_ids[0].id" />
130         </workflow>
131         
132         <assert model="purchase.order" id="test_purchase_1" string="Test purchase's packing is now done" severity="error">
133             <test expr="picking_ids[0].state">done</test>
134         </assert>
135         
136         <assert model="purchase.order" id="test_purchase_1" string="Test purchase is now completed" severity="fatal">
137             <test expr="state">done</test>
138         </assert>
139     </data>
140 </openerp>
141