Appearance
有料記事 codoc ペイウォール シナリオ・受け入れ手順
有料記事(月刊まっく)の 自サイト HTML + codoc ペイウォール を手動で確認するための手順です。
対象範囲
- 基本情報の販売価格 meta(
paid_article_codoc_price)の保存・表示 - 訪問者経路: intro + 安定境界(
data-id="codoc-tag")のみ。有料セクション HTML はレスポンスに載せない - 購入後の解錠表示(codoc プラグイン側)
- 販売未開始(レガシーで meta が空)時の境界なし表示
- 編集者の通常閲覧/一般訪問者プレビュー
- 公開前の運用チェック(価格設定 → 保存同期 → 公開 → 実機)
非対象
- 旧 note リード CTA /
NOTE_URL販売導線 - 日別記事末尾の投げゼニ(
CodocSupportWidgetService) db_paid_article_purchaseと codoc 購入の自動同期- サイト内 Stripe Checkout(削除済み)
テスト対象の設計書
- 決済・アクセス制御方式の選定(§3 採用方式・§3.2 価格未設定・§4 未購入者表示)
- Commerce モジュール
前提
- Local または Staging で実施する。本番課金・本番ユーザーでは実施しない(購入シナリオはテスト用アカウント/テスト決済がある場合のみ)。
- codoc プラグインが有効であること(未導入時はフェイルクローズで intro のみ/マーカー表示。S1 のペイウォール UI 確認にはプラグインが必要)。
- テスト用の公開済み
paid_article投稿があること(intro と有料セクションの両方が入っている号)。 - 基本情報の販売価格は非負整数。空欄保存時は既定値 1000 が保存される(meta 削除ではない)。
事前準備
1. 対象記事を決める
- 編集画面 URL と公開 URL を控える
- intro に識別しやすい文言、有料セクションにページソースで探せる識別文字列(機種名・表の見出しなど)があること
2. ブラウザ
- 未購入確認: シークレットウィンドウ(ログアウト)
- 編集者確認: 編集権限のあるアカウント
- 購入後確認: codoc 側で購入済み(またはテスト購入可能な)セッション
3. 販売価格の確認
管理画面 → 有料記事 → 基本情報の「販売価格(円)」が整数で入っていること。未設定のレガシー号を開くと編集画面オープン時に既定値 1000 が永続化される点に注意(S3 は意図的に空 meta を用意する)。
手動シナリオ
S1. 未購入(訪問者)— intro + ペイウォール境界
- シークレットウィンドウで対象記事の公開 URL を開く。
- intro(無料部分)が表示されることを確認する。
- ページ内に
[data-id="codoc-tag"].codoc-entries相当の境界があること、codoc の購入 UI(ペイウォール)が出ることを確認する。 - 有料セクションの識別文字列が 画面上にもページソース(表示 HTML)にも含まれないことを確認する。
- 境界 HTML に
data-priceやwp:codoc/codoc-blockが含まれないことを確認する(価格は訪問者レスポンスに出さない)。
S2. 購入後 — 有料セクションの解錠
- codoc 側で対象号を購入する(または購入済みアカウントでログインした状態にする)。
- 同じ公開 URL を再読込する。
- intro に加え、有料セクション(レスポンシブ HTML・表・グラフ等)が表示されることを確認する。
- スマホ幅でも本文が読めることを確認する。
PHPUnit / 現行 e2e では codoc 解錠を模擬しない。S2 は手動必須。
S3. 販売未開始(レガシー空 meta)— 境界なし
通常運用では空欄保存で 1000 が入るため、未開始は meta が空のまま残っているレガシー号向け。
- 公開済みのテスト専用号で
paid_article_codoc_priceを空にする(WP-CLI 例:wp post meta delete <post_id> paid_article_codoc_price)。下書き/非公開だとゲストが URL を開けないため使わない。編集画面を開くと既定値が保存されるため、空のまま確認するなら 編集画面を開かずに フロントを見る。 - ログアウト(シークレット)でその号の 公開 URL を開く。
- ペイウォール境界(
data-id="codoc-tag")が 挿入されないこと、visible セクションが境界なしで並ぶことを確認する。 - 確認後は meta を整数価格に戻し、公開運用号を誤って空のままにしない。
S4. 編集者 — 通常全文/訪問者プレビュー
- 編集権限ユーザーで公開 URL を開く(visitor preview なし)。
- 境界なしで全文(intro+有料セクション)が見えることを確認する。
- 基本情報の「一般訪問者プレビュー」リンク(
?paid_article_preview=visitor)を開く。 - 価格ありのとき、S1 と同様に intro +
codoc-tag境界経路になることを確認する。
運用チェックリスト(公開前)
号を公開する直前、または価格変更後に実施する。
| # | 確認項目 | 結果 |
|---|---|---|
| 1 | 基本情報で販売価格(円・非負整数)を設定し更新した | [ ] |
| 2 | 保存後、同期用 post_content に Gutenberg 互換ブロックが載っている(任意で DB/編集画面で確認) | [ ] |
| 3 | ステータスを公開にした | [ ] |
| 4 | シークレットで公開 URL を開き、S1(intro+ペイウォール)を満たす | [ ] |
| 5 | スマホ実機(または DevTools のモバイル幅)でペイウォール UI と intro を確認した | [ ] |
| 6 | (初号など)必要ならテスト購入で S2 の解錠を確認した | [ ] |
受け入れ条件と自動テスト対応
| 受け入れ条件 | 確認方法 |
|---|---|
| 販売価格の非負整数・空欄は既定値 1000・不正は既存値保持 | PHPUnit(下表) |
| 未購入で intro のみ・有料 HTML 非出力・安定境界 | S1 手動 + PHPUnit + e2e |
| 購入後に有料セクションが見える | S2 手動のみ |
| 販売価格未設定(レガシー空)は境界なし | S3 手動 + PHPUnit |
| 編集者は境界なし全文/visitor preview は境界経路 | S4 手動 + PHPUnit |
| 運用: 価格設定→公開→実機ペイウォール | 運用チェックリスト |
PHPUnit 対応表
| 観点 | テストクラス / メソッド |
|---|---|
| 価格保存(有効・0・空→1000) | PaidArticleBasicInfoMetaBoxTest::test_save_meta_box_updates_codoc_price / ..._allows_zero_codoc_price / ..._writes_default_codoc_price_when_empty |
| 価格不正(小数・負数) | ..._skips_codoc_update_when_price_invalid / ..._skips_codoc_update_when_price_negative |
| 訪問者境界・有料非出力 | PaidArticleTemplateServiceTest::test_build_presentation_inserts_codoc_boundary_for_visitor_when_price_set |
| 編集者・空価格・プラグイン無 | ..._skips_boundary_for_editor_without_visitor_preview / ..._skips_boundary_when_price_empty / ..._skips_boundary_when_codoc_shortcode_missing / ..._fail_closed_marker_when_intro_missing_and_codoc_absent |
| visitor preview | ..._inserts_boundary_for_editor_visitor_preview |
| sync ペイロード | ..._build_codoc_sync_post_content_includes_gutenberg_block_and_sections / ..._build_codoc_sync_post_content_returns_null_when_price_empty / PaidArticleCodocSyncHooksTest |
bash
vendor/bin/phpunit \
tests/Unit/PostType/PaidArticle/Admin/EditScreen/MetaFields/PaidArticleBasicInfoMetaBoxTest.php \
tests/Unit/Service/PaidArticleTemplateService/PaidArticleTemplateServiceTest.php \
tests/Unit/PostType/PaidArticle/Hooks/PaidArticleCodocSyncHooksTest.phpE2E
未購入でテンプレ到達・intro+codoc 境界の回帰は tests/e2e/paid-article-access.spec.js。購入後解錠は本手順の S2 を正とする。実行は Playwright E2E 実行ガイド を参照。
片付け
- S3 で空にした meta は整数価格に戻す
- テスト購入データは Staging/codoc 側の方針に従い削除または放置を決める
- 本番では本手順の購入操作を行わない