QA验收 #1 » mini-case-results.md
QA 测试结果 - 预约纪要统一意图 - 独立自动化第1轮 - Mini - 2026-10-07
- QA:Mindsetech Agent Team / NDB QA Agent
- Redmine:NDB #1(会议管理与话题管理功能验收,含 Markdown/BFF 跨端验证)
- 环境与共同前置:Node 页面逻辑 fixture、mock 网络;不是微信运行态截图证据
- 候选:Backend 444afbe / BFF cb70aee / Mini dda1473,加本次未提交实现;HEAD 本身不包含实现,最终差异摘要需协调方绑定。
- 操作:node --test --test-reporter=tap tests/*.test.cjs;每行用例名称与源码文件定位对应实际断言。
- 执行日期:2026-10-07 Asia/Shanghai;各框架原始时间/耗时保留于本地日志。
- 汇总:Pass 76 / Fail 1 / Blocked 0 / Skipped 0。
- 预期:对应命名用例的所有断言成立;实际记录仅对应此层级。
| 编号 | 用例 | 源码/层级 | 预期 | 实际 | 状态 | 证据/缺陷 |
|---|---|---|---|---|---|---|
| MINI-001 | login persists only short JWT/expiry; first phone bind uses server match | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-002 | unmatched phone sends email code and submitted application becomes pending | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-003 | expired session clears identity; a late profile read never restores logged-out state | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-004 | HTTP errors retain semantic code, status and requestId | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-005 | v2 transport uses /api/v2 and never clears a new JWT for a late old-session 401 | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-006 | multipart upload sends card and fields, and a late 401 cannot clear a newer session | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-007 | gather and search remove the duplicate online-meeting category | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-008 | content, topics and experts only use the V2 catalog API | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-009 | home recommendations and industry filters only use the V2 catalog API | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-010 | the mini-program has no legacy API origin or request client | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-011 | content cards open the dedicated V2 detail page | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-012 | catalog adapters preserve public presentation and never add private expert fields | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-013 | catalog error states are retryable except for unavailable content | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-014 | catalog lists isolate pagination, stop at total, preserve time ranges, and expose retries | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-015 | list, detail and calendar render the same Beijing time from the real templates | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-016 | UTC and offset ISO timestamps convert across midnight independently of device timezone | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-017 | summary remains date-only; missing/invalid times are not shown as ISO or Invalid Date | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-018 | double tap sends once; next completed business action gets a new key | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-019 | timeout retains the key across page/app runner recreation | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-020 | ambiguous server outcomes retain keys; definitive validation failures release them | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-021 | different accounts, meetings and actions never share an in-flight request | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-022 | registration shows the customer charge before submitting; pending is never called confirmed | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-023 | meeting detail downloads and opens the generated minutes attachment | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-024 | meeting content requires a valid session before download and opens login only once | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-025 | meeting content login prompt can be cancelled without leaving or downloading | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-026 | registration is not submitted when the price prompt is cancelled | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-027 | timeout retries reuse the same key without optimistic registration | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-028 | favorites stay independent while minutes reservation requires customer authentication | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-029 | started meeting reserves minutes once with a price confirmation and authoritative reread | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-030 | attendance and minutes reservation coexist without changing registration or join authorization | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-031 | minutes-only reservation never creates a client-side attendance projection or join link | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-032 | cancelled price confirmation does not reserve minutes | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-033 | published analyst minutes block reservation even when the attachment is missing; AI minutes do not | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-034 | reservation read failures never become an unreserved state or consult legacy subscriptions | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-035 | reservation retries reuse the business key and never optimistically mark success | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-036 | reservation results from an old login session never pollute the current session | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-037 | minutes can never be written through the legacy notification subscription API | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-038 | missing active contract keeps reservation unconfirmed and points to staff handling | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-039 | cancellation asks only for confirmation and allows registration again | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-040 | unavailable registration read disables mutation, logout removes a visible link | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-041 | secondary failures stay local while meeting detail remains available | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-042 | completed and cancelled meetings override unbound identity guidance | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-043 | legacy IDs never enter v2 mutation routes or reveal the legacy public link | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-044 | phone, contact and meeting eligibility gate registration; settlement errors stay explicit | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-045 | offline home renders a persistent network/service error and a retry button, never the empty state | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-046 | only successful empty responses show empty state; loading and repeated retry clicks stay distinct | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-047 | ten home shows cache static requests, refresh dynamic data, and preserve visible cards | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-048 | home merges in-flight requests and ignores an older response resolved last | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-049 | login connection failure is Chinese and releases the button for a fresh login attempt | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-050 | login launched as the first page relaunches home after success | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-051 | transport errors are localized without losing HTTP business errors or diagnostic codes | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-052 | page owns the complete, deterministic mini-program token baseline | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-053 | tab bar fixed colors stay aligned with the page tokens | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-054 | native tab bar keeps all four primary destinations in a stable order | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-055 | shared button preserves loading and disabled semantics with an adaptive touch target | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-056 | header, search, calendar and tab controls consume the common touch target | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-057 | tabs use tokenized dual-cue state and compositor-only motion | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-058 | color tabs use the shared design-asset arc indicator | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-059 | round-two contrast and option hit-target fixes stay enforced | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-060 | cards, tags and skeleton share design tokens without hiding existing data | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 静态背景色断言不匹配:预期 ended 使用 surface-subtle;当前既有 UI 未匹配 | Fail | mini-tests.tap;既有 UI 基线冲突,缺陷记录待协调决定 |
| MINI-061 | scoped UI files stop using the four known low-contrast literals | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-062 | home hides the complete hot-topic section when there are no topics | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-063 | list pages share visual spacing and semantic layer tokens without changing their state machines | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-064 | talk and topic detail keep navigation and sharing titles unambiguous | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-065 | meeting detail gives the login-to-registration task primary weight while preserving terminal and billing guards | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-066 | my page uses one primary login CTA and retains gated routes | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-067 | home banners expose a readable purpose and press affordance | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-068 | secondary navigation arrows remain visible on white surfaces | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-069 | identity authentication shows phone, review states and form while preserving native WeChat actions | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-070 | Ardot visual mapping stays inside existing mini-program business boundaries | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-071 | home uses one swiper data source and stable layout prop | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-072 | meeting banners are filtered, sorted, limited, and never collide with fixed entries | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-073 | conference card layout API and press feedback are wired to the root | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-074 | tab and list transitions animate compositor properties only | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-075 | local v2 build is explicit and development config fails closed | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-076 | minutes and AI report disabled states remain independent | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
| MINI-077 | terminal meetings hide registration actions behind the terminal-state guard | tests/*.test.cjs / Node fixture | 命名场景断言全部成立 | 断言通过 | Pass | mini-tests.tap |
边界与后续
本轮未进行共享业务写入、真实收费 Task 创建或真实员工邮件投递。Backend 测试库已由 Django 销毁;独立测试容器停止后其 tmpfs 测试数据不保留。BFF pg-mem 不能证明真实 PostgreSQL锁、回滚或进程重启后磁盘持久性。Node fixture 不代替真实微信认证、用户操作与截图。未来自动纪要分流/通知未实现,不在本轮完成声明中。
MINI-060 为已知卡片背景色静态断言与现有 UI 冲突;保留 Fail,不回退 UI。成功预约真实流程尚需免费 fixture 审定;图文手册与 UI/项目校对未完成。整体 QA 尚未完成。