# 会议出勤（Meeting Attendance）- 冒烟测试报告

- 模块: meeting-attendance
- 类型: smoke（Playwright MCP 手工 E2E）
- 日期: 2026-01-23
- 执行人: AI Agent

## 测试范围
- 页面可达性与关键稳定态（不做编辑/删除/签到提交）
- 覆盖: Dashboard/Meetings/Meeting Detail/QR/Guest Check-in/Reports/Series/Templates/Users/Audit Logs/Teams Meetings/Teams Reports/Teams Config/Check-in/Change Password/Create Meeting

## 环境信息
- 前端: http://localhost:3000
- 后端: http://localhost:3001/api/v1
- 数据库: postgresql://ffws_dev:***@localhost:3002/ffws_dev
- 浏览器: Chromium（Playwright MCP 默认）
- 设备: Desktop
- storageState: testing/reports/meeting-attendance-2026-01-23-smoke/storageState.json

## 执行时间
- 约: 2026-01-23 03:30:00 - 03:48:20 PST

## 执行命令
- Playwright MCP 交互执行（无 CLI 命令）

## 测试数据
- 会议 ID: cmhhz1l2a005iy6ov1flgyohc（从会议列表中选择）
- 用户: itadmin（已登录态）
- 会议包含参会人数据（列表/报表页可加载）

## 用例明细

### SMOKE-01 Dashboard 可达
- 前置条件: 已登录
- 步骤: 打开 `/meetingattendance/dashboard`
- 断言: 到达=Welcome 文案可见；稳定=统计卡片/Quick Actions/System Status 可见
- 关联 API: [001]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-01-dashboard-success.png

### SMOKE-02 Meetings 列表可达
- 前置条件: 已登录，存在会议数据
- 步骤: 打开 `/meetingattendance/meetings`
- 断言: 到达=Meeting Management 标题；稳定=至少 1 张会议卡片
- 关联 API: [001]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-02-meetings-list-success.png

### SMOKE-03 Meeting Detail 可达
- 前置条件: 已登录，存在会议 ID
- 步骤: 打开 `/meetingattendance/meetings/cmhhz1l2a005iy6ov1flgyohc`
- 断言: 到达=Meeting Information；稳定=出勤统计卡与参会人列表可见
- 关联 API: [003], [007]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-03-meeting-detail-success.png

### SMOKE-04 Meeting QR 可达
- 前置条件: 已登录，存在会议 ID
- 步骤: 打开 `/meetingattendance/meetings/cmhhz1l2a005iy6ov1flgyohc/qr`
- 断言: 到达=Meeting QR Codes 标题；稳定=线上/线下二维码可见
- 关联 API: [003]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-04-meeting-qr-success.png

### SMOKE-05 Templates 可达
- 前置条件: 已登录
- 步骤: 打开 `/meetingattendance/templates`
- 断言: 到达=Meeting Templates 标题；稳定=模板列表/空状态可见
- 关联 API: [029]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-05-templates-success.png

### SMOKE-06 Users 可达
- 前置条件: 已登录，具备 ADMIN/MANAGER
- 步骤: 打开 `/meetingattendance/users`
- 断言: 到达=Users 标题；稳定=用户卡片列表可见
- 关联 API: [034]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-06-users-success.png

### SMOKE-07 Audit Logs 可达
- 前置条件: 已登录，具备 ADMIN
- 步骤: 打开 `/meetingattendance/audit-logs`
- 断言: 到达=Audit Logs 标题；稳定=统计卡与日志卡片列表可见
- 关联 API: [047], [048]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-07-audit-logs-success.png

### SMOKE-08 Teams Meetings 可达
- 前置条件: 已登录
- 步骤: 打开 `/meetingattendance/teams/meetings`
- 断言: 到达=My Meetings 标题；稳定=Teams 会议卡片可见
- 关联 API: [001]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-08-teams-meetings-success.png

### SMOKE-09 Teams Reports 权限校验
- 前置条件: 已登录（管理员）
- 步骤: 打开 `/meetingattendance/teams/reports`
- 断言: 到达=页面加载完成；稳定=报表数据或权限提示稳定显示
- 关联 API: [044]
- 结果: 失败（显示 Insufficient Permissions，与管理员角色不符）
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-09-teams-reports-no-access.png

### SMOKE-10 Teams Config 可达
- 前置条件: 已登录
- 步骤: 打开 `/meetingattendance/teams/config`
- 断言: 到达=Configure Meeting Attendance App；稳定=配置卡片可见
- 关联 API: 无（纯静态说明页）
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-10-teams-config-success.png

### SMOKE-11 Change Password 可达
- 前置条件: 已登录
- 步骤: 打开 `/meetingattendance/settings/change-password`
- 断言: 到达=Change Password 标题；稳定=表单输入框与按钮可见
- 关联 API: 未在 07-api.md 明确列出
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-11-change-password-success.png

### SMOKE-12 Guest Check-in 页面可达（不可签到时间）
- 前置条件: 会议未到可签到时间
- 步骤: 打开 `/meetingattendance/checkin/guest?meeting=cmhhz1l2a005iy6ov1flgyohc&type=online`
- 断言: 到达=Online Meeting Check-in 标题；稳定=Check-in not yet available 提示
- 关联 API: [006], [014]
- 结果: 通过（阻止签到符合预期）
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-12-guest-checkin-blocked.png

### SMOKE-13 Check-in 入口页可达
- 前置条件: 已登录
- 步骤: 打开 `/meetingattendance/checkin`
- 断言: 到达=Meeting Check-in 标题；稳定=提示卡片可见
- 关联 API: 无
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-13-checkin-success.png

### SMOKE-14 Reports 页面可达
- 前置条件: 已登录，存在会议数据
- 步骤: 打开 `/meetingattendance/reports?meetingId=cmhhz1l2a005iy6ov1flgyohc`
- 断言: 到达=Meeting Reports 标题；稳定=统计卡/分布图/表格可见
- 关联 API: [046]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-14-reports-success.png

### SMOKE-15 Series 页面可达
- 前置条件: 已登录，存在系列会议数据
- 步骤: 打开 `/meetingattendance/series`
- 断言: 到达=Meeting Series 标题；稳定=系列卡片与实例列表可见
- 关联 API: [016]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-15-series-success.png

### SMOKE-16 Create Meeting 表单可达
- 前置条件: 已登录
- 步骤: 打开 `/meetingattendance/meetings/create`
- 断言: 到达=Create Meeting 标题；稳定=表单字段可见（未提交）
- 关联 API: [002]
- 结果: 通过
- 截图: testing/reports/meeting-attendance-2026-01-23-smoke/SMOKE-16-create-meeting-form.png

## 失败与阻断
- SMOKE-09 Teams Reports 显示无权限（管理员账号）。按 API 合同 [044]，ADMIN 应可访问，需要核查角色映射或前端权限判断。

## 资产清单
- 截图目录: testing/reports/meeting-attendance-2026-01-23-smoke/
- storageState: testing/reports/meeting-attendance-2026-01-23-smoke/storageState.json

## 覆盖度说明
- 覆盖页面: 16 个核心页面（Dashboard/Meetings/Detail/QR/Reports/Series/Templates/Users/Audit Logs/Teams/Check-in/Settings/Create）
- 未覆盖: 会议创建/编辑/删除、模板创建/编辑/删除、系列会议编辑/导出、签到提交、用户/权限管理写操作（按“只查看”约束未执行）

## 契约一致性
- Teams Reports 权限与 07-api.md [044] 不一致（ADMIN 被拒）。其余页面加载与文档契约未发现明显冲突。

## 流程说明
- 入口: Dashboard -> Meetings -> Meeting Detail -> QR/Reports
- 访客链路: Guest Check-in 页面可达（因未到签到时间，阻止提交）
- 管理链路: Templates/Users/Audit Logs/Series/Change Password/Create Meeting 表单可达
- Teams: Meetings/Config 可达；Reports 权限不通过
