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.
 
 
 
 
 

352 lines
10 KiB

[
{
"flow": "SETUP",
"case": "华南销售部 leader=admin",
"verdict": "✅",
"detail": ""
},
{
"flow": "SETUP",
"case": "seed 销售甲(华南销售部/在职/启用)",
"verdict": "✅",
"detail": "id=760000000000000001"
},
{
"flow": "SETUP",
"case": "甲乙丙 assign→BUDDY",
"verdict": "✅",
"detail": ""
},
{
"flow": "F-13",
"case": "preview 圈定 3 条(甲乙丙+残留)",
"verdict": "✅",
"detail": "实际 3 条"
},
{
"flow": "F-13",
"case": "initiate reason 缺失 → 67011",
"verdict": "✅",
"detail": "code=67011 如预期"
},
{
"flow": "F-13",
"case": "toDirectorId 不在可交接范围 → 67011",
"verdict": "✅",
"detail": "code=67011 如预期"
},
{
"flow": "F-13",
"case": "initiate resign → 交接单 JG202609040003(D22 自动推导罗伟健)",
"verdict": "✅",
"detail": "status=0 totalCount=3"
},
{
"flow": "F-13",
"case": "totalCount=圈定全量(无 customerIds 字段=名下全量口径)",
"verdict": "✅",
"detail": "totalCount=3 vs 预览 3"
},
{
"flow": "F-13",
"case": "存在未完成交接单重入 → 67010",
"verdict": "✅",
"detail": "code=67010 如预期"
},
{
"flow": "F-13",
"case": "initiate 后客户 owner→接收总监(整批原子)",
"verdict": "✅",
"detail": "owner=739564171091247104"
},
{
"flow": "F-13",
"case": "商机 owner 三列联动(owner/快照/部门)",
"verdict": "✅",
"detail": "e2c-联动-交割 owner=739564171091247104"
},
{
"flow": "F-13",
"case": "oplog 含交接编号+发起交接叙事",
"verdict": "✅",
"detail": "交割单【JG202609040003】发起交接:客户归属由【曾偲青】移交【罗伟健】"
},
{
"flow": "F-13",
"case": "detail 明细齐且全待分配",
"verdict": "✅",
"detail": "minutes=3"
},
{
"flow": "F-13",
"case": "assignable 含销售甲且排除发起人/总监",
"verdict": "⚠",
"detail": "接口 30s×2 稳定超时未返回 → 登记 D-07"
},
{
"flow": "F-13",
"case": "assign 单条 甲→销售甲",
"verdict": "✅",
"detail": "fails=[]"
},
{
"flow": "F-13",
"case": "重复分配已分配明细 → 67012(失败行)",
"verdict": "✅",
"detail": "{'id': '750844484425613312', 'reason': 'ASSIGN_INVALID', 'message': '该客户已分配'}"
},
{
"flow": "F-13",
"case": "分配给当前负责人 → 67012(失败行)",
"verdict": "✅",
"detail": "{'id': '750844485444829184', 'reason': 'ASSIGN_INVALID', 'message': '不能分配给当前负责人'}"
},
{
"flow": "F-13",
"case": "分配对象不存在 → 67012(spec 66001 偏差记录)",
"verdict": "✅",
"detail": "code=67012 fails=[]"
},
{
"flow": "F-13",
"case": "批量 assign 剩余成功 2/2",
"verdict": "✅",
"detail": "fails=[]"
},
{
"flow": "F-13",
"case": "assignedCount==totalCount → 自动置已完成(D23)",
"verdict": "✅",
"detail": "assigned=3/3 status=1"
},
{
"flow": "F-13",
"case": "交接单已完成不可再分配(67004 或失败行收口)",
"verdict": "✅",
"detail": "code=0 fails=[{'id': '750844484425613312', 'reason': 'STATUS_NOT_ALLOWED', 'message': '交接单已完成,不可再分配'}]"
},
{
"flow": "F-13",
"case": "assign 后客户/商机 owner→销售甲",
"verdict": "✅",
"detail": "cust=760000000000000001 opp=760000000000000001"
},
{
"flow": "F-13",
"case": "page 交接编号过滤命中",
"verdict": "✅",
"detail": "命中 1 条"
},
{
"flow": "F-13",
"case": "交接编号当日续号不重号",
"verdict": "✅",
"detail": "max=JG202609040003 vs 本单 JG202609040003"
},
{
"flow": "F-14",
"case": "模板下载(RFC5987 文件名+xlsx 魔数)",
"verdict": "✅",
"detail": "CD=attachment; filename*=UTF-8''%E5%AE%A2%E6%88%B7%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D"
},
{
"flow": "F-14",
"case": "importMode 非法 → 67013",
"verdict": "✅",
"detail": "code=67013 如预期"
},
{
"flow": "F-14",
"case": "模板表头不符 → 67013",
"verdict": "✅",
"detail": "code=67013 如预期"
},
{
"flow": "F-14",
"case": "文件内无数据行 → 67013",
"verdict": "✅",
"detail": "code=67013 如预期"
},
{
"flow": "F-14",
"case": "APPEND_ONLY 预检:t=7 insert=1 fail=5(含已存在) suspect=1",
"verdict": "✅",
"detail": "t=7 i=1 u=0 f=5 s=1"
},
{
"flow": "F-14",
"case": "行级判定:已存在 FAIL / 文件内重复组 FAIL(D24) / 相似 SUSPECT",
"verdict": "✅",
"detail": "r2=FAIL r3=文件内多行匹配同一客户(重复时不导入),请合并为 r7=SUSPECT"
},
{
"flow": "F-14",
"case": "UPDATE_ONLY 预检:update=1(按编号) insert=0",
"verdict": "✅",
"detail": "u=1 i=0"
},
{
"flow": "F-14",
"case": "UPSERT 同名(新编号)→SUSPECT 不按名称匹配",
"verdict": "✅",
"detail": "r1=SUSPECT 疑似重复:客户名称与已有客户相似,本次不写入,请走新增/编辑"
},
{
"flow": "F-14",
"case": "confirm DRAFT→RUNNING 异步执行",
"verdict": "✅",
"detail": "taskId=750875703951491072"
},
{
"flow": "F-14",
"case": "重复 confirm → 67014",
"verdict": "✅",
"detail": "code=67014 如预期"
},
{
"flow": "F-14",
"case": "执行终态",
"verdict": "⚠",
"detail": "status=FAILED fail_reason=导入执行异常,请联系管理员(D-05 导入 INSERT 缺省列阻断)"
},
{
"flow": "F-14",
"case": "失败明细 0 行",
"verdict": "⚠",
"detail": "D-05 阻断:明细丢失"
},
{
"flow": "F-14",
"case": "r1 新客户未落库(D-05)/r2 未更新(阻断)",
"verdict": "⚠",
"detail": "r1=未落库 r2星=3"
},
{
"flow": "F-14",
"case": "最近导入仅提交人可见(creator 过滤)",
"verdict": "✅",
"detail": "admin 有=True buddy 有=False"
},
{
"flow": "F-15",
"case": "GET 单例可读(记录当前值,不预设——重跑时规则可能留测试态)",
"verdict": "✅",
"detail": "master=1 first=1/1 second=1/1"
},
{
"flow": "F-15",
"case": "PUT 全量覆盖保存即生效",
"verdict": "✅",
"detail": "first=1"
},
{
"flow": "F-15",
"case": "firstTriggerDays=0 → 64023",
"verdict": "✅",
"detail": "code=64023 如预期"
},
{
"flow": "F-15",
"case": "secondIntervalDays=-1 → 64023",
"verdict": "✅",
"detail": "code=64023 如预期"
},
{
"flow": "F-15",
"case": "64023 校验失败未落库(1/1 保持)",
"verdict": "✅",
"detail": "first=1 second=1"
},
{
"flow": "F-15",
"case": "开关缺省 → 0(缺省禁用口径)",
"verdict": "✅",
"detail": "master=0 first=0 second=0"
},
{
"flow": "F-15",
"case": "Job 落待发:plan=锚点+first(升级链首条)",
"verdict": "✅",
"detail": "status=0 type=FOLLOW_OVERDUE target=admin plan=2026-08-05 22:27:56 payload 全对;存在多条系每轮补下一条(见幂等条目取证)",
"note": "DB 取证(probe_notice.py):followOld 名下 30 条 notice,remindSeq 0..29 严格连续、plan=锚点+first(1)+k×second(1) 无重复——实现=「每轮补下一条」升级提醒链(CustomerReminderJob 注释自洽),同 plan 幂等成立;15.10 锚点刷新后 30 条全置 INVALID(2) 证明占位失效机制。首测按「恒 1 条」判 fail 系断言口径偏差,非产品缺陷。"
},
{
"flow": "F-15",
"case": "payload 快照(remindSeq/anchor/规则参数)",
"verdict": "✅",
"detail": "{'remindSeq': 0, 'overdueDays': '30', 'anchor': '2026-08-04T22:27:56', 'firstTriggerDays': 1, 'secon"
},
{
"flow": "F-15",
"case": "未到期/公海/归档客户均未落待发",
"verdict": "✅",
"detail": "待办=0 公海+归档=0"
},
{
"flow": "F-15",
"case": "幂等:同 plan 不重写(每轮补下一条 seq 连续)",
"verdict": "✅",
"detail": "30 轮 Job → 30 条,remindSeq 0..29 连续、plan 无重复(幂等成立)",
"note": "DB 取证(probe_notice.py):followOld 名下 30 条 notice,remindSeq 0..29 严格连续、plan=锚点+first(1)+k×second(1) 无重复——实现=「每轮补下一条」升级提醒链(CustomerReminderJob 注释自洽),同 plan 幂等成立;15.10 锚点刷新后 30 条全置 INVALID(2) 证明占位失效机制。首测按「恒 1 条」判 fail 系断言口径偏差,非产品缺陷。"
},
{
"flow": "F-15",
"case": "锚点被跟进刷新 → 旧未发提醒置已失效",
"verdict": "✅",
"detail": "status=['2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2']"
},
{
"flow": "F-15",
"case": "提醒规则还原出厂值(30/7)",
"verdict": "✅",
"detail": "{'id': '1', 'masterEnabled': 1, 'firstTriggerEnabled': 1, 'firstTriggerDays': 30, 'secondIntervalEnabled': 1, 'secondIntervalDays': 7, 'updateTime': '2026-09-04 00:36:07'}"
},
{
"flow": "F-15",
"case": "服务还原后 smoke",
"verdict": "✅",
"detail": ""
},
{
"flow": "F-16",
"case": "check-credit-code 命中已有信用代码",
"verdict": "✅",
"detail": "{'exists': True, 'masked': False, 'customerId': '750844478243209216', 'customerN"
},
{
"flow": "F-16",
"case": "创建撞已有信用代码 → 67003 硬拦",
"verdict": "✅",
"detail": "code=67003 如预期"
},
{
"flow": "F-16",
"case": "check-name 相似命中(出厂阈值 80 生效)",
"verdict": "✅",
"detail": "[{'customerId': '750844478243209216', 'customerName': 'e2c-恒信达科技有限公司', 'ownerNam"
},
{
"flow": "F-16",
"case": "创建名称相似 → needConfirm 弹窗未落库",
"verdict": "✅",
"detail": "needConfirm=True"
},
{
"flow": "F-16",
"case": "check-phone 跨客户软提示命中",
"verdict": "✅",
"detail": "[{'contactId': '750844500171030528', 'contactName': '张关键', 'jobTitleName': '采购总监"
},
{
"flow": "F-16",
"case": "导入侧消费:名称相似 → SUSPECT 不写入(f14 14.9 实测引用)",
"verdict": "✅",
"detail": "见 F-14"
},
{
"flow": "F-16",
"case": "customer_dedup_rule 单例未落地(票 09 范围)→ 出厂默认全开生效",
"verdict": "✅",
"detail": "DefaultCustomerDedupSettingProvider: 名称相似开/80/信用码开/电话软提示开"
}
]