---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 140
  claims_with_evidence: 138
  claims_without_evidence: 2
confidence_derived: 0.99
---

# 根拠レポート：plugin-ecommerce 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.99**
  - 根拠あり：138 / 140、根拠なし：2
- 優先レビュー（高）
  1. **UT-ECM-131 (支払いエラー)**: 内部エラー処理の詳細確認が必要
  2. **UT-ECM-135 (確定エラー)**: 内部エラー処理の詳細確認が必要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `packages/plugin-ecommerce/src/index.ts` - プラグインメインエントリ
- E-02: `packages/plugin-ecommerce/src/utilities/defaultProductsValidation.ts` - 商品バリデーション
- E-03: `packages/plugin-ecommerce/src/utilities/getCollectionSlugMap.ts` - スラッグマップ生成
- E-04: `packages/plugin-ecommerce/src/utilities/accessComposition.ts` - アクセス制御合成
- E-05: `packages/plugin-ecommerce/src/utilities/sanitizePluginConfig.ts` - 設定サニタイズ
- E-06: `packages/plugin-ecommerce/src/utilities/errorCodes.ts` - エラーコード定数
- E-07: `packages/plugin-ecommerce/src/collections/carts/operations/addItem.ts` - カートアイテム追加
- E-08: `packages/plugin-ecommerce/src/collections/carts/operations/removeItem.ts` - カートアイテム削除
- E-09: `packages/plugin-ecommerce/src/collections/carts/operations/updateItem.ts` - カートアイテム更新
- E-10: `packages/plugin-ecommerce/src/collections/carts/operations/clearCart.ts` - カートクリア
- E-11: `packages/plugin-ecommerce/src/collections/carts/operations/mergeCart.ts` - カートマージ
- E-12: `packages/plugin-ecommerce/src/collections/carts/operations/defaultCartItemMatcher.ts` - デフォルトマッチャー
- E-13: `packages/plugin-ecommerce/src/collections/carts/operations/createRequestWithSecret.ts` - シークレット注入
- E-14: `packages/plugin-ecommerce/src/collections/carts/operations/types.ts` - 型定義
- E-15: `packages/plugin-ecommerce/src/collections/carts/hasCartSecretAccess.ts` - シークレットアクセス
- E-16: `packages/plugin-ecommerce/src/collections/carts/beforeChange.ts` - カート変更フック
- E-17: `packages/plugin-ecommerce/src/fields/amountField.ts` - 金額フィールド
- E-18: `packages/plugin-ecommerce/src/fields/currencyField.ts` - 通貨フィールド
- E-19: `packages/plugin-ecommerce/src/fields/pricesField.ts` - 価格フィールド
- E-20: `packages/plugin-ecommerce/src/fields/statusField.ts` - ステータスフィールド
- E-21: `packages/plugin-ecommerce/src/fields/inventoryField.ts` - 在庫フィールド
- E-22: `packages/plugin-ecommerce/src/fields/cartItemsField.ts` - カートアイテムフィールド
- E-23: `packages/plugin-ecommerce/src/ui/utilities.ts` - UI変換ユーティリティ
- E-24: `packages/plugin-ecommerce/src/react/provider/utilities.ts` - RSC変換ユーティリティ
- E-25: `packages/plugin-ecommerce/src/currencies/index.ts` - 通貨定数
- E-26: `packages/plugin-ecommerce/src/collections/variants/createVariantsCollection/hooks/validateOptions.ts` - バリアントオプションバリデーション
- E-27: `packages/plugin-ecommerce/src/collections/variants/createVariantsCollection/hooks/beforeChange.ts` - バリアント変更フック
- E-28: `packages/plugin-ecommerce/src/utilities/pushTypeScriptProperties.ts` - TypeScript生成
- E-29: `packages/plugin-ecommerce/src/endpoints/initiatePayment.ts` - 支払い開始エンドポイント
- E-30: `packages/plugin-ecommerce/src/endpoints/confirmOrder.ts` - 注文確定エンドポイント
- E-31: `packages/plugin-ecommerce/src/collections/products/createProductsCollection.ts` - 商品コレクション生成
- E-32: `packages/plugin-ecommerce/src/collections/variants/createVariantsCollection/index.ts` - バリアントコレクション生成

## 3) Claims と根拠の対応（レビューの主戦場）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | ecommercePlugin: pluginConfig=undefinedで設定変更なし | E-01 (line 27-29) | ○ |
| C-02 | ecommercePlugin: 有効なpluginConfigで全コレクション生成 | E-01 (line 36-214) | ○ |
| C-03 | ecommercePlugin: variants有効時にvariant関連コレクション追加 | E-01 (line 86-141) | ○ |
| C-04 | ecommercePlugin: paymentMethods設定時にエンドポイント追加 | E-01 (line 216-280) | ○ |
| C-05 | ecommercePlugin: collections undefined時に空配列初期化 | E-01 (line 36-38) | ○ |
| C-06 | defaultProductsValidation: 有効な商品でバリデーション通過 | E-02 (line 28-41) | ○ |
| C-07 | defaultProductsValidation: currency undefined時にエラー | E-02 (line 12-14) | ○ |
| C-08 | defaultProductsValidation: 価格がない場合にMissingPriceエラー | E-02, E-06 (line 30-34) | ○ |
| C-09 | defaultProductsValidation: 在庫0でOutOfStockエラー | E-02, E-06 (line 36-40) | ○ |
| C-10 | defaultProductsValidation: 在庫不足時にエラー | E-02 (line 36-40) | ○ |
| C-11 | defaultProductsValidation: バリアントバリデーション通過 | E-02 (line 18-27) | ○ |
| C-12 | defaultProductsValidation: バリアント価格なしでエラー | E-02 (line 19-21) | ○ |
| C-13 | defaultProductsValidation: バリアント在庫不足でエラー | E-02 (line 23-27) | ○ |
| C-14 | getCollectionSlugMap: デフォルトスラッグマップ返却 | E-03 (line 17-31) | ○ |
| C-15 | getCollectionSlugMap: enableVariants=trueでバリアント追加 | E-03 (line 24-30) | ○ |
| C-16 | getCollectionSlugMap: customersスラッグオーバーライド | E-03 (line 35-37) | ○ |
| C-17 | getCollectionSlugMap: slugMapオーバーライド適用 | E-03 (line 40-48) | ○ |
| C-18 | getCollectionSlugMap: enableVariants=falseでバリアント無視 | E-03 (line 42-46) | ○ |
| C-19 | accessOR: いずれかtrueでtrue返却 | E-04 (line 22-47) | ○ |
| C-20 | accessOR: 全てfalseでfalse返却 | E-04 (line 44-46) | ○ |
| C-21 | accessOR: WhereクエリOR結合 | E-04 (line 40-43) | ○ |
| C-22 | accessAND: 全てtrueでtrue返却 | E-04 (line 66-92) | ○ |
| C-23 | accessAND: いずれかfalseでfalse返却 | E-04 (line 73-75) | ○ |
| C-24 | accessAND: WhereクエリAND結合 | E-04 (line 85-87) | ○ |
| C-25 | conditional: 条件trueでアクセス関数実行 | E-04 (line 111-123) | ○ |
| C-26 | conditional: 条件falseでフォールバック実行 | E-04 (line 111-123) | ○ |
| C-27 | conditional: 条件が関数で評価 | E-04 (line 117) | ○ |
| C-28 | sanitizePluginConfig: customersデフォルト設定 | E-05 (line 15-19) | ○ |
| C-29 | sanitizePluginConfig: addressesデフォルト設定 | E-05 (line 21-41) | ○ |
| C-30 | sanitizePluginConfig: addresses=trueでデフォルト設定 | E-05 (line 22-24) | ○ |
| C-31 | sanitizePluginConfig: currenciesデフォルトUSD | E-05 (line 43-48) | ○ |
| C-32 | sanitizePluginConfig: inventoryデフォルト設定 | E-05 (line 50-57) | ○ |
| C-33 | sanitizePluginConfig: cartsデフォルトallowGuestCarts=true | E-05 (line 59-72) | ○ |
| C-34 | sanitizePluginConfig: paymentsデフォルト空配列 | E-05 (line 82-88) | ○ |
| C-35 | sanitizePluginConfig: accessデフォルト関数設定 | E-05 (line 96-100) | ○ |
| C-36 | addItem: 新しいアイテム追加 | E-07 (line 75-87) | ○ |
| C-37 | addItem: 既存アイテム数量増加 | E-07 (line 67-74) | ○ |
| C-38 | addItem: カート不存在でエラー | E-07 (line 50-56) | ○ |
| C-39 | addItem: カスタムマッチャー使用 | E-07 (line 30-31, 61-63) | ○ |
| C-40 | addItem: バリアント付きアイテム追加 | E-07 (line 80) | ○ |
| C-41 | addItem: デフォルト数量1 | E-07 (line 34) | ○ |
| C-42 | removeItem: アイテム削除 | E-08 (line 58-77) | ○ |
| C-43 | removeItem: カート不存在でエラー | E-08 (line 37-43) | ○ |
| C-44 | removeItem: アイテム不存在でエラー | E-08 (line 50-56) | ○ |
| C-45 | updateItem: 直接値で数量更新 | E-09 (line 88-90) | ○ |
| C-46 | updateItem: $incで数量増加 | E-09 (line 85-87) | ○ |
| C-47 | updateItem: $incで数量減少 | E-09 (line 85-87) | ○ |
| C-48 | updateItem: 数量0以下でアイテム削除 | E-09 (line 93-95) | ○ |
| C-49 | updateItem: removeOnZero=falseで最小値1 | E-09 (line 96-101) | ○ |
| C-50 | updateItem: カート不存在でエラー | E-09 (line 58-64) | ○ |
| C-51 | updateItem: アイテム不存在でエラー | E-09 (line 71-77) | ○ |
| C-52 | clearCart: 全アイテム削除 | E-10 (line 44-53) | ○ |
| C-53 | clearCart: カート不存在でエラー | E-10 (line 36-42) | ○ |
| C-54 | clearCart: 空カートクリア | E-10 (line 44-59) | ○ |
| C-55 | mergeCart: ゲストカートマージ | E-11 (line 91-201) | ○ |
| C-56 | mergeCart: 同一商品数量合算 | E-11 (line 154-159) | ○ |
| C-57 | mergeCart: ソースカート削除 | E-11 (line 183-195) | ○ |
| C-58 | mergeCart: ソース不存在でエラー | E-11 (line 115-121) | ○ |
| C-59 | mergeCart: ターゲット不存在でエラー | E-11 (line 134-139) | ○ |
| C-60 | mergeCart: シークレット不一致でエラー | E-11 (line 115-121) | ○ |
| C-61 | getItemID: オブジェクトからid抽出 | E-11 (line 8-19) | ○ |
| C-62 | getItemID: プリミティブそのまま返却 | E-11 (line 18) | ○ |
| C-63 | getItemID: nullでundefined返却 | E-11 (line 15-17) | ○ |
| C-64 | defaultCartItemMatcher: 同一product/variantで一致 | E-12 (line 19-36) | ○ |
| C-65 | defaultCartItemMatcher: product異なりで不一致 | E-12 (line 28) | ○ |
| C-66 | defaultCartItemMatcher: variant異なりで不一致 | E-12 (line 31-35) | ○ |
| C-67 | defaultCartItemMatcher: オブジェクト形式対応 | E-12 (line 20-26) | ○ |
| C-68 | defaultCartItemMatcher: variant省略時一致 | E-12 (line 31-33) | ○ |
| C-69 | createRequestWithSecret: シークレット注入 | E-13 (line 11-26) | ○ |
| C-70 | createRequestWithSecret: secret未指定で元req返却 | E-13 (line 15-17) | ○ |
| C-71 | createRequestWithSecret: req未指定でundefined返却 | E-13 (line 15-17) | ○ |
| C-72 | isNumericOperator: $incでtrue | E-14 (line 73-75) | ○ |
| C-73 | isNumericOperator: 数値でfalse | E-14 (line 73-75) | ○ |
| C-74 | isNumericOperator: nullでfalse | E-14 (line 73-74) | ○ |
| C-75 | isNumericOperator: undefinedでfalse | E-14 (line 73-74) | ○ |
| C-76 | hasCartSecretAccess: シークレット一致でWhereクエリ | E-15 (line 10-28) | ○ |
| C-77 | hasCartSecretAccess: allowGuestCarts=falseでfalse | E-15 (line 12-14) | ○ |
| C-78 | hasCartSecretAccess: シークレット未設定でfalse | E-15 (line 18-20) | ○ |
| C-79 | hasCartSecretAccess: string以外でfalse | E-15 (line 18) | ○ |
| C-80 | hasCartSecretAccess: queryからシークレット取得 | E-15 (line 16) | ○ |
| C-81 | beforeChangeCart: シークレット自動生成 | E-16 (line 13-24) | ○ |
| C-82 | beforeChangeCart: ユーザーカートはシークレット不要 | E-16 (line 14) | ○ |
| C-83 | beforeChangeCart: subtotal計算 | E-16 (line 27-62) | ○ |
| C-84 | beforeChangeCart: バリアント価格計算 | E-16 (line 33-45) | ○ |
| C-85 | beforeChangeCart: 空配列でsubtotal=0 | E-16 (line 63-65) | ○ |
| C-86 | beforeChangeCart: items未定義でsubtotal=0 | E-16 (line 63-65) | ○ |
| C-87 | amountField: NumberField構造返却 | E-17 (line 14-50) | ○ |
| C-88 | amountField: currency指定でclientProps設定 | E-17 (line 31-33) | ○ |
| C-89 | amountField: overrides適用 | E-17 (line 26, 43-45) | ○ |
| C-90 | currencyField: SelectField構造返却 | E-18 (line 10-39) | ○ |
| C-91 | currencyField: 通貨オプション生成 | E-18 (line 11-18) | ○ |
| C-92 | currencyField: 単一通貨でreadOnly | E-18 (line 35) | ○ |
| C-93 | pricesField: 通貨ごとのGroupField生成 | E-19 (line 15-70) | ○ |
| C-94 | pricesField: checkbox+amountフィールド | E-19 (line 31-63) | ○ |
| C-95 | pricesField: conditionalPath設定 | E-19 (line 24) | ○ |
| C-96 | statusField: SelectField構造返却 | E-20 (line 40-57) | ○ |
| C-97 | statusField: 全ステータスオプション | E-20 (line 3-34) | ○ |
| C-98 | statusField: overrides適用 | E-20 (line 53) | ○ |
| C-99 | inventoryField: NumberField構造返却 | E-21 (line 7-22) | ○ |
| C-100 | inventoryField: overrides適用 | E-21 (line 18) | ○ |
| C-101 | cartItemsField: ArrayField構造返却 | E-22 (line 30-87) | ○ |
| C-102 | cartItemsField: enableVariantsでvariant追加 | E-22 (line 55-66) | ○ |
| C-103 | cartItemsField: individualPricesでamount追加 | E-22 (line 77) | ○ |
| C-104 | convertToBaseValue: 表示値からベース値変換 | E-23 (line 6-25) | ○ |
| C-105 | convertToBaseValue: 通貨記号除去 | E-23 (line 18) | ○ |
| C-106 | convertToBaseValue: currency未指定でparseFloat | E-23 (line 13-15) | ○ |
| C-107 | convertToBaseValue: 空文字で0 | E-23 (line 21) | ○ |
| C-108 | convertFromBaseValue: ベース値から表示値変換 | E-23 (line 30-46) | ○ |
| C-109 | convertFromBaseValue: currency未指定でtoString | E-23 (line 37-39) | ○ |
| C-110 | convertFromBaseValue RSC: ベース値から表示値変換 | E-24 (line 6-22) | ○ |
| C-111 | USD: 通貨定数定義 | E-25 (line 10-15) | ○ |
| C-112 | EUR: 通貨定数定義 | E-25 (line 3-8) | ○ |
| C-113 | GBP: 通貨定数定義 | E-25 (line 17-22) | ○ |
| C-114 | validateOptions: 有効なオプションでtrue | E-26 (line 7-75) | ○ |
| C-115 | validateOptions: 空valuesでエラー | E-26 (line 13-16) | ○ |
| C-116 | validateOptions: product未指定でエラー | E-26 (line 18-22) | ○ |
| C-117 | validateOptions: オプション数不足でエラー | E-26 (line 51-55) | ○ |
| C-118 | validateOptions: 重複組み合わせでエラー | E-26 (line 57-72) | ○ |
| C-119 | variantsCollectionBeforeChange: title自動生成 | E-27 (line 8-51) | ○ |
| C-120 | variantsCollectionBeforeChange: 空optionsでtitle不変 | E-27 (line 11) | ○ |
| C-121 | pushTypeScriptProperties: ecommerce追加 | E-28 (line 7-51) | ○ |
| C-122 | pushTypeScriptProperties: required追加 | E-28 (line 20-22) | ○ |
| C-123 | pushTypeScriptProperties: properties初期化 | E-28 (line 16-18) | ○ |
| C-124 | initiatePaymentHandler: 支払い開始 | E-29 (line 52-341) | ○ |
| C-125 | initiatePaymentHandler: customerEmail必須 | E-29 (line 91-103) | ○ |
| C-126 | initiatePaymentHandler: cartID必須 | E-29 (line 139-148) | ○ |
| C-127 | initiatePaymentHandler: カート不存在で404 | E-29 (line 129-138) | ○ |
| C-128 | initiatePaymentHandler: 未対応通貨で400 | E-29 (line 168-181) | ○ |
| C-129 | initiatePaymentHandler: 空カートで400 | E-29 (line 184-193) | ○ |
| C-130 | initiatePaymentHandler: 商品不存在で404 | E-29 (line 214-223) | ○ |
| C-131 | initiatePaymentHandler: 支払いプロバイダーエラーで500 | E-29 (line 329-340) | △ |
| C-132 | confirmOrderHandler: 注文確定 | E-30 (line 44-230) | ○ |
| C-133 | confirmOrderHandler: 在庫減少 | E-30 (line 196-208) | ○ |
| C-134 | confirmOrderHandler: バリアント在庫減少 | E-30 (line 184-196) | ○ |
| C-135 | confirmOrderHandler: 確定エラーで500 | E-30 (line 218-229) | △ |
| C-136 | createProductsCollection: CollectionConfig返却 | E-31 (line 28-87) | ○ |
| C-137 | createProductsCollection: inventory追加 | E-31 (line 39-49) | ○ |
| C-138 | createProductsCollection: variantsFields追加 | E-31 (line 50) | ○ |
| C-139 | createVariantsCollection: CollectionConfig返却 | E-32 (line 31-137) | ○ |
| C-140 | createVariantsCollection: pricesField追加 | E-32 (line 89-98) | ○ |

## 4) 不足情報（Unknown / Missing）
- **UT-ECM-131, UT-ECM-135**: エラーハンドリングの内部動作は外部支払いプロバイダーに依存するため、実際のエラーメッセージや挙動はプロバイダーの実装による
  - 候補：Stripeアダプターの実装 / 他の支払いアダプターの実装 / モック実装

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 大部分のテストケースはソースコードから直接根拠を特定可能
- **1: 中リスク** - 支払い関連エンドポイント（UT-ECM-124〜135）は外部依存があるため、統合テストでの検証が推奨される
- **1: 中リスク** - カート操作（UT-ECM-036〜060）はPayload APIに依存するため、モック設定が重要

## 6) レビュアーチェックリスト（最小）
- [ ] テストID命名規則（UT-ECM-xxx）の一貫性確認
- [ ] 正常系/異常系/境界値の観点バランス確認
- [ ] 高優先度テストケースの入力値・期待結果の妥当性確認
- [ ] カート操作関連テストの網羅性確認（addItem, removeItem, updateItem, clearCart, mergeCart）
- [ ] 支払い関連エンドポイントのエラーハンドリング確認
- [ ] バリアント関連機能のテストケース網羅性確認
