90 lines
3.3 KiB
Python
90 lines
3.3 KiB
Python
"""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([], ("身份证",)))
|