You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
8.1 KiB
83 lines
8.1 KiB
C:\Python313\Lib\site-packages\openpyxl\styles\stylesheet.py:237: UserWarning: Workbook contains no default style, apply openpyxl's default
|
|
warn("Workbook contains no default style, apply openpyxl's default")
|
|
== 联系人图谱 E2E 套件(contact-graph 票 07)== TS=098932 PFX=e2c-cg
|
|
|
|
== G-00 字典种子(W-01 销号复验)==
|
|
pass [G-00] job_title tree:一级 5(executive/purchase/marketing/hr/other)+ 二级 9 — top=['executive', 'hr', 'marketing', 'other', 'purchase'] subs=9
|
|
pass [G-00] job_title 二级 code 集全等(含 other_job 无档位) — ['bid_officer', 'chairman', 'hr_manager', 'marketing_manager', 'marketing_specialist', 'other_job', 'purchase_manager', 'purchase_specialist', 'shareholder']
|
|
pass [G-00] 档位值集(chairman/shareholder=10,*_manager=6,*_specialist/bid_officer=3,other_job=None) — {'chairman': 10, 'shareholder': 10, 'purchase_manager': 6, 'purchase_specialist': 3, 'marketing_manager': 6, 'marketing_specialist': 3, 'hr_manager': 6, 'bid_officer': 3, 'other_job': None}
|
|
pass [G-00] contact_source enabled-list:4 项(组会/组局/转介绍/其他) — ['group_activity', 'group_meeting', 'other', 'referral']
|
|
|
|
== G-01 夹具 + 图谱全量读 ==
|
|
pass [G-01] 夹具客户 A/B 就位 — A=KH202609110010 B=KH202609110011 sweep=0
|
|
pass [G-01] 首读懒建版本行:version 初值就绪且 nodes/edges 空 + DB graph 行=1 — v=0 nodes=0 edges=0 db=1
|
|
pass [G-01] quickAdd 4 行全成功(部分成功口径 successCount=4/failedRows 空) — {'successCount': 4, 'failedRows': []}
|
|
pass [G-01] detail 回读:nodes=4 level={10,6,3,None}(D1 字典联动)+ phoneMasked 脱敏 + edges 空 — lv={'c1': 10, 'c2': 6, 'c3': 3, 'c4': None} masked=True
|
|
pass [G-01] quickAdd 后版本 bump(任一行成功即 bump) — v 0 -> 1
|
|
|
|
== G-02 边 CRUD + graph/save ==
|
|
pass [G-02] save 建边 chairman>manager:返回新版本 = v+1(CAS 推进) — v=1 ret=2
|
|
pass [G-02] 回读 edges==[(1,2)] — [(753584456819802112, 753584456966602752)]
|
|
pass [G-02] save 追加边 2>3:回读 2 条 — e=[(753584456819802112, 753584456966602752), (753584456966602752, 753584457100820480)]
|
|
pass [G-02] 自连边 → 67019 — code=67019 如预期
|
|
pass [G-02] 快照内重复边(两条 1>2)→ 67019 — code=67019 如预期
|
|
pass [G-02] 等级倒挂边(3>1,lv3>lv10)→ 67019 — code=67019 如预期
|
|
pass [G-02] 未定级端点边(1>4,赵四 level=null)→ 67019 — code=67019 如预期
|
|
pass [G-02] 幽灵端点边(contactId=999…)→ 67019 — code=67019 如预期
|
|
pass [G-02] 单父违反(快照内 3 同时有父 2 与父 1)→ 67020 — code=67020 如预期
|
|
pass [G-02] 成功保存推进版本(为冲突用例制造过期) — v=3 ret=4
|
|
pass [G-02] 旧版本保存(v 已推进)→ 67018 — code=67018 如预期
|
|
pass [G-02] 空 edges 保存 = 清空:API edges==[] 且 DB customer_contact_edge=0 — api=0 db=0
|
|
pass [G-02] 恢复边 1>2,2>3:回读 2 条 — [(753584456819802112, 753584456966602752), (753584456966602752, 753584457100820480)]
|
|
|
|
== G-03 联系人增强(page/reveal/quickAdd 边界/batchEdit/export)==
|
|
pass [G-03] page(keyword 客户名):命中 4 行且 phone 全脱敏 — rows=4 mine=4
|
|
pass [G-03] reveal 返回明文 13800001003 — got=13800001003
|
|
pass [G-03] DB reveal_log 取证:operator_id=ADMIN + ip/op_time 非空 — {'operator_id': '739564171091247104', 'operator_name': '罗伟健', 'ip': '0:0:0:0:0:0:0:1', 'op_time': datetime.datetime(2026
|
|
pass [G-03] quickAdd 好行+空行:空行跳过(successCount=1/failedRows 空) — {'successCount': 1, 'failedRows': []}
|
|
pass [G-03] quickAdd 手机号已存在:不静默创建(successCount=0 + failedRows 查重明细) — {'successCount': 0, 'failedRows': [{'rowIndex': 0, 'reason': '手机号已被该客户内联系人使用:13800001003'}]}
|
|
pass [G-03] quickAdd 无手机号同姓名+同职务:疑似重复提示不创建 — {'successCount': 0, 'failedRows': [{'rowIndex': 0, 'reason': '疑似重复:该客户内已存在同姓名同职务联系人(cg098932李经理/市场经理),请确认后修改或删除该行'}]}
|
|
pass [G-03] quickAdd 行集空(不传 rows)→ 67021 — code=67021 如预期
|
|
pass [G-03] batchEdit 职务变更 D2 字典跟随:董事长/高层管理/level 10/level_source=1 — {'successCount': 1, 'failedRows': []} db={'n': '董事长', 'c': '高层管理', 'l': 10, 's': 1}
|
|
pass [G-03] batchEdit 职务联动后版本 bump — 7->8
|
|
pass [G-03] graph/save 手工定级 id4=8:DB level=8/level_source=2(手工锁定) — {'l': 8, 's': 2}
|
|
pass [G-03] D2 手工锁定:职务改市场专员但 level 保持 8 不覆盖 — {'n': '市场专员', 'l': 8, 's': 2}
|
|
pass [G-03] batchEdit phone 明文=修改(13900002003) — {'p': '13900002003'}
|
|
pass [G-03] batchEdit phone 脱敏回显形态=不改(DB 仍明文) — {'p': '13900002003'}
|
|
⚑ 登记 D-G1(P2): batchEdit「空串=清空」语义在表单绑定下不可达
|
|
warn [G-03] batchEdit phone 空串提交:实际不变(绑定层空串→null,语义缺口 D-G1) — db={'p': '13900002003'}
|
|
pass [G-03] batchEdit 原子批:任一失败零落库(id3 name 未变 + failedRows 定位 idx=1) — {'successCount': 0, 'failedRows': [{'rowIndex': 1, 'reason': '手机号须为 11 位手机号格式'}]} db={'n': 'cg098932王专员'}
|
|
pass [G-03] batchEdit 行集空 → 67022 — code=67022 如预期
|
|
pass [G-03] export:200 + xlsx 字节流(PK 头) — http=200 ct=application/vnd.openxmlformats-officedocument.spreadsheetml. head=b'PK'
|
|
|
|
== G-04 联系人导入三段式 ==
|
|
pass [G-04] template:200 + PK 头 + 表头 5 列全等(V1 锚点) — ['姓名', '职务(字典编码)', '手机号', '来源(字典编码)', '是否关键联系人(是/否)']
|
|
pass [G-04] upload 预检:t=5 insert=3 fail=2 suspect=0(无手机号=查重键缺失 FAIL) — {'taskId': '753584521315614720', 'customerId': '753584451841163264', 'importMode': 'APPEND_ONLY', 'duplicateStrategy': 'SKIP', 'totalCount': 5, 'insertCount': 3, 'updateCount': 0, 'failCount': 2, 'sus
|
|
pass [G-04] 预检明细 verdict 集含 INSERT/FAIL — ['FAIL', 'FAIL', 'INSERT', 'INSERT', 'INSERT']
|
|
pass [G-04] 表头不符文件 → 67023(预校验守门) — code=67023 如预期
|
|
pass [G-04] confirm 受理 — code=0
|
|
pass [G-04] 轮询终态 DONE:status=2 + insertCount=3 — status=2 result={'taskId': '753584521315614720', 'customerId': '753584451841163264', 'importMode': 'APPEND_ONLY', 'templateVersion': 'V1', 'status': 2, 'totalCount': 5, 'insert
|
|
pass [G-04] failures=2 行且 failReason 长度<=500(clip500) — [(4, 'cg098932导丁', '手机号须为 11 位手机号格式'), (5, 'cg098932李经理', '手机号必填(导入查重键)')]
|
|
pass [G-04] DB 执行面:customer_contact=8(4 夹具+1 quickAdd 新增+3 导入) — n=8
|
|
pass [G-04] 导入成功后图谱版本 bump(executor 收尾 bump) — 10->11
|
|
pass [G-04] 已完成任务重复 confirm → 67024(状态不允许) — code=67024 如预期
|
|
|
|
== G-05 并发冲突(同用户双 session,两标签页场景)==
|
|
pass [G-05] 双 session 读到同版本 — 11/11
|
|
pass [G-05] S 先保存成功 — code=0
|
|
pass [G-05] S2 用旧版本保存 → 67018(乐观锁冲突) — code=67018 如预期
|
|
|
|
== G-06 操作日志(contact 动作链路;graph/save 无专属 oplog)==
|
|
pass [G-06] oplog 含 CONTACT_ADD(quickAdd/导入)与 CONTACT_EDIT(batchEdit) — actions=['CONTACT_ADD', 'CONTACT_EDIT', 'CREATE']
|
|
pass [G-06] action=CONTACT_EDIT 过滤纯度 + 「批量编辑联系人【N 条】」文案 — rows=5 pure=True batchText=True
|
|
== teardown:正门 archive + DB 兜底清扫 ==
|
|
pass [TEARDOWN] 客户 A 正门 archive — code=0
|
|
pass [TEARDOWN] 客户 B 正门 archive — code=0
|
|
pass [TEARDOWN] e2c-cg-* DB 兜底清扫(contact/graph/edge/reveal_log/import_task/fail/oplog) — 客户行 2 组
|
|
|
|
== 静态对账:套件实调端点 vs 票面清单 ==
|
|
pass [SCAN] 端点覆盖 17/17(缺 0) — missing=[] extra=[]
|
|
|
|
== 汇总 == ✅57 ⚠1 ❌0 耗时 25s specimens=17
|
|
⚑ D-G1(P2) batchEdit「空串=清空」语义在表单绑定下不可达
|
|
✔ 落盘 e2e-graph-checks.json / e2e-graph-specimens.json
|
|
|