# E2E 测试（骨架）

本目录存放前端端到端测试。当前为**静态骨架，未实测运行**——仓库无 `node_modules` 且无 lockfile，依赖处于冻结状态，本文件尚未真正执行过。

## 前置条件

```bash
cd security-center-frontend
npm install                      # 需先解冻依赖（当前约束下未执行）
npm install -D @playwright/test  # package.json 当前未包含 Playwright，需补
npx playwright install chromium
```

## 运行

```bash
# 终端 1：后端（默认 :8080），终端 2：前端（默认 :3000）
cd security-center-frontend

E2E_BASE_URL=http://localhost:3000 \
E2E_API_URL=http://localhost:8080 \
E2E_ACCESS_TOKEN=<测试用户的人类 JWT> \
npx playwright test tests/e2e/api-keys.spec.ts
```

## 环境变量

| 变量 | 说明 | 默认 |
|------|------|------|
| `E2E_BASE_URL` | 前端地址 | `http://localhost:3000` |
| `E2E_API_URL` | 后端地址 | `http://localhost:8080` |
| `E2E_ACCESS_TOKEN` | 测试用户（普通用户，持有 `agent:manage_own_keys` 权限及至少一项 `caasm:view_*` 权限）的人类 JWT | 无（缺失则全部 skip） |

## 关于登录

系统登录是 SSO（Google/Auth0，`POST /api/v1/auth/google/login` 等，见后端 `handler/auth/handler.go`），无法做 UI 自动化登录。测试采用 **token 注入**：在页面脚本加载前写入 `localStorage["security-center:tokens"]`（键名对齐 `lib/api/client.ts:30`）。

获取 token 的方式（任选）：

1. 浏览器手动 SSO 登录一次，从 DevTools → Application → Local Storage 复制 `security-center:tokens` 里的 `accessToken`；
2. 开发环境开 `auth.bypass_sso` 时，用 dev 登录接口直接换取（视环境配置而定）。

token 有过期时间，过期后需重新获取。

## 断言注意事项

- 后端统一信封：`response.Error` 一律 **HTTP 200 + body.code 非 0**（见 `docs/plan/001-agent-mcp-development-plan.md` §0），API 断言一律断 `body.code`，不断言 HTTP 状态码。
- 用量统计基于审计表聚合，写入到可见可能有秒级延迟，相关断言用 `expect.poll` 轮询。
- 测试创建的 key 在 `afterEach` 统一吊销清理。
