Initial baseline: LaraBlog core with plugin commerce surface.

Captures the current working tree after theme slots, ArticleAccess, and the payment / paid-content plugins so subsequent work has a reviewable git history.
This commit is contained in:
ak
2026-08-12 01:15:38 +08:00
commit 263b98b218
337 changed files with 31393 additions and 0 deletions
@@ -0,0 +1,57 @@
# 插件扩展面 + 支付 / 内容付费 — 待测清单
## 状态
- 对应 SPEC`docs/specs/plugin-extension-commerce/SPEC.md`
- 最近更新:2026-08-12 01:12
## 待测项
### 未启用商务插件
- [x] 场景:免费文 Web;步骤:打开 show;期望:全文可见,行为同现网
- [x] 场景:密码文 Web;步骤:未解锁打开 → 输错 → 输对;期望:密码页 / 错误 / 全文
- [x] 场景:密码文 API;步骤:GET `/api/v1/articles/{id}`;期望:无 `content`/`content_html` 全文,有 `access.status=need_password`
- [x] 场景:密码文 RSS;步骤:打开 `/rss.xml`;期望:该条目无全文 HTML
### 依赖与插件管理
- [x] 场景:仅启用 paid-content;步骤:后台启用;期望:拒绝并提示需要 payment
- [x] 场景:先 payment 再 paid-content;步骤:依次启用;期望:成功
- [x] 场景:查看说明;步骤:插件卡片打开 docs;期望:可见 README 内容
- [x] 场景:禁用后 UI;步骤:禁用两插件;期望:订单菜单/付费表单 Section 消失
- [x] 场景:禁用被依赖的 payment;期望:拒绝并提示 dependents
### payment Stub
- [x] 场景:登录建单支付;步骤:对测试商品走 checkout → 模拟成功;期望:order=paid、entitlement 有效、触发逻辑可观测
- [ ] 场景:后台标记已支付;步骤:pending 订单点标记;期望:同上入账(人工)
- [x] 场景:重复购买;步骤:已有权益再 checkout;期望:拒绝并提示
- [x] 场景:未登录 checkout;步骤:访问建单;期望:重定向 `/login.shtml`(非 500
### paid-content
- [x] 场景:后台定价;步骤:编辑文章启用付费设价格保存;期望:`article_products` 有记录
- [x] 场景:互斥;步骤:同时设密码与付费启用;期望:校验失败
- [x] 场景:未购 Web(含未登录);步骤:打开付费文;期望:试读+购买,`need_purchase`,无全文
- [x] 场景:购买后 Web;步骤:登录 Stub 支付后打开;期望:全文
- [x] 场景:作者/admin;步骤:作者或 admin 打开未购付费文;期望:全文
- [x] 场景:付费文 API/RSS;步骤:匿名拉取;期望:无全文
- [x] 场景:首页列表;期望:不泄露付费/密码全文
### Review 修复验证(Bugbot 2026-08-12
- [x] 场景:`trial_value` 大于正文长度的付费短文;期望:Web/API 均看不到结尾内容
- [x] 场景:两个 `article.access` 监听器(先收紧后放行 + 一个返回非法值);期望:最终仍 `need_purchase`
- [x] 场景:manifest `docs``../../../../.env`;期望:`docsPath`/`readDocs` 返回 null
- [x] 场景:同一商品连续两次 checkout;期望:复用同一 pending 单
- [x] 场景:已由 A 单开通权益后对 B 单 `markPaid`;期望:抛错拒绝
- [x] 场景:隐藏/未发布付费文 checkout;期望:422 且不建单
- [x] 场景:复用 pending 单时价格已变;期望:订单与明细按新价刷新,仍只有 1 张单
### 回归
- [x] 场景:免费文 API/RSS;期望:仍有全文(或既有摘要策略不变)
- [x] 场景:主题槽/snippet;期望:不受影响
- [x] 场景:`php artisan test` 相关用例全绿(40 passed
## 变更记录
| 时间 | 原因 | 变更 |
|------|------|------|
| 2026-08-12 00:17 | SPEC 定稿后初版 | 创建待测清单 |
| 2026-08-12 00:50 | 实现+qodercli 闭环 | 勾选自动化覆盖项;后台标记已支付留人工 |
| 2026-08-12 01:01 | Bugbot review 修复 | 新增 6 条 Review 修复验证项,全部自动化覆盖 |
| 2026-08-12 01:12 | 复用单重新定价 | 新增第 7 条验证项(新价刷新且不叠单) |