62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
"""desensitize.py 单测(A1 · DESENS-001~004,005 归前端)。"""
|
||
|
||
from app.utils.desensitize import mask_bank_card, mask_id_card, mask_name, mask_phone
|
||
|
||
|
||
class TestMaskIdCard:
|
||
def test_normal_18(self):
|
||
assert mask_id_card("110101199003071234") == "110****1234"
|
||
|
||
def test_short_overmasked(self):
|
||
# 长度不足 head+tail:整体掩码(宁多勿漏)
|
||
assert mask_id_card("123456") == "******"
|
||
|
||
def test_none_and_empty(self):
|
||
assert mask_id_card(None) == ""
|
||
assert mask_id_card("") == ""
|
||
|
||
|
||
class TestMaskPhone:
|
||
def test_normal_11(self):
|
||
assert mask_phone("13812349527") == "138****9527"
|
||
|
||
def test_boundary_7(self):
|
||
# 恰好 head+tail 长度 → 整体掩码
|
||
assert mask_phone("1234567") == "*******"
|
||
|
||
def test_boundary_8(self):
|
||
# 8 = 3+4+1,可保留头尾
|
||
assert mask_phone("12345678") == "123****5678"
|
||
|
||
|
||
class TestMaskName:
|
||
def test_keeps_surname(self):
|
||
assert mask_name("张三丰") == "张**"
|
||
assert mask_name("李四") == "李**"
|
||
|
||
def test_single_char(self):
|
||
# 单字名:姓氏 + **(规则如此,不特判)
|
||
assert mask_name("王") == "王**"
|
||
|
||
def test_none_and_empty(self):
|
||
assert mask_name(None) == ""
|
||
assert mask_name("") == ""
|
||
|
||
|
||
class TestMaskBankCard:
|
||
def test_normal_16(self):
|
||
assert mask_bank_card("6222021234561234") == "************1234"
|
||
|
||
def test_keep_last4_only(self):
|
||
masked = mask_bank_card("6222021234561234")
|
||
assert masked[-4:] == "1234"
|
||
assert set(masked[:-4]) == {"*"}
|
||
|
||
|
||
def test_short_overmasked(self):
|
||
assert mask_bank_card("123") == "***"
|
||
|
||
def test_none_and_empty(self):
|
||
assert mask_bank_card(None) == ""
|
||
assert mask_bank_card("") == ""
|