test: simplify job card tests
This commit is contained in:
parent
dac678e3fc
commit
e625394488
@ -1,6 +1,9 @@
|
|||||||
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
|
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
# See license.txt
|
# See license.txt
|
||||||
|
|
||||||
|
|
||||||
|
from typing import Literal
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.tests.utils import FrappeTestCase
|
from frappe.tests.utils import FrappeTestCase
|
||||||
from frappe.utils import random_string
|
from frappe.utils import random_string
|
||||||
@ -17,34 +20,36 @@ from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
|
|||||||
class TestJobCard(FrappeTestCase):
|
class TestJobCard(FrappeTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
make_bom_for_jc_tests()
|
make_bom_for_jc_tests()
|
||||||
|
self.transfer_material_against: Literal["Work Order", "Job Card"] = "Work Order"
|
||||||
|
self.source_warehouse = None
|
||||||
|
self._work_order = None
|
||||||
|
|
||||||
transfer_material_against, source_warehouse = None, None
|
@property
|
||||||
|
def work_order(self):
|
||||||
tests_that_skip_setup = ("test_job_card_material_transfer_correctness",)
|
"""Work Order lazily created for tests."""
|
||||||
tests_that_transfer_against_jc = (
|
if not self._work_order:
|
||||||
"test_job_card_multiple_materials_transfer",
|
self._work_order = make_wo_order_test_record(
|
||||||
"test_job_card_excess_material_transfer",
|
|
||||||
"test_job_card_partial_material_transfer",
|
|
||||||
)
|
|
||||||
|
|
||||||
if self._testMethodName in tests_that_skip_setup:
|
|
||||||
return
|
|
||||||
|
|
||||||
if self._testMethodName in tests_that_transfer_against_jc:
|
|
||||||
transfer_material_against = "Job Card"
|
|
||||||
source_warehouse = "Stores - _TC"
|
|
||||||
|
|
||||||
self.work_order = make_wo_order_test_record(
|
|
||||||
item="_Test FG Item 2",
|
item="_Test FG Item 2",
|
||||||
qty=2,
|
qty=2,
|
||||||
transfer_material_against=transfer_material_against,
|
transfer_material_against=self.transfer_material_against,
|
||||||
source_warehouse=source_warehouse,
|
source_warehouse=self.source_warehouse,
|
||||||
|
)
|
||||||
|
return self._work_order
|
||||||
|
|
||||||
|
def generate_required_stock(self, work_order: WorkOrder) -> None:
|
||||||
|
"""Create twice the stock for all required items in work order."""
|
||||||
|
for item in work_order.required_items:
|
||||||
|
make_stock_entry(
|
||||||
|
item_code=item.item_code,
|
||||||
|
target=item.source_warehouse or self.source_warehouse,
|
||||||
|
qty=item.required_qty * 2,
|
||||||
|
basic_rate=100,
|
||||||
)
|
)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
frappe.db.rollback()
|
frappe.db.rollback()
|
||||||
|
|
||||||
def test_job_card(self):
|
def test_job_card_operations(self):
|
||||||
|
|
||||||
job_cards = frappe.get_all(
|
job_cards = frappe.get_all(
|
||||||
"Job Card", filters={"work_order": self.work_order.name}, fields=["operation_id", "name"]
|
"Job Card", filters={"work_order": self.work_order.name}, fields=["operation_id", "name"]
|
||||||
@ -58,9 +63,6 @@ class TestJobCard(FrappeTestCase):
|
|||||||
doc.operation_id = "Test Data"
|
doc.operation_id = "Test Data"
|
||||||
self.assertRaises(OperationMismatchError, doc.save)
|
self.assertRaises(OperationMismatchError, doc.save)
|
||||||
|
|
||||||
for d in job_cards:
|
|
||||||
frappe.delete_doc("Job Card", d.name)
|
|
||||||
|
|
||||||
def test_job_card_with_different_work_station(self):
|
def test_job_card_with_different_work_station(self):
|
||||||
job_cards = frappe.get_all(
|
job_cards = frappe.get_all(
|
||||||
"Job Card",
|
"Job Card",
|
||||||
@ -96,19 +98,11 @@ class TestJobCard(FrappeTestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(completed_qty, job_card.for_quantity)
|
self.assertEqual(completed_qty, job_card.for_quantity)
|
||||||
|
|
||||||
doc.cancel()
|
|
||||||
|
|
||||||
for d in job_cards:
|
|
||||||
frappe.delete_doc("Job Card", d.name)
|
|
||||||
|
|
||||||
def test_job_card_overlap(self):
|
def test_job_card_overlap(self):
|
||||||
wo2 = make_wo_order_test_record(item="_Test FG Item 2", qty=2)
|
wo2 = make_wo_order_test_record(item="_Test FG Item 2", qty=2)
|
||||||
|
|
||||||
jc1_name = frappe.db.get_value("Job Card", {"work_order": self.work_order.name})
|
jc1 = frappe.get_last_doc("Job Card", {"work_order": self.work_order.name})
|
||||||
jc2_name = frappe.db.get_value("Job Card", {"work_order": wo2.name})
|
jc2 = frappe.get_last_doc("Job Card", {"work_order": wo2.name})
|
||||||
|
|
||||||
jc1 = frappe.get_doc("Job Card", jc1_name)
|
|
||||||
jc2 = frappe.get_doc("Job Card", jc2_name)
|
|
||||||
|
|
||||||
employee = "_T-Employee-00001" # from test records
|
employee = "_T-Employee-00001" # from test records
|
||||||
|
|
||||||
@ -137,10 +131,10 @@ class TestJobCard(FrappeTestCase):
|
|||||||
|
|
||||||
def test_job_card_multiple_materials_transfer(self):
|
def test_job_card_multiple_materials_transfer(self):
|
||||||
"Test transferring RMs separately against Job Card with multiple RMs."
|
"Test transferring RMs separately against Job Card with multiple RMs."
|
||||||
make_stock_entry(item_code="_Test Item", target="Stores - _TC", qty=10, basic_rate=100)
|
self.transfer_material_against = "Job Card"
|
||||||
make_stock_entry(
|
self.source_warehouse = "Stores - _TC"
|
||||||
item_code="_Test Item Home Desktop Manufactured", target="Stores - _TC", qty=6, basic_rate=100
|
|
||||||
)
|
self.generate_required_stock(self.work_order)
|
||||||
|
|
||||||
job_card_name = frappe.db.get_value("Job Card", {"work_order": self.work_order.name})
|
job_card_name = frappe.db.get_value("Job Card", {"work_order": self.work_order.name})
|
||||||
job_card = frappe.get_doc("Job Card", job_card_name)
|
job_card = frappe.get_doc("Job Card", job_card_name)
|
||||||
@ -167,22 +161,21 @@ class TestJobCard(FrappeTestCase):
|
|||||||
|
|
||||||
def test_job_card_excess_material_transfer(self):
|
def test_job_card_excess_material_transfer(self):
|
||||||
"Test transferring more than required RM against Job Card."
|
"Test transferring more than required RM against Job Card."
|
||||||
make_stock_entry(item_code="_Test Item", target="Stores - _TC", qty=25, basic_rate=100)
|
self.transfer_material_against = "Job Card"
|
||||||
make_stock_entry(
|
self.source_warehouse = "Stores - _TC"
|
||||||
item_code="_Test Item Home Desktop Manufactured", target="Stores - _TC", qty=15, basic_rate=100
|
|
||||||
)
|
|
||||||
|
|
||||||
job_card_name = frappe.db.get_value("Job Card", {"work_order": self.work_order.name})
|
self.generate_required_stock(self.work_order)
|
||||||
job_card = frappe.get_doc("Job Card", job_card_name)
|
|
||||||
|
job_card = frappe.get_last_doc("Job Card", {"work_order": self.work_order.name})
|
||||||
self.assertEqual(job_card.status, "Open")
|
self.assertEqual(job_card.status, "Open")
|
||||||
|
|
||||||
# fully transfer both RMs
|
# fully transfer both RMs
|
||||||
transfer_entry_1 = make_stock_entry_from_jc(job_card_name)
|
transfer_entry_1 = make_stock_entry_from_jc(job_card.name)
|
||||||
transfer_entry_1.insert()
|
transfer_entry_1.insert()
|
||||||
transfer_entry_1.submit()
|
transfer_entry_1.submit()
|
||||||
|
|
||||||
# transfer extra qty of both RM due to previously damaged RM
|
# transfer extra qty of both RM due to previously damaged RM
|
||||||
transfer_entry_2 = make_stock_entry_from_jc(job_card_name)
|
transfer_entry_2 = make_stock_entry_from_jc(job_card.name)
|
||||||
# deliberately change 'For Quantity'
|
# deliberately change 'For Quantity'
|
||||||
transfer_entry_2.fg_completed_qty = 1
|
transfer_entry_2.fg_completed_qty = 1
|
||||||
transfer_entry_2.items[0].qty = 5
|
transfer_entry_2.items[0].qty = 5
|
||||||
@ -195,7 +188,7 @@ class TestJobCard(FrappeTestCase):
|
|||||||
|
|
||||||
# Check if 'For Quantity' is negative
|
# Check if 'For Quantity' is negative
|
||||||
# as 'transferred_qty' > Qty to Manufacture
|
# as 'transferred_qty' > Qty to Manufacture
|
||||||
transfer_entry_3 = make_stock_entry_from_jc(job_card_name)
|
transfer_entry_3 = make_stock_entry_from_jc(job_card.name)
|
||||||
self.assertEqual(transfer_entry_3.fg_completed_qty, 0)
|
self.assertEqual(transfer_entry_3.fg_completed_qty, 0)
|
||||||
|
|
||||||
job_card.append(
|
job_card.append(
|
||||||
@ -210,17 +203,15 @@ class TestJobCard(FrappeTestCase):
|
|||||||
|
|
||||||
def test_job_card_partial_material_transfer(self):
|
def test_job_card_partial_material_transfer(self):
|
||||||
"Test partial material transfer against Job Card"
|
"Test partial material transfer against Job Card"
|
||||||
|
self.transfer_material_against = "Job Card"
|
||||||
|
self.source_warehouse = "Stores - _TC"
|
||||||
|
|
||||||
make_stock_entry(item_code="_Test Item", target="Stores - _TC", qty=25, basic_rate=100)
|
self.generate_required_stock(self.work_order)
|
||||||
make_stock_entry(
|
|
||||||
item_code="_Test Item Home Desktop Manufactured", target="Stores - _TC", qty=15, basic_rate=100
|
|
||||||
)
|
|
||||||
|
|
||||||
job_card_name = frappe.db.get_value("Job Card", {"work_order": self.work_order.name})
|
job_card = frappe.get_last_doc("Job Card", {"work_order": self.work_order.name})
|
||||||
job_card = frappe.get_doc("Job Card", job_card_name)
|
|
||||||
|
|
||||||
# partially transfer
|
# partially transfer
|
||||||
transfer_entry = make_stock_entry_from_jc(job_card_name)
|
transfer_entry = make_stock_entry_from_jc(job_card.name)
|
||||||
transfer_entry.fg_completed_qty = 1
|
transfer_entry.fg_completed_qty = 1
|
||||||
transfer_entry.get_items()
|
transfer_entry.get_items()
|
||||||
transfer_entry.insert()
|
transfer_entry.insert()
|
||||||
@ -232,7 +223,7 @@ class TestJobCard(FrappeTestCase):
|
|||||||
self.assertEqual(transfer_entry.items[1].qty, 3)
|
self.assertEqual(transfer_entry.items[1].qty, 3)
|
||||||
|
|
||||||
# transfer remaining
|
# transfer remaining
|
||||||
transfer_entry_2 = make_stock_entry_from_jc(job_card_name)
|
transfer_entry_2 = make_stock_entry_from_jc(job_card.name)
|
||||||
|
|
||||||
self.assertEqual(transfer_entry_2.fg_completed_qty, 1)
|
self.assertEqual(transfer_entry_2.fg_completed_qty, 1)
|
||||||
self.assertEqual(transfer_entry_2.items[0].qty, 5)
|
self.assertEqual(transfer_entry_2.items[0].qty, 5)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user