QA验收 #12
openCNB #100 开票申请:测试环境防重与审批回调验收及操作手册
0%
RA Updated by Redmine Admin 22 days ago
协调预检(非正式QA执行结果):用户已安排测试环境防重及回调验收。确认候选的开票审批模板仍硬编码正式模板,无受支持的测试环境覆盖入口;回调对本库未知sp_no可进入财务镜像创建逻辑。隔离实证/修正前禁止真实开票审批提交,不以生产回调或既有真实财务记录做测试。Ops正在只读核对企微回调接收配置;QA原责任线程执行根修复仍阻塞,等待用户路由决定。正式QA尚未开始,报告/图文手册未完成;后续逐条用例记录Pass/Fail/Blocked/Skipped并重读验证。生产未动。
RA Updated by Redmine Admin 22 days ago
协调现场隔离核验:当前客户开票模板已订阅审批状态变化,获准调用的Mindsetech CRM应用接收URL为正式域名 crm-api.mindsetech.com/v1/callback/wecom/。结合候选硬编码客户开票模板及未知SpNo财务镜像处理,不能保证测试开票回调不写生产。保持真实开票审批与回调验收Blocked;禁止生产改动、模板订阅变更或真实数据提交。本轮仅只读查看,未保存/校验/发审批。需先形成测试模板可配置入口和可证实的独立测试回调通道方案,不能仅授权另一个应用就假定隔离。QA执行根路由仍待用户决定。
RA Updated by Redmine Admin 22 days ago
QA 测试结果 — 安全只读 R1 — 2026-10-20 20:43 Asia/Shanghai¶
- Redmine NDB #12 / CNB #100。
- 环境:仅 https://tcrm.mindsetech.com、https://tcrm-api.mindsetech.com。
- 候选:Backend 1.20.5b0/b98e8bf,Web 2.16.4-beta.0/a4c06ea。
- QA:本原 QA 责任线程。汇总:Pass 4 / Fail 0 / Blocked 9 / Skipped 0。
- COMMON两项与#11共享一次观察,不是额外重复执行。所有业务网络请求均为匿名GET。
| 编号 | 用例/层级 | 前置与操作 | 预期 | 实际/证据 | 状态 |
|---|---|---|---|---|---|
| COMMON-001 | 后端实际版本/接口 | 匿名GET /v1/version/ | 200,1.20.5b0 | 2026-10-20T12:42:58.477Z:200,data.version=1.20.5b0 | Pass |
| COMMON-002 | Web静态制品/环境 | GET首页、入口及login资源 | 200,预期候选版本 | 首页200,入口/assets/index-vtXHy6cc.js,login资源200,提取版本仅2.16.4-beta.0 | Pass |
| INV-001 | 已部署开票schema/接口 | Accept application/json GET /schema/ | 列表/详情含申请字段,提交路径存在 | 200;FinanceInvoiceSerializers、FinanceInvoiceDetailSerializers均有issue_application;/v1/finances/invoices/issue-approval/存在;未调用该POST | Pass |
| INV-002 | 匿名账单列表/接口 | 无凭据GET /v1/finances/invoices/ | 拒绝,未返回列表 | HTTP401、code401、data.list非数组 | Pass |
| INV-003 | 登录后状态、筛选、权限/浏览器 | 恢复指定Space14/p1 | 仅测试站查看QA账单 | taskSpace(14)报task space not found;未另建空间、未读凭据或历史财务数据 | Blocked |
| INV-004 | 同键重复点击/刷新/多标签/端到端 | 脱敏QA账单、隔离模板回调 | 只形成一份有效申请 | 开票POST明确禁止,未执行 | Blocked |
| INV-005 | 同键不同payload/接口 | 同上 | 冲突且无重复受理 | 禁止开票POST,未执行 | Blocked |
| INV-006 | 不同键并发占用同账单/并发 | 同上 | 最多一个有效申请 | 禁止开票POST,未执行 | Blocked |
| INV-007 | 合并及分组部分失败/端到端 | 多条专用QA账单 | 分组结果明确且成功组不重发 | 禁止开票POST,未执行 | Blocked |
| INV-008 | submitting/unknown及明确失败重试/端到端 | 受控服务结果与专用记录 | 未知不盲重发,明确失败可安全重试 | 不改DB、不伪造服务状态,当前无安全fixture | Blocked |
| INV-009 | 批准不等于开票、重复乱序早到回调/集成 | 隔离真实审批及接收端 | 终态保留且审批/开票状态独立 | 正式接收URL、硬编码正式模板及未知SpNo镜像风险;真实提交/模拟均禁止 | Blocked |
| INV-010 | 附件失败恢复及无票分支/端到端 | 专用QA账单及受控附件 | 保留审批事实、恢复不重提;无票分支按规则完成 | 涉及业务写/开票POST,安全包未放行 | Blocked |
| INV-011 | 正式图文手册复现/浏览器 | 当前候选真实流程通过 | 真实截图及可复现步骤 | 浏览器空间缺失,关键流程未过;无截图,仅Blocked草稿 | Blocked |
所需前置与边界¶
需统筹交接可用浏览器空间,确认测试财务账号及新QA专用账单/公司/合同等数据范围;不使用旧真实财务记录。真实开票还需受支持的测试模板入口与可证实的独立回调通道,不能将正式模板当测试模板。现有隔离证据见同目录callback-isolation-readonly.md,本轮未重新修改或核验企微后台。
无业务Fail;Blocked不等于缺陷判定。不修改产品代码,不commit/push/deploy,不触生产。未执行登录后业务、自动化、并发或真实回调。手册草稿为projects/ndb/frontend/docs/user-manual/issues-100-101-qa-draft.md,UI及项目复核未执行。写入后须重读Redmine确认。
RA Updated by Redmine Admin 22 days ago
QA 测试结果 — 安全页面 R2 — 2026-10-20 Asia/Shanghai¶
NDB #12 / CNB #100。环境仅tcrm/tcrm-api.mindsetech.com;候选Backend1.20.5b0/b98e8bf、Web2.16.4-beta.0/a4c06ea(沿用R1版本证据)。本原QA责任线程,Space17/p1。Pass3 / Fail0 / Blocked2 / Skipped0。
| 编号 | 用例/层级 | 前置与操作 | 预期 | 实际与证据 | 状态 |
|---|---|---|---|---|---|
| R2-SESSION | 已登录测试站访问/浏览器 | 恢复Space17既有管理员登录态 | 可访问获准测试页面 | 专家与客户账单可访问;与#11共享一次观察,不是额外登录测试 | Pass |
| R2-INV-01 | 申请状态筛选输入和映射/浏览器 | 客户账单→筛选,客户简称QA,状态申请中,点击筛选 | UI选择映射submitting并只请求测试端 | performance资源记录host=tcrm-api.mindsetech.com、path=/v1/finances/invoices、query=?page=1&page_size=20&company_name=QA&application_status=submitting;03-invoice-filter.png | Pass |
| R2-INV-02 | QA筛选空结果/浏览器 | 清除筛选项,再只填客户简称QA并筛选,待响应完成 | 空结果不伪造申请行/单号 | 资源query=?page=1&page_size=20&company_name=QA;页面暂无数据、业务行数0;申请状态/时间/单号列存在;04-qa-invoices-empty.png。不把空结果当有记录状态筛选正确 | Pass |
| R2-INV-03 | 状态行/时间/单号、详情及刷新一致性/浏览器 | 需要现有明确合成QA账单 | 列表详情字段一致且状态独立 | QA客户范围无账单,未选择旧真实财务记录;缺fixture未验证 | Blocked |
| R2-INV-04 | 非财务/低权限拒绝/浏览器 | 需要获准非管理员测试账号 | 权限边界符合预期 | 当前仅管理员已登录会话;入口可见不能证明低权限安全 | Blocked |
截图位于projects/ndb/frontend/docs/user-manual/assets/issues-100-101/,已查看。03最终为仅筛选弹窗;首次截图定位/动画时机不正确,已在本轮重拍并复核,不使用错误截图。04仅QA空结果,无真实账单数据。打开账单页时应用默认加载既有记录,未打开旧记录详情、不修改、不以其作为合成fixture或截入手册。
R1防重、同键冲突、并发、分组、unknown恢复、附件重试、无票及真实回调继续Blocked;本轮未重跑,不用管理员按钮可见或空结果代替业务验收。需要专用QA账单和状态fixture、低权限账号及隔离模板/接收端。未点击申请开票、提交、上传、重试或恢复;无业务POST/模拟回调/DB/配置/生产改动,无commit/push/deploy。Space17保留给复核,手册仍Blocked。
RA Updated by Redmine Admin 21 days ago
阶段范围说明(非新测试轮次):用户明确选择暂仅页面验收。R2页面观察去重后6 Pass / 4 Blocked(两issue共享观察不重复计数),历史journal124/125及各用例结果不变,不新增Pass。关键业务测试本阶段未执行,不能宣称#100/#101完整通过。未批准25条合成种入、加密回调或防重集成测试;后续须另行授权,本阶段不继续请求该批授权。禁止业务数据新增/修改、回调密钥读取、审批/开票提交、回调、防重并发、DB/ES/队列写及任何生产操作;正常测试页面访问审计允许。Backend/UI局部复核结论保持,正式流程和完整手册仍Blocked。本次仅文档及范围说明,无新测试执行。
RA Updated by Redmine Admin 20 days ago
生产候选安全补缺:L1 Backend收据复核 — QA-CLOSURE-20261022-R1 / #12¶
候选BE 85721778e8ee164a347fd8890aa8061dedbb4741、FE7194ace4292e07963b0f1e66cf3e9f7fc4ef8896。执行人为Backend,QA只读核对原始run-01.log、results.json、closure_tests.py和delivery.md;没有重跑。真实迁移、独占合成PG、TransactionTestCase/APIClient、真实JWT解析与crypto/receiver/guards;仅供应商/ES外边界mock,全进程禁止外联。JWT是本地签发,不是密码登录;ORM基础fixture不改称全程公开API创建。不是共享站UI、独立HTTP完整应用或真实企微E2E。
本issue关联本地集成子项10 Pass / 0 Fail;27项唯一执行总计AUTH1/CAP12/CRYPTO9/MEETING1/UNKNOWN4,7.438秒。#11与#12共享的URL/crypto负例5项是同一执行,不重复计总数。565旧测试不重造,旧R1/R2/R3和父例Blocked不覆盖。
| 用例(closure_tests.ClosureTests) | 预期 | 实际断言摘要 | 状态 |
|---|---|---|---|
| test_CRYPTO_invoice_dispatch_duplicate_and_stale | 真实加密路由分流及终态/重复/旧事件一致 | {"http":200,"application":"approved","issued":false,"provider_calls":1} | Pass |
| test_CRYPTO_reject_cipher | 非法加密输入拒绝且业务快照不变 | {"http":200,"code":400,"unchanged":true,"kind":"cipher"} | Pass |
| test_CRYPTO_reject_missing | 非法加密输入拒绝且业务快照不变 | {"http":200,"code":400,"unchanged":true,"kind":"missing"} | Pass |
| test_CRYPTO_reject_receiver | 非法加密输入拒绝且业务快照不变 | {"http":200,"code":400,"unchanged":true,"kind":"receiver"} | Pass |
| test_CRYPTO_reject_signature | 非法加密输入拒绝且业务快照不变 | {"http":200,"code":400,"unchanged":true,"kind":"signature"} | Pass |
| test_CRYPTO_url_verification | 真实解密echo一致 | {"http":200,"real_crypto":true} | Pass |
| test_UNKNOWN_applicant | unknown占用提交可见;不匹配恢复拒绝/匹配恢复成功,不重提 | {"new_connection_visible":["unknown",2],"recovery":"applicant","no_resubmission":true,"negative_unchanged":true} | Pass |
| test_UNKNOWN_content | unknown占用提交可见;不匹配恢复拒绝/匹配恢复成功,不重提 | {"new_connection_visible":["unknown",5],"recovery":"content","no_resubmission":true,"negative_unchanged":true} | Pass |
| test_UNKNOWN_template | unknown占用提交可见;不匹配恢复拒绝/匹配恢复成功,不重提 | {"new_connection_visible":["unknown",8],"recovery":"template","no_resubmission":true,"negative_unchanged":true} | Pass |
| test_UNKNOWN_valid | unknown占用提交可见;不匹配恢复拒绝/匹配恢复成功,不重提 | {"new_connection_visible":["unknown",11],"recovery":"valid","no_resubmission":true,"negative_unchanged":false} | Pass |
证据:outputs/production-release-20261022/backend-closure-20261022/{results.json,run-01.log,closure_tests.py,delivery.md};QA映射在qa-closure-20261022/backend-receipt-map.md。results SHA256 438c04aba66bfa151c7914b446f1829c6fd3b4e802b3b5b5c66e7c0bb77bf9d3;脚本SHA256 97a2d4080d0411ef10433a4c6fc168d50fc69e647373941fa31886a2768aa93e。
共享申请状态行/非空时间单号无新fixture;没有提交真实申请或回调。公司8限定GET仍0账单/0开票主体,合同12合成且active;最小内部draft账单方案待统筹放行。
未真实通知/付款/外部审批/生产造数,无产品修改或提交推送部署;102及安全手册工作继续。真实供应商层、共享缺口和适用手册按层分开,不能用本地Pass宣称全部生产QA通过。
RA Updated by Redmine Admin 20 days ago
共享测试站安全补缺 — QA-CLOSURE-20261022-SHARED-R2 / #12¶
环境仅tcrm/tcrm-api,直接核BE1.20.5b4/FE2.16.4-beta.2;对应最终main BE85721778/FE7194ace的关键blob复用依据由Backend/Web/统筹提供,不写成main已部署。QA原责任会话,ego本轮Space17,日期2026-10-22。管理员真实UI登录/profile id2/admin;新PM真实UI登录/profile id16/pm。没有真实通知/审批/开票/付款/生产造数。
本issue新增共享窄范围子项 3 Pass / 0 Fail / 0 Blocked;三issue合计唯一共享6项,不与Backend27或历史轮次相加。下列前提/操作及实际证据只说明对应子项,不自动升级整个父例。
| CaseID | 用例/操作与预期 | 实际与证据 | 状态 |
|---|---|---|---|
| SHARED-INV-STATE-01 | 内部账单未申请行:合法身份/合成记录,应符合对应展示/权限边界 | 仅新主体13/Invoice68,公司8合同12,1RMB/draft/unissued/unpaid;页面未申请,申请/受理时间/单号均—;图05。 | Pass |
| SHARED-INV-FILTER-01 | 精确筛选本轮账单:合法身份/合成记录,应符合对应展示/权限边界 | UI id68/company8/not_requested;真实GET query含对应三字段,可见rowkey仅68、共1行;图04/05。 | Pass |
| SHARED-INV-DETAIL-01 | 详情与刷新一致:合法身份/合成记录,应符合对应展示/权限边界 | 详情Invoice68、QA主体13/合同12、1RMB;reload后仍未申请且三字段空,与API/列表一致;图06。 | Pass |
fixture manifest位于outputs/production-release-20261022/qa-closure-20261022/:shared-rate-manifest.json、shared-fixture-manifest.json、shared-account-manifest.json、pm-capability-evidence.json,逐步HTTP/code/确切ID/读回及来源均保留。A创建/0费率应用会正常写测试ES,已读Ops es-readonly.json确认staging独立索引无fallback;不宣称零I/O。B只建内部draft/prepay,不关联Task、不申请开票。账号仅新建专用PM,不修改旧未激活账号/Role权限,随机凭据只内存与批准Bitwarden。
父例更新:原R2-INV-03无样本的缺口对not_requested列表/详情/刷新已补齐;submitted/approved/unknown等及非空单号/时间的共享页面仍未执行。防重/恢复/加密入口本地子项见journal206;不因本共享窄子项通过声称真实审批E2E。
手册:shared-safe-guide.md及首版3图已有UI/Web/Backend三方Pass;新增incremental-guide.md和图04–08已实测、目视检查并送统筹安排增量复核,未把待审写成已审。旧102核心单笔5图及Pass保留,不重复全量。报告、图、脚本仅写新QA目录;两产品仓/旧手册只读,无commit/push/tag/deploy/真实生产写;共享旧Task126成本只有GET。
RA Updated by Redmine Admin 20 days ago
手册审核/空间收尾补记 — QA-CLOSURE-20261022-MANUAL-CLOSE(非新测试轮次,不新增Pass、不重复27或共享6条用例)。
两份已实测安全指南均获UI/Web/Backend原责任线程独立定向Pass,登记outputs/production-release-20261022/manual-review-register.md。首版图01–03与增量图04–08分别审阅;新增0/未申请账单/PM只读章节不借旧Pass覆盖。仅调整审核状态,未引入新业务步骤。最终两文档/八图精确清单及逐文件SHA256见qa-closure-20261022/delivery-manifest.json。
shared-safe-guide.md SHA256 30e92ef42884d53888a2928042caa716b17c0e1fef3f03bf5f8b58a7ca8325ad
incremental-guide.md SHA256 413aed2c70a7324910c808345fd77f55fa2fcb6bf0c4d9564c2444c5cffad900
额外按文只读核对账单68过滤仅1行、详情刷新仍not_requested及空时间单号,未新增业务写/Pass。Space17于2026-10-22T05:40:46Z完成finish({keep:[]}),本轮浏览器已结束,合成fixture及Bitwarden凭据条目保留,不清理业务数据。新共享PM16与管理员均真实UI登录/profile已核;旧Task126成本仅GET。
边界仍保留:其它申请状态及非空单号时间的共享UI、共享会议UI、真实供应商提交/审批人/订阅投递/媒体OSS未执行;本地27不冒充这些层级。旧#14/#15历史未因此修复或关闭。QA本次安全包已收口,不继续扩场景或等待整套UI设施;用户手册/资产版本化及生产门禁由统筹/Web/Ops按后续精确释放安排。两产品仓和旧13项untracked未改,无commit/push/tag/部署/生产写。