75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
|
|
import datetime as dt
|
|
|
|
from trytond.modules.company.tests import create_company, set_company
|
|
from trytond.modules.party.tests import PartyCheckReplaceMixin
|
|
from trytond.pool import Pool
|
|
from trytond.tests.test_tryton import ModuleTestCase, with_transaction
|
|
|
|
|
|
class PurchaseRequestTestCase(PartyCheckReplaceMixin, ModuleTestCase):
|
|
'Test Purchase Request module'
|
|
module = 'purchase_request'
|
|
|
|
@with_transaction()
|
|
def test_find_best_product_supplier(self):
|
|
"Test finding best product supplier"
|
|
pool = Pool()
|
|
ProductTemplate = pool.get('product.template')
|
|
Product = pool.get('product.product')
|
|
ProductSupplier = pool.get('purchase.product_supplier')
|
|
Party = pool.get('party.party')
|
|
UoM = pool.get('product.uom')
|
|
PurchaseRequest = pool.get('purchase.request')
|
|
Date = pool.get('ir.date')
|
|
|
|
supplier = Party(name="Supplier")
|
|
supplier.save()
|
|
|
|
company = create_company()
|
|
with set_company(company):
|
|
unit, = UoM.search([('name', '=', "Unit")])
|
|
template = ProductTemplate(name="Product")
|
|
template.purchasable = True
|
|
template.default_uom = unit
|
|
template.purchase_uom = unit
|
|
template.save()
|
|
product = Product(template=template)
|
|
product.save()
|
|
|
|
product_supplier1 = ProductSupplier(
|
|
template=template, party=supplier,
|
|
lead_time=dt.timedelta(days=5))
|
|
product_supplier1.save()
|
|
product_supplier2 = ProductSupplier(
|
|
template=template, party=supplier,
|
|
lead_time=dt.timedelta(days=2))
|
|
product_supplier2.save()
|
|
product_supplier3 = ProductSupplier(
|
|
template=template, party=supplier,
|
|
lead_time=dt.timedelta(days=3))
|
|
product_supplier3.save()
|
|
|
|
today = Date.today()
|
|
for date, product_supplier in [
|
|
(None, product_supplier1),
|
|
(today, product_supplier2),
|
|
(today + dt.timedelta(days=1), product_supplier2),
|
|
(today + dt.timedelta(days=2), product_supplier2),
|
|
(today + dt.timedelta(days=3), product_supplier2),
|
|
(today + dt.timedelta(days=4), product_supplier2),
|
|
(today + dt.timedelta(days=5), product_supplier1),
|
|
(dt.date.max, product_supplier1),
|
|
(dt.date.min, product_supplier2),
|
|
]:
|
|
with self.subTest(date=date):
|
|
self.assertEqual(
|
|
PurchaseRequest.find_best_product_supplier(
|
|
product, date),
|
|
product_supplier)
|
|
|
|
|
|
del ModuleTestCase
|