## Context

当前前端 Playwright 配置会启动本机 Vite 服务，资产页测试通过 `authenticated-test.js` 模拟已登录身份；该文件本身不是 `*.spec.js`，因此并不执行登录页、失败提示或退出路由的测试。黑洞背景图片位于 `frontend/img/black_hole.png`，现已由 Vue 导入以供构建输出，但尚未进入 Git 暂存区。

本变更只补充验收与版本控制，不改变登录请求、Cookie、JWT、路由守卫、数据库或后端。

| 范围文件 | 文件用途（白话） | 关联逻辑 | 风险 |
| --- | --- | --- | --- |
| `frontend/tests/login-experience.spec.js` | 实际执行登录页测试 | Playwright → 模拟 `/api/auth/*` → `LoginView`/路由守卫 | Mock 与真实响应结构不一致会产生假通过 |
| `frontend/tests/authenticated-test.js` | 已登录测试共用的请求模拟 | 资产测试 → `/api/auth/me` 与 CSRF 模拟 → 路由守卫 | 调整后影响既有资产测试 |
| `frontend/img/black_hole.png` | 登录页黑洞背景资源 | Vue 导入 → Vite 构建输出 → 登录页背景 | 未提交会使其他环境缺图 |
| `frontend/src/modules/auth/LoginView.js` | 被测试的现有登录页面 | 表单 → `signIn` → 欢迎提示/跳转 | 本变更不修改业务逻辑 |

## Goals / Non-Goals

**Goals:**

- 用独立可执行的 `*.spec.js` 覆盖未登录重定向、账号密码提交、失败提示、Jeddy 专属提示、退出跳转与黑洞背景资源。
- 使用与生产接口相同的 `ApiResponse` 信封格式（接口统一返回的 `code/message/data` 结构）模拟响应，避免测试绕过真实前端解析逻辑。
- 将背景图片作为代码提交的一部分。

**Non-Goals:**

- 不测试真实数据库密码、不请求真实后端、不写入账号数据。
- 不修改认证实现、视觉设计、路由行为或新增记住账号等功能。
- 不引入新的测试依赖。

## Decisions

### 1. 使用网络拦截而非真实账号登录

Playwright 将拦截 `/api/auth/login`、`/api/auth/me`、`/api/auth/logout` 和 `/api/auth/csrf`，并按真实接口形状返回数据。

- 选择原因：测试不需要真实 BCrypt 密码、JWT 密钥或数据库，运行可重复且不会污染测试数据。
- 替代方案：连接本地数据库并创建测试账号。未采用，因为会增加密码、迁移和清理失败的风险。

### 2. 登录场景放入独立 `login-experience.spec.js`

让 Playwright 默认匹配文件名并实际执行；现有 `authenticated-test.js` 仅保留为被资产测试导入的辅助模块。

- 选择原因：测试入口清晰，失败报告能直接定位登录体验。
- 替代方案：将辅助文件重命名为测试文件。未采用，因为它本身没有独立断言，重命名会制造空测试。

### 3. 资源检查采用构建产物与源码路径双重断言

测试验证登录页使用背景图的 CSS 变量，构建命令验证 Vite 产出带哈希的图片文件；Git 暂存验证确保资源随提交传播。

- 选择原因：只检查 DOM 无法证明生产包包含图片；只检查 Git 也无法证明页面引用正确。
- 替代方案：把图片转 Base64 写入 CSS。未采用，因为会扩大样式文件且违背资源独立管理要求。

## Risks / Trade-offs

- [Mock 覆盖不到后端协议变化] → 测试严格采用当前 `code/message/data` 信封，并保留后端 Maven 测试作为另一层校验。
- [登录页文案或提示库异步渲染造成脆弱断言] → 断言可见文本和路由结果，不依赖动画时间或内部 DOM 结构。
- [背景图图片体积约 1.9MB] → 不压缩用户提供的高清资源；构建检查确认其正常输出，并在后续性能工作中单独评估。

## Migration Plan

1. 添加测试并将图片加入 Git 暂存区。
2. 执行 `npm run test:e2e` 与 `npm run build`。
3. 失败时只回退新增测试和资源暂存，不影响认证与后端代码。

## Open Questions

- 无；测试账号响应使用固定非敏感模拟值，Jeddy 场景仅用于前端提示条件验证。
