[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
This commit is contained in:
Haresh Shyara
2019-01-17 13:00:59 +00:00
parent 826f927a1e
commit 0e6d9863ec
3 changed files with 75 additions and 40 deletions
+58 -19
View File
@@ -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
@@ -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')
@@ -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)