"""pl_cert_required_service 人员必备证书规则测试。""" from __future__ import annotations from app.services.pl_cert_required_service import ( collect_required_cert_errors, get_required_personnel_cert_names, match_required_cert_name, ) def test_match_driver_qualification_exact(): assert match_required_cert_name("驾驶员从业资格证", "驾驶员从业资格证") is True assert match_required_cert_name("从业资格证", "驾驶员从业资格证") is False assert match_required_cert_name("危化品从业资格证", "驾驶员从业资格证") is False def test_match_escort_qualification_and_alias(): assert match_required_cert_name("押运员从业资格证", "押运员从业资格证") is True assert match_required_cert_name("押运员证", "押运员从业资格证") is True assert match_required_cert_name("从业资格证", "押运员从业资格证") is False def test_required_names_by_personnel_type(): assert get_required_personnel_cert_names("driver") == ( "身份证", "驾驶证", "驾驶员从业资格证", ) assert get_required_personnel_cert_names("escort") == ( "身份证", "押运员从业资格证", ) assert get_required_personnel_cert_names("both") == ( "身份证", "驾驶证", "驾驶员从业资格证", "押运员从业资格证", ) def test_both_requires_four_certs(): cert_rows = [ {"certName": "身份证", "certNo": "1", "expireDate": "2030-01-01", "attachmentUrls": "http://a"}, {"certName": "驾驶证", "certNo": "2", "expireDate": "2030-01-01", "attachmentUrls": "http://b"}, {"certName": "驾驶员从业资格证", "certNo": "3", "expireDate": "2030-01-01", "attachmentUrls": "http://c"}, ] errors = collect_required_cert_errors( cert_rows, get_required_personnel_cert_names("both"), ) assert any("押运员从业资格证" in e for e in errors) def test_escort_alias_counts_as_complete(): cert_rows = [ {"certName": "身份证", "expireDate": "2030-01-01", "attachmentUrls": "http://a"}, {"certName": "押运员证", "expireDate": "2030-01-01", "attachmentUrls": "http://b"}, ] errors = collect_required_cert_errors( cert_rows, get_required_personnel_cert_names("escort"), ) assert errors == [] def test_cert_no_optional_for_required_slot(): cert_rows = [ {"certName": "身份证", "expireDate": "2030-01-01", "attachmentUrls": "http://a"}, {"certName": "押运员从业资格证", "expireDate": "2030-01-01", "attachmentUrls": "http://b"}, ] errors = collect_required_cert_errors( cert_rows, get_required_personnel_cert_names("escort"), ) assert errors == [] def test_attachment_optional_for_required_slot(): """证书附件非必填:有名称+有效期即可,无附件不报错。""" cert_rows = [ {"certName": "身份证", "expireDate": "2030-01-01"}, {"certName": "押运员从业资格证", "expireDate": "2030-01-01"}, ] errors = collect_required_cert_errors( cert_rows, get_required_personnel_cert_names("escort"), ) assert errors == [] assert not any("附件" in e for e in collect_required_cert_errors([], ("身份证",)))