test_production_waste_output.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. """生产废弃物列表:产出类型解析与关键字匹配语义。"""
  2. import unittest
  3. from app.crud.production_waste_output import (
  4. WASTE_OUTPUT_TYPE_CODE,
  5. WASTE_OUTPUT_TYPE_NAME,
  6. match_waste_output_keyword,
  7. pick_waste_output_type_ids,
  8. )
  9. class TestPickWasteOutputTypeIds(unittest.TestCase):
  10. def test_prefers_type_code_fqw(self):
  11. rows = [
  12. {"id": "a", "type_code": "YXW", "type_name": "有效物"},
  13. {"id": "b", "type_code": "FQW", "type_name": "废弃物"},
  14. {"id": "c", "type_code": "", "type_name": "废弃物"},
  15. ]
  16. self.assertEqual(pick_waste_output_type_ids(rows), {"b"})
  17. def test_fallback_type_name_when_no_fqw(self):
  18. rows = [
  19. {"id": "a", "type_code": "YXW", "type_name": "有效物"},
  20. {"id": "c", "type_code": "", "type_name": "废弃物"},
  21. {"id": "d", "type_code": None, "type_name": "废弃物"},
  22. ]
  23. self.assertEqual(pick_waste_output_type_ids(rows), {"c", "d"})
  24. def test_empty_when_no_match(self):
  25. self.assertEqual(pick_waste_output_type_ids([]), set())
  26. self.assertEqual(
  27. pick_waste_output_type_ids([{"id": "a", "type_code": "YXW", "type_name": "有效物"}]),
  28. set(),
  29. )
  30. class TestMatchWasteOutputKeyword(unittest.TestCase):
  31. def test_matches_name_or_barcode(self):
  32. self.assertTrue(match_waste_output_keyword("废液", "废液A", "X1"))
  33. self.assertTrue(match_waste_output_keyword("X1", "废液", "BX1Y"))
  34. self.assertFalse(match_waste_output_keyword("zzz", "废液", "X1"))
  35. def test_blank_keyword_always_true(self):
  36. self.assertTrue(match_waste_output_keyword("", "废液", ""))
  37. self.assertTrue(match_waste_output_keyword(None, "", ""))
  38. class TestConstants(unittest.TestCase):
  39. def test_constants(self):
  40. self.assertEqual(WASTE_OUTPUT_TYPE_CODE, "FQW")
  41. self.assertEqual(WASTE_OUTPUT_TYPE_NAME, "废弃物")
  42. if __name__ == "__main__":
  43. unittest.main()