"""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("") == ""