From 0e6d9863ec9f097e97baada18bbc8603b8046e34 Mon Sep 17 00:00:00 2001 From: Haresh Shyara Date: Tue, 15 Jan 2019 12:47:08 +0000 Subject: [PATCH] [IMP] purchase_requisition: improve test Create data for all tests in order to speed data test creation. We don't want the test to be demo data dependent What we are testing in this test case. -> Check that procurement is creating requisition with correct details or not. -> Check that purchase order created is consistent when we create it with supplier info. -> Two blanket orders on different 'make to order' products must generate two different purchase orders. Task ID : 1851286 closes odoo/odoo#30187 --- addons/purchase_requisition/tests/common.py | 77 ++++++++++++++----- .../tests/test_purchase_requisition.py | 25 +++--- .../tests/test_purchase_requisition_stock.py | 13 ++-- 3 files changed, 75 insertions(+), 40 deletions(-) diff --git a/addons/purchase_requisition/tests/common.py b/addons/purchase_requisition/tests/common.py index 865216d45a4..7ae6e1781d8 100644 --- a/addons/purchase_requisition/tests/common.py +++ b/addons/purchase_requisition/tests/common.py @@ -3,27 +3,66 @@ from odoo.tests import common -class TestPurchaseRequisitionCommon(common.TransactionCase): +class TestPurchaseRequisitionCommon(common.SavepointCase): - def setUp(self): - super(TestPurchaseRequisitionCommon, self).setUp() + @classmethod + def setUpClass(cls): + super(TestPurchaseRequisitionCommon, cls).setUpClass() - self.product_09_id = self.ref('product.product_product_9') - self.product_09_uom_id = self.ref('uom.product_uom_unit') - self.product_13_id = self.ref('product.product_product_13') - self.res_partner_1_id = self.ref('base.res_partner_1') - self.res_company_id = self.ref('base.main_company') - self.env.user.company_id.currency_id = self.env.ref("base.USD").id + # Fetch purchase related user groups + user_group_purchase_manager = cls.env.ref('purchase.group_purchase_manager') + user_group_purchase_user = cls.env.ref('purchase.group_purchase_user') - self.ResUser = self.env['res.users'] - # Create a user as 'Purchase Requisition Manager' - self.res_users_purchase_requisition_manager = self.ResUser.create({'company_id': self.res_company_id, 'name': 'Purchase requisition Manager', 'login': 'prm', 'email': 'requisition_manager@yourcompany.com'}) - # Added groups for Purchase Requisition Manager. - self.res_users_purchase_requisition_manager.group_id = self.ref('purchase.group_purchase_manager') - # Create a user as 'Purchase Requisition User' - self.res_users_purchase_requisition_user = self.ResUser.create({'company_id': self.res_company_id, 'name': 'Purchase requisition User', 'login': 'pru', 'email': 'requisition_user@yourcompany.com'}) - # Added groups for Purchase Requisition User. - self.res_users_purchase_requisition_user.group_id = self.ref('purchase.group_purchase_user') + # User Data: purchase requisition Manager and User + Users = cls.env['res.users'].with_context({'tracking_disable': True}) + + cls.user_purchase_requisition_manager = Users.create({ + 'name': 'Purchase requisition Manager', + 'login': 'prm', + 'email': 'requisition_manager@yourcompany.com', + 'notification_type': 'inbox', + 'groups_id': [(6, 0, [user_group_purchase_manager.id])]}) + + cls.user_purchase_requisition_user = Users.create({ + 'name': 'Purchase requisition User', + 'login': 'pru', + 'email': 'requisition_user@yourcompany.com', + 'notification_type': 'inbox', + 'groups_id': [(6, 0, [user_group_purchase_user.id])]}) + + # Create Product + cls.product_uom_id = cls.env.ref('uom.product_uom_unit') + + cls.product_09 = cls.env['product.product'].create({ + 'name': 'Pedal Bin', + 'categ_id': cls.env.ref('product.product_category_5').id, + 'standard_price': 10.0, + 'list_price': 47.0, + 'type': 'consu', + 'uom_id': cls.product_uom_id.id, + 'uom_po_id': cls.product_uom_id.id, + 'default_code': 'E-COM10', + }) + + cls.product_13 = cls.env['product.product'].create({ + 'name': 'Corner Desk Black', + 'categ_id': cls.env.ref('product.product_category_5').id, + 'standard_price': 78.0, + 'list_price': 85.0, + 'type': 'consu', + 'uom_id': cls.product_uom_id.id, + 'uom_po_id': cls.product_uom_id.id, + 'default_code': 'FURN_1118', + 'purchase_requisition': 'tenders', + }) # In order to test process of the purchase requisition ,create requisition - self.requisition1 = self.env['purchase.requisition'].create({'line_ids': [(0, 0, {'product_id': self.product_09_id, 'product_qty': 10.0, 'product_uom_id': self.product_09_uom_id})]}) + cls.requisition1 = cls.env['purchase.requisition'].create({ + 'line_ids': [(0, 0, { + 'product_id': cls.product_09.id, + 'product_qty': 10.0, + 'product_uom_id': cls.product_uom_id.id})] + }) + + cls.res_partner_1 = cls.env.ref('base.res_partner_1') + cls.env.user.company_id.currency_id = cls.env.ref("base.USD").id diff --git a/addons/purchase_requisition/tests/test_purchase_requisition.py b/addons/purchase_requisition/tests/test_purchase_requisition.py index 324d013f60f..b19aa8b1296 100644 --- a/addons/purchase_requisition/tests/test_purchase_requisition.py +++ b/addons/purchase_requisition/tests/test_purchase_requisition.py @@ -7,28 +7,27 @@ from odoo.addons.purchase_requisition.tests.common import TestPurchaseRequisitio class TestPurchaseRequisition(TestPurchaseRequisitionCommon): def test_00_purchase_requisition_users(self): - self.assertTrue(self.res_users_purchase_requisition_manager, 'Manager Should be created') - self.assertTrue(self.res_users_purchase_requisition_user, 'User Should be created') + self.assertTrue(self.user_purchase_requisition_manager, 'Manager Should be created') + self.assertTrue(self.user_purchase_requisition_user, 'User Should be created') def test_01_cancel_purchase_requisition(self): - self.requisition1.sudo(self.res_users_purchase_requisition_user.id).action_cancel() + self.requisition1.sudo(self.user_purchase_requisition_user.id).action_cancel() # Check requisition after cancelled. self.assertEqual(self.requisition1.state, 'cancel', 'Requisition should be in cancelled state.') # I reset requisition as "New". - self.requisition1.sudo(self.res_users_purchase_requisition_user.id).action_draft() + self.requisition1.sudo(self.user_purchase_requisition_user.id).action_draft() # I duplicate requisition. - self.requisition1.sudo(self.res_users_purchase_requisition_user.id).copy() + self.requisition1.sudo(self.user_purchase_requisition_user.id).copy() def test_02_purchase_requisition(self): price_product09 = 34 price_product13 = 62 quantity = 26 - # Create a pruchase requisition with type blanket order and two product - line1 = (0, 0, {'product_id': self.product_09_id, 'product_qty': quantity, 'product_uom_id': self.product_09_uom_id, 'price_unit': price_product09}) - self.product_13_uom_id = self.ref('uom.product_uom_unit') - line2 = (0, 0, {'product_id': self.product_13_id, 'product_qty': quantity, 'product_uom_id': self.product_13_uom_id, 'price_unit': price_product13}) + # Create a pruchase requisition with type blanket order and two product + line1 = (0, 0, {'product_id': self.product_09.id, 'product_qty': quantity, 'product_uom_id': self.product_uom_id.id, 'price_unit': price_product09}) + line2 = (0, 0, {'product_id': self.product_13.id, 'product_qty': quantity, 'product_uom_id': self.product_uom_id.id, 'price_unit': price_product13}) requisition_type = self.env['purchase.requisition.type'].create({ 'name': 'Blanket test', @@ -37,7 +36,7 @@ class TestPurchaseRequisition(TestPurchaseRequisitionCommon): requisition_blanket = self.env['purchase.requisition'].create({ 'line_ids': [line1, line2], 'type_id': requisition_type.id, - 'vendor_id': self.res_partner_1_id + 'vendor_id': self.res_partner_1.id, }) # confirm the requisition @@ -45,10 +44,10 @@ class TestPurchaseRequisition(TestPurchaseRequisitionCommon): # Check for both product that the new supplier info(purchase.requisition.vendor_id) is added to the puchase tab # and check the quantity - seller_partner1 = self.env['res.partner'].browse(self.res_partner_1_id) + seller_partner1 = self.res_partner_1 supplierinfo09 = self.env['product.supplierinfo'].search([ ('name', '=', seller_partner1.id), - ('product_id', '=', self.product_09_id), + ('product_id', '=', self.product_09.id), ('purchase_requisition_id', '=', requisition_blanket.id), ]) self.assertEqual(supplierinfo09.name, seller_partner1, 'The supplierinfo is not the good one') @@ -56,7 +55,7 @@ class TestPurchaseRequisition(TestPurchaseRequisitionCommon): supplierinfo13 = self.env['product.supplierinfo'].search([ ('name', '=', seller_partner1.id), - ('product_id', '=', self.product_13_id), + ('product_id', '=', self.product_13.id), ('purchase_requisition_id', '=', requisition_blanket.id), ]) self.assertEqual(supplierinfo13.name, seller_partner1, 'The supplierinfo is not the good one') diff --git a/addons/purchase_requisition_stock/tests/test_purchase_requisition_stock.py b/addons/purchase_requisition_stock/tests/test_purchase_requisition_stock.py index 2e395357592..1e1f93f4824 100644 --- a/addons/purchase_requisition_stock/tests/test_purchase_requisition_stock.py +++ b/addons/purchase_requisition_stock/tests/test_purchase_requisition_stock.py @@ -12,16 +12,13 @@ class TestPurchaseRequisitionStock(TestPurchaseRequisitionCommon): def test_01_purchase_requisition_stock(self): date_planned = fields.Datetime.now() warehouse = self.env['stock.warehouse'].browse(self.ref('stock.warehouse0')) - product = self.env['product.product'].browse(self.product_13_id) - product.write({'route_ids': [(4, self.ref('purchase_stock.route_warehouse0_buy'))]}) - self.env['procurement.group'].run(product, 14, self.env['uom.uom'].browse(self.ref('uom.product_uom_unit')), warehouse.lot_stock_id, '/', '/', + self.env['procurement.group'].run(self.product_13, 14, self.env['uom.uom'].browse(self.ref('uom.product_uom_unit')), warehouse.lot_stock_id, '/', '/', { 'warehouse_id': warehouse, 'date_planned': date_planned, }) - # Check requisition details which created after run procurement. - line = self.env['purchase.requisition.line'].search([('product_id', '=', self.product_13_id), ('product_qty', '=', 14.0)]) + line = self.env['purchase.requisition.line'].search([('product_id', '=', self.product_13.id), ('product_qty', '=', 14.0)]) requisition = line[0].requisition_id self.assertEqual(requisition.date_end, date_planned, "End date does not correspond.") self.assertEqual(len(requisition.line_ids), 1, "Requisition Lines should be one.") @@ -29,12 +26,12 @@ class TestPurchaseRequisitionStock(TestPurchaseRequisitionCommon): # Give access rights of Purchase Requisition User to open requisition # Set tender state to choose tendering line. - self.requisition1.sudo(self.res_users_purchase_requisition_user.id).action_in_progress() - self.requisition1.sudo(self.res_users_purchase_requisition_user.id).action_open() + self.requisition1.sudo(self.user_purchase_requisition_user.id).action_in_progress() + self.requisition1.sudo(self.user_purchase_requisition_user.id).action_open() # Vendor send one RFQ so I create a RfQ of that agreement. PurchaseOrder = self.env['purchase.order'] - purchase_order = PurchaseOrder.new({'partner_id': self.res_partner_1_id, 'requisition_id': self.requisition1.id}) + purchase_order = PurchaseOrder.new({'partner_id': self.res_partner_1, 'requisition_id': self.requisition1.id}) purchase_order._onchange_requisition_id() po_dict = purchase_order._convert_to_write({name: purchase_order[name] for name in purchase_order._cache}) self.po_requisition = PurchaseOrder.create(po_dict)