test: disassembly for scrap / secondary item

(cherry picked from commit a6d41151ff)
This commit is contained in:
Smit Vora
2026-04-01 16:17:00 +05:30
committed by Mergify
parent 229dc23f97
commit 20f81516cf

View File

@@ -2503,7 +2503,8 @@ class TestWorkOrder(FrappeTestCase):
def test_disassembly_with_multiple_manufacture_entries(self): def test_disassembly_with_multiple_manufacture_entries(self):
""" """
Test that disassembly does not create duplicate items when manufacturing Test that disassembly does not create duplicate items when manufacturing
is done in multiple batches (multiple manufacture stock entries). is done in multiple batches (multiple manufacture stock entries), including
secondary/scrap items.
Scenario: Scenario:
1. Create Work Order for 10 units 1. Create Work Order for 10 units
@@ -2512,11 +2513,19 @@ class TestWorkOrder(FrappeTestCase):
4. Create Disassembly for 4 units 4. Create Disassembly for 4 units
5. Verify no duplicate items in the disassembly stock entry 5. Verify no duplicate items in the disassembly stock entry
""" """
# Create RM and FG item # Create RM, scrap and FG item
raw_item1 = make_item("Test Raw for Multi Batch Disassembly 1", {"is_stock_item": 1}).name raw_item1 = make_item("Test Raw for Multi Batch Disassembly 1", {"is_stock_item": 1}).name
raw_item2 = make_item("Test Raw for Multi Batch Disassembly 2", {"is_stock_item": 1}).name raw_item2 = make_item("Test Raw for Multi Batch Disassembly 2", {"is_stock_item": 1}).name
scrap_item = make_item("Test Scrap for Multi Batch Disassembly", {"is_stock_item": 1}).name
fg_item = make_item("Test FG for Multi Batch Disassembly", {"is_stock_item": 1}).name fg_item = make_item("Test FG for Multi Batch Disassembly", {"is_stock_item": 1}).name
bom = make_bom(item=fg_item, quantity=1, raw_materials=[raw_item1, raw_item2], rm_qty=2) bom = make_bom(
item=fg_item,
quantity=1,
raw_materials=[raw_item1, raw_item2],
rm_qty=2,
scrap_items=[scrap_item],
scrap_qty=10,
)
# Create WO # Create WO
wo = make_wo_order_test_record(production_item=fg_item, qty=10, bom_no=bom.name, status="Not Started") wo = make_wo_order_test_record(production_item=fg_item, qty=10, bom_no=bom.name, status="Not Started")
@@ -2591,7 +2600,7 @@ class TestWorkOrder(FrappeTestCase):
f"Found duplicate items in disassembly stock entry: {duplicates}", f"Found duplicate items in disassembly stock entry: {duplicates}",
) )
expected_items = 3 # FG item + 2 raw materials expected_items = 4 # FG item + 2 raw materials + 1 scrap item
self.assertEqual( self.assertEqual(
len(stock_entry.items), len(stock_entry.items),
expected_items, expected_items,
@@ -2602,6 +2611,15 @@ class TestWorkOrder(FrappeTestCase):
fg_item_row = next((i for i in stock_entry.items if i.item_code == fg_item), None) fg_item_row = next((i for i in stock_entry.items if i.item_code == fg_item), None)
self.assertEqual(fg_item_row.qty, disassemble_qty) self.assertEqual(fg_item_row.qty, disassemble_qty)
# Secondary/Scrap item: should be taken from scrap warehouse in disassembly
scrap_row = next((i for i in stock_entry.items if i.item_code == scrap_item), None)
self.assertIsNotNone(scrap_row)
self.assertEqual(scrap_row.type, "Scrap")
self.assertTrue(scrap_row.s_warehouse)
self.assertFalse(scrap_row.t_warehouse)
self.assertEqual(scrap_row.s_warehouse, wo.scrap_warehouse)
self.assertEqual(scrap_row.qty, 40)
# RM quantities # RM quantities
for bom_item in bom.items: for bom_item in bom.items:
expected_qty = (bom_item.qty / bom.quantity) * disassemble_qty expected_qty = (bom_item.qty / bom.quantity) * disassemble_qty