Skip to content

建立核心业务测试套件(第一阶段) #20

Description

@mmm8091

背景

仓库已有 TypeScript 类型检查、公开 JSON 校验和完整构建,但没有 test 脚本或自动化行为测试。它们能证明“能编译”,不能证明权限、时间窗口和状态转换符合业务规则。

目标

使用 Vitest 建立不依赖生产 D1、网络或真实密钥的第一阶段测试地基,优先覆盖可以纯函数验证的高风险规则。

范围

  • 为仓库添加 pnpm testpnpm test:watch
  • pnpm test 纳入 pnpm check 与 PR CI。
  • 覆盖至少这些行为:
    • entitlement 能力映射,尤其是 course:full 对课程、论坛、MCP 读写的兼容覆盖;
    • Agent scope 解析和 Bearer token 解析;
    • 课程反馈状态校验与同步论坛正文格式;
    • Asia/Shanghai 上一自然日摘要窗口,包含月末、年末和夏令时无关性;
    • 卡密标准化;
    • 课程合并、父章节推断与相邻章节;
    • 公开骚话抽取中可独立、确定性验证的部分。
  • 测试不得连接生产 Cloudflare、发送邮件或读取真实环境秘密。
  • 在测试 README 或代码注释中列出下一阶段仍需 D1 集成测试的服务层:反馈 upsert/撤回、关注静音语义、点赞限制、摘要幂等、MCP 实时 entitlement 门禁。

验收条件

  • pnpm test 在本地和 GitHub Actions 可重复通过。
  • pnpm check 同时运行公开数据校验、测试和 TypeScript 类型检查。
  • 至少包含一个摘要跨月或跨年测试。
  • 至少包含一个证明 course:full 不会因细 scope 引入而掉权限的测试。
  • 测试失败不会访问或修改远程 D1。
  • pnpm build 继续通过。

非目标

  • 本 Issue 不建立完整浏览器 E2E。
  • 本 Issue 不模拟 DirectMail 或 Cloudflare Cron。
  • 本 Issue 不为了测试而大规模重构服务层。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:auth账号、权限与安全area:course课程内容与课程体验area:deployment部署、CI 与运行环境area:forum论坛与社区互动ready-for-agent定义完整,Agent 可冷启动接手

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions