[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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user