{ "results": [ { "case": "envelope keys = code/success/message/data", "got": [ "code", "data", "message", "success" ], "expect": "['code', 'data', 'message', 'success']", "ok": false, "note": "" }, { "case": "board.conflictPendingCount 类型", "got": "str", "expect": "['int', 'str']", "ok": true, "note": "原型为数字;若str则前端依赖宽松" }, { "case": "create 校验:「缺项目名称」被拒", "got": [ 68001, false ], "expect": "('not0', False)", "ok": false, "note": "code=68001 msg=项目名称必填" }, { "case": "create 校验:「缺客户」被拒", "got": [ 68001, false ], "expect": "('not0', False)", "ok": false, "note": "code=68001 msg=关联客户必填(请从客户目录选择,不支持现场新建)" }, { "case": "create 校验:「缺方案卡」被拒", "got": [ 68001, false ], "expect": "('not0', False)", "ok": false, "note": "code=68001 msg=关联方案卡必填(请选择该客户的方案卡)" }, { "case": "create 校验:「卡客户不匹配」被拒", "got": [ 68001, false ], "expect": "('not0', False)", "ok": false, "note": "code=68001 msg=客户不可用:客户不存在: 99999001" }, { "case": "create 校验:「客户不存在」被拒", "got": [ 68001, false ], "expect": "('not0', False)", "ok": false, "note": "code=68001 msg=客户不可用:客户不存在: 88888888" }, { "case": "create 校验:「方案卡不存在」被拒", "got": [ 68007, false ], "expect": "('not0', False)", "ok": false, "note": "code=68007 msg=方案卡不存在或已被删除" }, { "case": "create 合法入参成功", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': '753422260487847936'}" }, { "case": "create 同方案卡重复绑定(一客户一卡铁律)", "got": 0, "expect": "['not0_or_0待复核']", "ok": false, "note": "code=0 msg=success" }, { "case": "建项目落库 stage=0", "got": 0, "expect": "0", "ok": true, "note": "" }, { "case": "建项目落库 status=1 进行中", "got": 1, "expect": "1", "ok": true, "note": "" }, { "case": "建项目落库 filingStatus=1 审核中", "got": 1, "expect": "1", "ok": true, "note": "" }, { "case": "建项目落库 bidResult 未定", "got": 0, "expect": "[0, None]", "ok": true, "note": "" }, { "case": "detail 含 ownerNameSnapshot", "got": true, "expect": "True", "ok": true, "note": "A5总监" }, { "case": "detail 含 customerName", "got": true, "expect": "True", "ok": true, "note": "A5DEMO-甲客户" }, { "case": "未登录读 detail → 401 信封", "got": [ 40103, false ], "expect": "('not0', False)", "ok": false, "note": "" }, { "case": "@PathVariable 形态 /project/detail/{id} 不存在", "got": 40401, "expect": "['not0', 404, 'not_found_404']", "ok": false, "note": "{'code': 40401, 'success': False, 'message': '接口不存在:api/project/detail/753422260487847936', 'data': None}" }, { "case": "PUT 方法被拒(只 POST 写)", "got": 40501, "expect": "[405, 'not0']", "ok": false, "note": "{'code': 40501, 'success': False, 'message': '错误的请求方式', 'data': None}" }, { "case": "DELETE 方法被拒", "got": 40501, "expect": "[405, 'not0']", "ok": false, "note": "{'code': 40501, 'success': False, 'message': '错误的请求方式', 'data': None}" }, { "case": "list 分页结构含 content/total", "got": true, "expect": "True", "ok": true, "note": "['content', 'current', 'empty', 'pages', 'size', 'total']" }, { "case": "list size=2 生效", "got": 2, "expect": "2", "ok": true, "note": "" }, { "case": "list 阶段筛 stage=0 只回该阶段", "got": 0, "expect": "0", "ok": true, "note": "rows=2" }, { "case": "list 阶段筛 stage=1 只回该阶段", "got": 0, "expect": "0", "ok": true, "note": "rows=0" }, { "case": "list 阶段筛 stage=2 只回该阶段", "got": 0, "expect": "0", "ok": true, "note": "rows=0" }, { "case": "list 阶段筛 stage=3 只回该阶段", "got": 0, "expect": "0", "ok": true, "note": "rows=0" }, { "case": "list 阶段筛 stage=4 只回该阶段", "got": 0, "expect": "0", "ok": true, "note": "rows=0" }, { "case": "list 阶段筛 stage=5 只回该阶段", "got": 0, "expect": "0", "ok": true, "note": "rows=0" }, { "case": "list 阶段筛 stage=6 只回该阶段", "got": 0, "expect": "0", "ok": true, "note": "rows=0" }, { "case": "list 非法阶段 stage=7", "got": 68001, "expect": "['not0', 0]", "ok": false, "note": "code=68001 msg=项目阶段筛选非法(就 7 个值 0~6;报备状态请用独立筛选项 filingStatus)" }, { "case": "list keyword 筛命中自建项目", "got": true, "expect": "True", "ok": true, "note": "rows=2" }, { "case": "list 报备独立筛 filing=1", "got": 0, "expect": "0", "ok": true, "note": "rows=2" }, { "case": "普通销售 mine 空或只含本人", "got": true, "expect": "True", "ok": true, "note": "rows=0" }, { "case": "报备驳回成功", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'id': '753422260487847936', 'createTime': '2026-09-11 01:11:04', 'updateTime': '2026-09-11" }, { "case": "驳回后 filing=3 且 stage 仍 0", "got": [ 3, 0 ], "expect": "(3, 0)", "ok": false, "note": "" }, { "case": "驳回后可再审通过", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'id': '753422260487847936', 'createTime': '2026-09-11 01:11:04', 'updateTime': '2026-09-11" }, { "case": "通过后 filing=2 + stage=1 双写", "got": [ 2, 1 ], "expect": "(2, 1)", "ok": false, "note": "" }, { "case": "rollback-targets 非法 id 报错", "got": 68002, "expect": "not0", "ok": false, "note": "{'code': 68002, 'success': False, 'message': '项目不存在或已被删除', 'data': None}" }, { "case": "推进 1→2", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'id': '753422260487847936', 'createTime': '2026-09-11 01:11:04', 'updateTime': '2026-09-11" }, { "case": "推进 2→3", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'id': '753422260487847936', 'createTime': '2026-09-11 01:11:04', 'updateTime': '2026-09-11" }, { "case": "推进至 stage3", "got": 3, "expect": "3", "ok": true, "note": "" }, { "case": "3→5 连跳(无需招投标)", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'id': '753422260487847936', 'createTime': '2026-09-11 01:11:04', 'updateTime': '2026-09-11" }, { "case": "连跳后 stage=5", "got": 5, "expect": "5", "ok": true, "note": "" }, { "case": "连跳后可选节点={1,2,3} 无4", "got": [ 1, 2, 3 ], "expect": "[1, 2, 3]", "ok": false, "note": "[1, 2, 3]" }, { "case": "多步回退 5→2(总监)", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'id': '753422260487847936', 'createTime': '2026-09-11 01:11:04', 'updateTime': '2026-09-11" }, { "case": "回退后 stage=2", "got": 2, "expect": "2", "ok": true, "note": "" }, { "case": "回退下限 stage1(target 0 被拒)", "got": 68006, "expect": "not0", "ok": false, "note": "code=68006 msg=回退目标须为前面已经过的节点且不低于方案设计(stage1),不可回退到当前或未来节点" }, { "case": "普通销售回退被拒 68005", "got": 68005, "expect": "68005", "ok": true, "note": "阶段回退仅管理员与销售总监可操作" }, { "case": "bidResult 非法值被拒", "got": 68009, "expect": "not0", "ok": false, "note": "code=68009 msg=bidResult 仅可为 1(赢单)或 2(输单)" }, { "case": "标记赢单成功", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'id': '753422260487847936', 'createTime': '2026-09-11 01:11:04', 'updateTime': '2026-09-11" }, { "case": "赢单: stage 仍 5 + status 仍 1 + bidResult=1", "got": [ 5, 1, 1 ], "expect": "(5, 1, 1)", "ok": false, "note": "" }, { "case": "赢单锁死回退 68003", "got": 68003, "expect": "68003", "ok": true, "note": "赢单项目锁死(stage5 闭环,状态锁定),不可回退" }, { "case": "赢单后不可改输单(锁)", "got": 68009, "expect": "not0", "ok": false, "note": "code=68009 msg=该项目已标记赢单/输单,不可重复标记" }, { "case": "赢单项目关闭(spec 未禁)", "got": 0, "expect": "['not0', 0]", "ok": true, "note": "code=0 msg=success" }, { "case": "关闭后 status=2", "got": 2, "expect": "2", "ok": true, "note": "" }, { "case": "标记输单 → stage6 结项", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'id': '753422261834219520', 'createTime': '2026-09-11 01:11:05', 'updateTime': '2026-09-11" }, { "case": "输单: stage=6 status=3 bidResult=2", "got": [ 6, 3, 2 ], "expect": "(6, 3, 2)", "ok": false, "note": "" }, { "case": "结项终态回退被拒", "got": 68003, "expect": "not0", "ok": false, "note": "code=68003 msg=项目已关闭/已结项(终态锁),不可回退" }, { "case": "已结项不可再关闭", "got": 68003, "expect": "not0", "ok": false, "note": "code=68003 msg=项目已结项(终态),不可关闭" }, { "case": "动态含「创建」事件", "got": false, "expect": "True", "ok": false, "note": "['CLOSE', 'BID_WIN', 'STAGE_ADVANCE', 'STAGE_ADVANCE', 'STAGE_ROLLBACK', 'STAGE_ADVANCE', 'STAGE_ADVANCE', 'STAGE_ADVANCE', 'CONFLICT_RELEASE', 'FILING_REJECT', 'FILING_SUBMIT', 'CREATE']" }, { "case": "动态含「报备」事件", "got": false, "expect": "True", "ok": false, "note": "['CLOSE', 'BID_WIN', 'STAGE_ADVANCE', 'STAGE_ADVANCE', 'STAGE_ROLLBACK', 'STAGE_ADVANCE', 'STAGE_ADVANCE', 'STAGE_ADVANCE', 'CONFLICT_RELEASE', 'FILING_REJECT', 'FILING_SUBMIT', 'CREATE']" }, { "case": "跟进新增", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': '753422297515163648'}" }, { "case": "跟进缺内容被拒", "got": 68001, "expect": "not0", "ok": false, "note": "code=68001 msg=项目 id、跟进内容、跟进时间必填" }, { "case": "附件挂载(fileId=1)", "got": 0, "expect": "['not0', 0]", "ok": true, "note": "code=0 msg=success" }, { "case": "附件列表可读", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': [{'id': '753422299150942208', 'projectId': '75342226048784793" }, { "case": "GET /project/scheme 可读", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'projectId': '753422260487847936', 'schemeBudget': None, 'sc" }, { "case": "GET /project/quote 可读", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'projectId': '753422260487847936', 'quoteTotal': None, 'quot" }, { "case": "GET /project/bidding 可读", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'projectId': '753422260487847936', 'bidDeadline': None, 'bid" }, { "case": "GET /project/bid-open 可读", "got": 0, "expect": "0", "ok": true, "note": "{'code': 0, 'success': True, 'message': 'success', 'data': {'projectId': '753422260487847936', 'bidOpenTime': None, 'bid" }, { "case": "客户页签=单客户(一项目一客户)", "got": [ 0, 1 ], "expect": "(0, 1)", "ok": false, "note": "[{'id': '99021001', 'customerNo': 'A5DEMO-C001', 'customerName': 'A5DEMO-甲客户', 'customerType': 'ENTERPRISE', 'ownerName': 'A5总监'}]" } ], "PID": "753422260487847936", "PID_DUP": "753422261834219520" }