[FIX] product: reference in test
[odoo/odoo.git] / addons / product / tests / test_pricelist.py
1 from openerp.tests.common import TransactionCase
2
3 class TestPricelist(TransactionCase):
4     """Tests for unit of measure conversion"""
5
6     def setUp(self):
7         super(TestPricelist, self).setUp()
8         cr, uid, context = self.cr, self.uid, {}
9         self.ir_model_data = self.registry('ir.model.data')
10         self.product_product = self.registry('product.product')
11         self.product_pricelist = self.registry('product.pricelist')
12         self.uom = self.registry('product.uom')
13
14         self.usb_adapter_id = self.ir_model_data.get_object_reference(cr, uid, 'product', 'product_product_48')[1]
15         self.datacard_id = self.ir_model_data.get_object_reference(cr, uid, 'product', 'product_product_46')[1]
16         self.unit_id = self.ir_model_data.get_object_reference(cr, uid, 'product', 'product_uom_unit')[1]
17         self.dozen_id = self.ir_model_data.get_object_reference(cr, uid, 'product', 'product_uom_dozen')[1]
18
19         self.public_pricelist_id = self.ir_model_data.get_object_reference(cr, uid, 'product', 'list0')[1]
20         self.sale_pricelist_id = self.product_pricelist.create(cr, uid, {
21             'name': 'Sale pricelist',
22             'type': 'sale',
23             'version_id': [(0, 0, {
24                 'name': 'v1.0',
25                 'items_id': [(0, 0, {
26                     'name': 'Discount 10%',
27                     'base': 1, # based on public price
28                     'price_discount': -0.1,
29                     'product_id': self.usb_adapter_id
30                 }), (0, 0, {
31                     'name': 'Discount -0.5',
32                     'base': 1, # based on public price
33                     'price_surcharge': -0.5,
34                     'product_id': self.datacard_id
35                 })]
36             })]
37         }, context=context)
38
39     def test_10_discount(self):
40         # Make sure the price using a pricelist is the same than without after
41         # applying the computation manually
42         cr, uid, context = self.cr, self.uid, {}
43
44         public_context = dict(context, pricelist=self.public_pricelist_id)
45         pricelist_context = dict(context, pricelist=self.sale_pricelist_id)
46
47         usb_adapter_without_pricelist = self.product_product.browse(cr, uid, self.usb_adapter_id, context=public_context)
48         usb_adapter_with_pricelist = self.product_product.browse(cr, uid, self.usb_adapter_id, context=pricelist_context)
49         self.assertEqual(usb_adapter_with_pricelist.price, usb_adapter_without_pricelist.price*0.9)
50
51         datacard_without_pricelist = self.product_product.browse(cr, uid, self.datacard_id, context=public_context)
52         datacard_with_pricelist = self.product_product.browse(cr, uid, self.datacard_id, context=pricelist_context)
53         self.assertEqual(datacard_with_pricelist.price, datacard_without_pricelist.price-0.5)
54
55         # Make sure that changing the unit of measure does not break the unit
56         # price (after converting)
57         unit_context = dict(context,
58             pricelist=self.sale_pricelist_id,
59             uom=self.unit_id)
60         dozen_context = dict(context,
61             pricelist=self.sale_pricelist_id,
62             uom=self.dozen_id)
63
64         usb_adapter_unit = self.product_product.browse(cr, uid, self.usb_adapter_id, context=unit_context)
65         usb_adapter_dozen = self.product_product.browse(cr, uid, self.usb_adapter_id, context=dozen_context)
66         self.assertAlmostEqual(usb_adapter_unit.price*12, usb_adapter_dozen.price)
67
68         datacard_unit = self.product_product.browse(cr, uid, self.datacard_id, context=unit_context)
69         datacard_dozen = self.product_product.browse(cr, uid, self.datacard_id, context=dozen_context)
70         self.assertAlmostEqual(datacard_unit.price*12, datacard_dozen.price)