test_pl_personnel_cert_required.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. """pl_cert_required_service 人员必备证书规则测试。"""
  2. from __future__ import annotations
  3. from app.services.pl_cert_required_service import (
  4. collect_required_cert_errors,
  5. get_required_personnel_cert_names,
  6. match_required_cert_name,
  7. )
  8. def test_match_driver_qualification_exact():
  9. assert match_required_cert_name("驾驶员从业资格证", "驾驶员从业资格证") is True
  10. assert match_required_cert_name("从业资格证", "驾驶员从业资格证") is False
  11. assert match_required_cert_name("危化品从业资格证", "驾驶员从业资格证") is False
  12. def test_match_escort_qualification_and_alias():
  13. assert match_required_cert_name("押运员从业资格证", "押运员从业资格证") is True
  14. assert match_required_cert_name("押运员证", "押运员从业资格证") is True
  15. assert match_required_cert_name("从业资格证", "押运员从业资格证") is False
  16. def test_required_names_by_personnel_type():
  17. assert get_required_personnel_cert_names("driver") == (
  18. "身份证",
  19. "驾驶证",
  20. "驾驶员从业资格证",
  21. )
  22. assert get_required_personnel_cert_names("escort") == (
  23. "身份证",
  24. "押运员从业资格证",
  25. )
  26. assert get_required_personnel_cert_names("both") == (
  27. "身份证",
  28. "驾驶证",
  29. "驾驶员从业资格证",
  30. "押运员从业资格证",
  31. )
  32. def test_both_requires_four_certs():
  33. cert_rows = [
  34. {"certName": "身份证", "certNo": "1", "expireDate": "2030-01-01", "attachmentUrls": "http://a"},
  35. {"certName": "驾驶证", "certNo": "2", "expireDate": "2030-01-01", "attachmentUrls": "http://b"},
  36. {"certName": "驾驶员从业资格证", "certNo": "3", "expireDate": "2030-01-01", "attachmentUrls": "http://c"},
  37. ]
  38. errors = collect_required_cert_errors(
  39. cert_rows,
  40. get_required_personnel_cert_names("both"),
  41. )
  42. assert any("押运员从业资格证" in e for e in errors)
  43. def test_escort_alias_counts_as_complete():
  44. cert_rows = [
  45. {"certName": "身份证", "expireDate": "2030-01-01", "attachmentUrls": "http://a"},
  46. {"certName": "押运员证", "expireDate": "2030-01-01", "attachmentUrls": "http://b"},
  47. ]
  48. errors = collect_required_cert_errors(
  49. cert_rows,
  50. get_required_personnel_cert_names("escort"),
  51. )
  52. assert errors == []
  53. def test_cert_no_optional_for_required_slot():
  54. cert_rows = [
  55. {"certName": "身份证", "expireDate": "2030-01-01", "attachmentUrls": "http://a"},
  56. {"certName": "押运员从业资格证", "expireDate": "2030-01-01", "attachmentUrls": "http://b"},
  57. ]
  58. errors = collect_required_cert_errors(
  59. cert_rows,
  60. get_required_personnel_cert_names("escort"),
  61. )
  62. assert errors == []
  63. def test_attachment_optional_for_required_slot():
  64. """证书附件非必填:有名称+有效期即可,无附件不报错。"""
  65. cert_rows = [
  66. {"certName": "身份证", "expireDate": "2030-01-01"},
  67. {"certName": "押运员从业资格证", "expireDate": "2030-01-01"},
  68. ]
  69. errors = collect_required_cert_errors(
  70. cert_rows,
  71. get_required_personnel_cert_names("escort"),
  72. )
  73. assert errors == []
  74. assert not any("附件" in e for e in collect_required_cert_errors([], ("身份证",)))