87 lines
3.0 KiB
Python
87 lines
3.0 KiB
Python
from django.test import TestCase
|
|
|
|
from apps.mtm.models import Material
|
|
from apps.qm.models import Defect
|
|
from apps.wpm.filters import WMaterialFilter
|
|
from apps.wpm.models import WMaterial
|
|
from apps.wpm.serializers import WMaterialSerializer
|
|
|
|
|
|
class WMaterialDefectGradeTests(TestCase):
|
|
@classmethod
|
|
def setUpTestData(cls):
|
|
cls.material = Material.objects.create(name="缺陷等级测试物料")
|
|
cls.defect_b = Defect.objects.create(
|
|
name="B类缺陷",
|
|
cate=Defect.cate_list[0],
|
|
okcate=Defect.DEFECT_OK_B,
|
|
)
|
|
cls.defect_notok = Defect.objects.create(
|
|
name="不合格缺陷",
|
|
cate=Defect.cate_list[0],
|
|
okcate=Defect.DEFECT_NOTOK,
|
|
)
|
|
cls.repair_without_defect = WMaterial.objects.create(
|
|
material=cls.material,
|
|
batch="REPAIR-NONE",
|
|
count=1,
|
|
state=WMaterial.WM_REPAIR,
|
|
)
|
|
cls.normal_with_notok_defect = WMaterial.objects.create(
|
|
material=cls.material,
|
|
batch="NORMAL-NOTOK",
|
|
count=1,
|
|
state=WMaterial.WM_OK,
|
|
defect=cls.defect_notok,
|
|
)
|
|
cls.notok_with_b_defect = WMaterial.objects.create(
|
|
material=cls.material,
|
|
batch="NOTOK-B",
|
|
count=1,
|
|
state=WMaterial.WM_NOTOK,
|
|
defect=cls.defect_b,
|
|
)
|
|
cls.notok_with_legacy_sign = WMaterial.objects.create(
|
|
material=cls.material,
|
|
batch="NOTOK-LEGACY",
|
|
count=1,
|
|
state=WMaterial.WM_NOTOK,
|
|
notok_sign="zw",
|
|
)
|
|
|
|
def test_serializer_uses_effective_grade_independent_of_state(self):
|
|
repair_data = WMaterialSerializer(self.repair_without_defect).data
|
|
notok_data = WMaterialSerializer(
|
|
self.normal_with_notok_defect
|
|
).data
|
|
b_data = WMaterialSerializer(self.notok_with_b_defect).data
|
|
legacy_data = WMaterialSerializer(self.notok_with_legacy_sign).data
|
|
|
|
self.assertEqual(repair_data["defect_grade"], Defect.DEFECT_OK)
|
|
self.assertEqual(repair_data["defect_grade_name"], "合格")
|
|
self.assertEqual(notok_data["defect_grade"], Defect.DEFECT_NOTOK)
|
|
self.assertEqual(b_data["defect_grade"], Defect.DEFECT_OK_B)
|
|
self.assertEqual(legacy_data["defect_grade"], Defect.DEFECT_NOTOK)
|
|
|
|
def test_effective_grade_filter_matches_serializer_rules(self):
|
|
ok_items = WMaterialFilter(
|
|
{"defect_grade": Defect.DEFECT_OK},
|
|
queryset=WMaterial.objects.all(),
|
|
).qs
|
|
notok_items = WMaterialFilter(
|
|
{"defect_grade": Defect.DEFECT_NOTOK},
|
|
queryset=WMaterial.objects.all(),
|
|
).qs
|
|
|
|
self.assertCountEqual(
|
|
ok_items.values_list("id", flat=True),
|
|
[self.repair_without_defect.id],
|
|
)
|
|
self.assertCountEqual(
|
|
notok_items.values_list("id", flat=True),
|
|
[
|
|
self.normal_with_notok_defect.id,
|
|
self.notok_with_legacy_sign.id,
|
|
],
|
|
)
|