test: quantity handling in the supplier selection dialog

Asserts the requested quantity reaches the Purchase Order item and that rows
without a supplier, or with a quantity that is zero, negative or beyond the
pending quantity, are rejected.
This commit is contained in:
Mihir Kandoi
2026-08-01 08:38:15 +05:30
parent da83370c5c
commit 09cfd1fe91

View File

@@ -1302,7 +1302,7 @@ class TestMaterialRequest(ERPNextTestSuite):
self.assertEqual([d["item_code"] for d in items], [with_supplier, without_supplier]) self.assertEqual([d["item_code"] for d in items], [with_supplier, without_supplier])
self.assertEqual(items[0]["supplier"], "_Test Supplier") self.assertEqual(items[0]["supplier"], "_Test Supplier")
self.assertFalse(items[1]["supplier"]) self.assertFalse(items[1]["supplier"])
self.assertEqual(items[0]["qty"], 10) self.assertEqual(items[0]["pending_qty"], 10)
def test_make_purchase_order_sets_supplier(self): def test_make_purchase_order_sets_supplier(self):
mr = make_material_request_for_items(["_Test Item"]) mr = make_material_request_for_items(["_Test Item"])
@@ -1320,8 +1320,13 @@ class TestMaterialRequest(ERPNextTestSuite):
purchase_orders = make_purchase_orders_by_supplier( purchase_orders = make_purchase_orders_by_supplier(
mr.name, mr.name,
[ [
{"material_request_item": item.name, "item_code": item.item_code, "supplier": supplier} {
for item, supplier in zip(mr.items, suppliers, strict=True) "material_request_item": item.name,
"item_code": item.item_code,
"qty": qty,
"supplier": supplier,
}
for item, supplier, qty in zip(mr.items, suppliers, [10, 10, 4], strict=True)
], ],
) )
@@ -1332,18 +1337,24 @@ class TestMaterialRequest(ERPNextTestSuite):
self.assertEqual([d.item_code for d in first.items], item_codes[:2]) self.assertEqual([d.item_code for d in first.items], item_codes[:2])
self.assertEqual(second.supplier, "_Test Supplier 1") self.assertEqual(second.supplier, "_Test Supplier 1")
self.assertEqual([d.item_code for d in second.items], item_codes[2:]) self.assertEqual([d.item_code for d in second.items], item_codes[2:])
self.assertEqual(second.items[0].qty, 4)
self.assertEqual(second.items[0].stock_qty, 4)
def test_make_purchase_orders_by_supplier_without_supplier(self): def test_make_purchase_orders_by_supplier_invalid_rows(self):
from erpnext.stock.doctype.material_request.mapper import make_purchase_orders_by_supplier from erpnext.stock.doctype.material_request.mapper import make_purchase_orders_by_supplier
mr = make_material_request_for_items(["_Test Item"]) mr = make_material_request_for_items(["_Test Item"])
row = {
"material_request_item": mr.items[0].name,
"item_code": "_Test Item",
"qty": 10,
"supplier": "_Test Supplier",
}
self.assertRaises( for invalid in [{"supplier": None}, {"qty": 0}, {"qty": -5}, {"qty": 11}]:
frappe.ValidationError, self.assertRaises(
make_purchase_orders_by_supplier, frappe.ValidationError, make_purchase_orders_by_supplier, mr.name, [row | invalid]
mr.name, )
[{"material_request_item": mr.items[0].name, "item_code": "_Test Item", "supplier": None}],
)
def create_item_with_default_supplier(item_code, supplier): def create_item_with_default_supplier(item_code, supplier):