test: add test for new QI function

This commit is contained in:
Rohan Bansal 2021-06-02 14:55:31 +05:30
parent 11aff80dea
commit a06ec03efc
3 changed files with 103 additions and 56 deletions

View File

@ -504,9 +504,10 @@ class StockController(AccountsController):
@frappe.whitelist() @frappe.whitelist()
def make_quality_inspections(doctype, docname, items): def make_quality_inspections(doctype, docname, items):
items = json.loads(items).get('items') if isinstance(items, str):
inspections = [] items = json.loads(items)
inspections = []
for item in items: for item in items:
if flt(item.get("sample_size")) > flt(item.get("qty")): if flt(item.get("sample_size")) > flt(item.get("qty")):
frappe.throw(_("{item_name}'s Sample Size ({sample_size}) cannot be greater than the Accepted Quantity ({accepted_quantity})").format( frappe.throw(_("{item_name}'s Sample Size ({sample_size}) cannot be greater than the Accepted Quantity ({accepted_quantity})").format(

View File

@ -2035,7 +2035,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
args: { args: {
doctype: me.frm.doc.doctype, doctype: me.frm.doc.doctype,
docname: me.frm.doc.name, docname: me.frm.doc.name,
items: data items: data.items
}, },
freeze: true, freeze: true,
callback: function (r) { callback: function (r) {

View File

@ -1,29 +1,45 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors
# See license.txt # See license.txt
from __future__ import unicode_literals
import frappe
import unittest import unittest
import frappe
from frappe.utils import nowdate from frappe.utils import nowdate
from erpnext.stock.doctype.item.test_item import create_item
from erpnext.controllers.stock_controller import (
QualityInspectionNotSubmittedError,
QualityInspectionRejectedError,
QualityInspectionRequiredError,
make_quality_inspections,
)
from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
from erpnext.stock.doctype.item.test_item import create_item
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
from erpnext.controllers.stock_controller import QualityInspectionRejectedError, QualityInspectionRequiredError, QualityInspectionNotSubmittedError
# test_records = frappe.get_test_records('Quality Inspection') # test_records = frappe.get_test_records('Quality Inspection')
class TestQualityInspection(unittest.TestCase): class TestQualityInspection(unittest.TestCase):
def setUp(self): def setUp(self):
create_item("_Test Item with QA") create_item("_Test Item with QA")
frappe.db.set_value("Item", "_Test Item with QA", "inspection_required_before_delivery", 1) frappe.db.set_value(
"Item", "_Test Item with QA", "inspection_required_before_delivery", 1
)
def test_qa_for_delivery(self): def test_qa_for_delivery(self):
make_stock_entry(item_code="_Test Item with QA", target="_Test Warehouse - _TC", qty=1, basic_rate=100) make_stock_entry(
item_code="_Test Item with QA",
target="_Test Warehouse - _TC",
qty=1,
basic_rate=100
)
dn = create_delivery_note(item_code="_Test Item with QA", do_not_submit=True) dn = create_delivery_note(item_code="_Test Item with QA", do_not_submit=True)
self.assertRaises(QualityInspectionRequiredError, dn.submit) self.assertRaises(QualityInspectionRequiredError, dn.submit)
qa = create_quality_inspection(reference_type="Delivery Note", reference_name=dn.name, status="Rejected") qa = create_quality_inspection(
reference_type="Delivery Note", reference_name=dn.name, status="Rejected"
)
dn.reload() dn.reload()
self.assertRaises(QualityInspectionRejectedError, dn.submit) self.assertRaises(QualityInspectionRejectedError, dn.submit)
@ -38,7 +54,9 @@ class TestQualityInspection(unittest.TestCase):
def test_qa_not_submit(self): def test_qa_not_submit(self):
dn = create_delivery_note(item_code="_Test Item with QA", do_not_submit=True) dn = create_delivery_note(item_code="_Test Item with QA", do_not_submit=True)
qa = create_quality_inspection(reference_type="Delivery Note", reference_name=dn.name, do_not_submit=True) qa = create_quality_inspection(
reference_type="Delivery Note", reference_name=dn.name, do_not_submit=True
)
dn.items[0].quality_inspection = qa.name dn.items[0].quality_inspection = qa.name
self.assertRaises(QualityInspectionNotSubmittedError, dn.submit) self.assertRaises(QualityInspectionNotSubmittedError, dn.submit)
@ -48,7 +66,8 @@ class TestQualityInspection(unittest.TestCase):
def test_value_based_qi_readings(self): def test_value_based_qi_readings(self):
# Test QI based on acceptance values (Non formula) # Test QI based on acceptance values (Non formula)
dn = create_delivery_note(item_code="_Test Item with QA", do_not_submit=True) dn = create_delivery_note(item_code="_Test Item with QA", do_not_submit=True)
readings = [{ readings = [
{
"specification": "Iron Content", # numeric reading "specification": "Iron Content", # numeric reading
"min_value": 0.1, "min_value": 0.1,
"max_value": 0.9, "max_value": 0.9,
@ -59,10 +78,16 @@ class TestQualityInspection(unittest.TestCase):
"numeric": 0, "numeric": 0,
"value": "Yes", "value": "Yes",
"reading_value": "Yes" "reading_value": "Yes"
}] }
]
qa = create_quality_inspection(
reference_type="Delivery Note",
reference_name=dn.name,
readings=readings,
do_not_save=True
)
qa = create_quality_inspection(reference_type="Delivery Note", reference_name=dn.name,
readings=readings, do_not_save=True)
qa.save() qa.save()
# status must be auto set as per formula # status must be auto set as per formula
@ -74,7 +99,8 @@ class TestQualityInspection(unittest.TestCase):
def test_formula_based_qi_readings(self): def test_formula_based_qi_readings(self):
dn = create_delivery_note(item_code="_Test Item with QA", do_not_submit=True) dn = create_delivery_note(item_code="_Test Item with QA", do_not_submit=True)
readings = [{ readings = [
{
"specification": "Iron Content", # numeric reading "specification": "Iron Content", # numeric reading
"formula_based_criteria": 1, "formula_based_criteria": 1,
"acceptance_formula": "reading_1 > 0.35 and reading_1 < 0.50", "acceptance_formula": "reading_1 > 0.35 and reading_1 < 0.50",
@ -100,10 +126,16 @@ class TestQualityInspection(unittest.TestCase):
"numeric": 0, "numeric": 0,
"acceptance_formula": "reading_value in ('Grade A', 'Grade B', 'Grade C')", "acceptance_formula": "reading_value in ('Grade A', 'Grade B', 'Grade C')",
"reading_value": "Grade B" "reading_value": "Grade B"
}] }
]
qa = create_quality_inspection(
reference_type="Delivery Note",
reference_name=dn.name,
readings=readings,
do_not_save=True
)
qa = create_quality_inspection(reference_type="Delivery Note", reference_name=dn.name,
readings=readings, do_not_save=True)
qa.save() qa.save()
# status must be auto set as per formula # status must be auto set as per formula
@ -115,6 +147,19 @@ class TestQualityInspection(unittest.TestCase):
qa.delete() qa.delete()
dn.delete() dn.delete()
def test_make_quality_inspections_from_linked_document(self):
dn = create_delivery_note(item_code="_Test Item with QA", do_not_submit=True)
for item in dn.items:
item.sample_size = item.qty
quality_inspections = make_quality_inspections(dn.doctype, dn.name, dn.items)
self.assertEqual(len(dn.items), len(quality_inspections))
# cleanup
for qi in quality_inspections:
frappe.delete_doc("Quality Inspection", qi)
dn.delete()
def create_quality_inspection(**args): def create_quality_inspection(**args):
args = frappe._dict(args) args = frappe._dict(args)
qa = frappe.new_doc("Quality Inspection") qa = frappe.new_doc("Quality Inspection")
@ -150,6 +195,7 @@ def create_quality_inspection(**args):
return qa return qa
def create_quality_inspection_parameter(parameter): def create_quality_inspection_parameter(parameter):
if not frappe.db.exists("Quality Inspection Parameter", parameter): if not frappe.db.exists("Quality Inspection Parameter", parameter):
frappe.get_doc({ frappe.get_doc({