mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-03 00:23:21 +00:00
test: cover Stock Reservation Entry validations and helper
This commit is contained in:
@@ -957,3 +957,60 @@ def make_stock_reservation_entry(**args):
|
|||||||
doc.submit()
|
doc.submit()
|
||||||
|
|
||||||
return doc
|
return doc
|
||||||
|
|
||||||
|
|
||||||
|
class TestStockReservationEntryValidation(ERPNextTestSuite):
|
||||||
|
"""Field-level validations and pure helpers, exercised on the document directly so
|
||||||
|
they don't need the stock-ledger / reservation fixtures the integration tests build."""
|
||||||
|
|
||||||
|
def make_sre(self, **overrides):
|
||||||
|
doc = frappe.new_doc("Stock Reservation Entry")
|
||||||
|
doc.update(
|
||||||
|
{
|
||||||
|
"item_code": "_Test Item",
|
||||||
|
"warehouse": "_Test Warehouse - _TC",
|
||||||
|
"voucher_type": "Sales Order",
|
||||||
|
"voucher_no": "SO-TEST",
|
||||||
|
"voucher_detail_no": "SOI-TEST",
|
||||||
|
"available_qty": 10,
|
||||||
|
"voucher_qty": 10,
|
||||||
|
"stock_uom": "Nos",
|
||||||
|
"reserved_qty": 10,
|
||||||
|
"company": "_Test Company",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
doc.update(overrides)
|
||||||
|
return doc
|
||||||
|
|
||||||
|
def test_all_mandatory_fields_are_required(self):
|
||||||
|
self.make_sre().validate_mandatory() # everything set -> passes
|
||||||
|
self.assertRaises(frappe.ValidationError, self.make_sre(reserved_qty=0).validate_mandatory)
|
||||||
|
self.assertRaises(frappe.ValidationError, self.make_sre(item_code=None).validate_mandatory)
|
||||||
|
|
||||||
|
def test_amended_document_is_rejected(self):
|
||||||
|
self.assertRaises(frappe.ValidationError, self.make_sre(amended_from="SRE-0001").validate_amended_doc)
|
||||||
|
self.make_sre().validate_amended_doc() # not amended -> passes
|
||||||
|
|
||||||
|
def test_can_be_updated_guards(self):
|
||||||
|
self.make_sre().can_be_updated() # a fresh entry can be updated
|
||||||
|
self.assertRaises(frappe.ValidationError, self.make_sre(status="Delivered").can_be_updated)
|
||||||
|
self.assertRaises(frappe.ValidationError, self.make_sre(status="Partially Delivered").can_be_updated)
|
||||||
|
self.assertRaises(frappe.ValidationError, self.make_sre(from_voucher_type="Pick List").can_be_updated)
|
||||||
|
self.assertRaises(frappe.ValidationError, self.make_sre(delivered_qty=5).can_be_updated)
|
||||||
|
|
||||||
|
def test_group_warehouse_cannot_be_reserved(self):
|
||||||
|
group_wh = frappe.db.get_value("Warehouse", {"company": "_Test Company", "is_group": 1}, "name")
|
||||||
|
self.assertTrue(group_wh, "need a group warehouse for _Test Company")
|
||||||
|
self.assertRaises(frappe.ValidationError, self.make_sre(warehouse=group_wh).validate_group_warehouse)
|
||||||
|
self.make_sre().validate_group_warehouse() # leaf warehouse -> passes
|
||||||
|
|
||||||
|
def test_get_serial_batch_entries_aggregates(self):
|
||||||
|
doc = self.make_sre(reservation_based_on="Serial and Batch")
|
||||||
|
doc.append("sb_entries", {"serial_no": "SN1"})
|
||||||
|
doc.append("sb_entries", {"serial_no": "SN2"})
|
||||||
|
doc.append("sb_entries", {"batch_no": "B1", "qty": 5})
|
||||||
|
doc.append("sb_entries", {"batch_no": "B1", "qty": 3})
|
||||||
|
|
||||||
|
result = doc.get_serial_batch_entries()
|
||||||
|
self.assertEqual(result.serial_nos, ["SN1", "SN2"])
|
||||||
|
self.assertEqual(result.batches["B1"], 8)
|
||||||
|
|||||||
Reference in New Issue
Block a user