---
generated_at: 2026-01-29 10:30:00
metrics:
  claims_total: 120
  claims_with_evidence: 118
  claims_without_evidence: 2
confidence_derived: 0.98
---

# 根拠レポート：Core-Checkout-Cart 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：118 / 120、根拠なし：2
- 優先レビュー（高）
  1. **C-056（UT-CART-056）**：pruneメソッドの日数パラメータの具体的な動作確認が必要
  2. **C-119（UT-CART-119）**：assembleSalesChannelContextのoverrideOptionsの詳細確認が必要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/Core/Checkout/Cart/Cart.php` - Cartクラスの実装
- E-02: `src/Core/Checkout/Cart/LineItem/LineItem.php` - LineItemクラスの実装
- E-03: `src/Core/Checkout/Cart/LineItem/LineItemCollection.php` - LineItemCollectionクラスの実装
- E-04: `src/Core/Checkout/Cart/LineItem/QuantityInformation.php` - QuantityInformationクラスの実装
- E-05: `src/Core/Checkout/Cart/CartCalculator.php` - CartCalculatorクラスの実装
- E-06: `src/Core/Checkout/Cart/CartPersister.php` - CartPersisterクラスの実装
- E-07: `src/Core/Checkout/Cart/CartRuleLoader.php` - CartRuleLoaderクラスの実装
- E-08: `src/Core/Checkout/Cart/Processor.php` - Processorクラスの実装
- E-09: `src/Core/Checkout/Cart/Validator.php` - Validatorクラスの実装
- E-10: `src/Core/Checkout/Cart/Price/Struct/CartPrice.php` - CartPriceクラスの実装
- E-11: `src/Core/Checkout/Cart/Price/Struct/CalculatedPrice.php` - CalculatedPriceクラスの実装
- E-12: `src/Core/Checkout/Cart/Price/AmountCalculator.php` - AmountCalculatorクラスの実装
- E-13: `src/Core/Checkout/Cart/Tax/TaxCalculator.php` - TaxCalculatorクラスの実装
- E-14: `src/Core/Checkout/Cart/CartBehavior.php` - CartBehaviorクラスの実装
- E-15: `src/Core/Checkout/Cart/CartCompressor.php` - CartCompressorクラスの実装
- E-16: `src/Core/Checkout/Cart/Error/ErrorCollection.php` - ErrorCollectionクラスの実装
- E-17: `src/Core/Checkout/Cart/Delivery/Struct/DeliveryCollection.php` - DeliveryCollectionクラスの実装
- E-18: `src/Core/Checkout/Cart/LineItem/LineItemQuantitySplitter.php` - LineItemQuantitySplitterクラスの実装
- E-19: `src/Core/Checkout/Cart/Order/OrderConverter.php` - OrderConverterクラスの実装
- E-20: `src/Core/Checkout/Cart/CartException.php` - CartExceptionクラスの実装

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

### Cart クラス（UT-CART-001〜014）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | Cartインスタンスが正しく初期化されること | E-01 (L67-74) | ○ |
| C-002 | LineItemがカートに追加されること | E-01 (L153-158) | ○ |
| C-003 | 同一IDで異なるTypeのLineItem追加時に例外がスローされること | E-03 (L36-38) | ○ |
| C-004 | 存在するLineItemが取得できること | E-01 (L163-166) | ○ |
| C-005 | 存在しないLineItem取得時にnullが返却されること | E-03 (L73-80) | ○ |
| C-006 | LineItemの存在確認がtrueを返すこと | E-01 (L168-170) | ○ |
| C-007 | LineItemの存在確認がfalseを返すこと | E-01 (L168-170) | ○ |
| C-008 | removable=trueのLineItemが削除されること | E-01 (L176-189) | ○ |
| C-009 | 存在しないLineItem削除時に例外がスローされること | E-01 (L180-182), E-20 | ○ |
| C-010 | removable=falseのLineItem削除時に例外がスローされること | E-01 (L184-186), E-20 | ○ |
| C-011 | 配送コストの合計が正しく計算されること | E-01 (L203-206) | ○ |
| C-012 | カートが変更済みとしてマークされること | E-01 (L227-229) | ○ |
| C-013 | カートが未変更としてマークされること | E-01 (L231-235) | ○ |
| C-014 | データが未設定の場合に空のCartDataCollectionが返却されること | E-01 (L208-215) | ○ |

### LineItem クラス（UT-CART-015〜032）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-015 | LineItemインスタンスが正しく初期化されること | E-02 (L103-118) | ○ |
| C-016 | quantity<1の場合に例外がスローされること | E-02 (L114-116), E-20 | ○ |
| C-017 | 識別子が100文字を超える場合に例外がスローされること | E-02 (L696-699), E-02 (L30) | ○ |
| C-018 | 識別子に無効な文字が含まれる場合に例外がスローされること | E-02 (L701-703) | ○ |
| C-019 | stackable=trueの場合に数量が変更できること | E-02 (L179-200) | ○ |
| C-020 | stackable=falseの場合に例外がスローされること | E-02 (L185-187), E-20 | ○ |
| C-021 | quantity<1の場合に例外がスローされること | E-02 (L181-183) | ○ |
| C-022 | 子LineItemの数量が親に比例して更新されること | E-02 (L189-191, L654-672) | ○ |
| C-023 | スカラー値がペイロードに設定できること | E-02 (L258-276) | ○ |
| C-024 | 配列がペイロードに設定できること | E-02 (L265, L258-276) | ○ |
| C-025 | オブジェクトがペイロードに設定できないこと | E-02 (L265-267), E-20 | ○ |
| C-026 | ペイロード値が削除できること | E-02 (L244-251) | ○ |
| C-027 | 存在しないキー削除時に例外がスローされること | E-02 (L246-248), E-20 | ○ |
| C-028 | 子LineItemが追加できること | E-02 (L415-421) | ○ |
| C-029 | 子の数量が親の倍数でない場合に例外がスローされること | E-02 (L677-693), E-20 | ○ |
| C-030 | ペイロードのproductTypeが一致する場合にtrueを返すこと | E-02 (L579-586) | ○ |
| C-031 | productTypeが未設定の場合にfalseを返すこと | E-02 (L581-583) | ○ |
| C-032 | ハッシュ用コンテンツが正しく生成されること | E-02 (L606-620) | ○ |

### LineItemCollection クラス（UT-CART-033〜042）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-033 | 既存の同一ID LineItem追加時に数量が加算されること | E-03 (L40-50) | ○ |
| C-034 | 同一IDで異なるTypeのLineItem追加時に例外がスローされること | E-03 (L36-38), E-20 | ○ |
| C-035 | 数量オーバーフロー時は追加されないこと | E-03 (L42-45) | ○ |
| C-036 | 指定タイプのLineItemのみがフィルタされること | E-03 (L99-104) | ○ |
| C-037 | good=trueのLineItemのみがフィルタされること | E-03 (L186-191) | ○ |
| C-038 | ネストしたLineItemがフラット化されること | E-03 (L253-265) | ○ |
| C-039 | 全LineItemの価格コレクションが取得できること | E-03 (L144-149) | ○ |
| C-040 | 全LineItemの数量合計が正しく計算されること | E-03 (L235-238) | ○ |
| C-041 | 価格定義の優先度でソートされること | E-03 (L159-184) | ○ |
| C-042 | 指定productTypeのLineItemが存在する場合にtrueを返すこと | E-03 (L125-134) | ○ |

### QuantityInformation クラス（UT-CART-043〜046）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-043 | 最小購入数量が設定できること | E-04 (L23-31) | ○ |
| C-044 | minPurchase<1の場合に例外がスローされること | E-04 (L25-27), E-20 | ○ |
| C-045 | 購入ステップが設定できること | E-04 (L51-59) | ○ |
| C-046 | purchaseSteps<1の場合に例外がスローされること | E-04 (L53-55), E-20 | ○ |

### CartCalculator クラス（UT-CART-047〜048）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-047 | カートが正しく計算されること | E-05 (L23-39) | ○ |
| C-048 | 計算後にカートとLineItemがunmodifiedになること | E-05 (L33-36) | ○ |

### CartPersister クラス（UT-CART-049〜056）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-049 | トークンでカートが読み込めること | E-06 (L40-70) | ○ |
| C-050 | 存在しないトークンで例外がスローされること | E-06 (L48-50), E-20 | ○ |
| C-051 | デシリアライズ失敗時に例外がスローされること | E-06 (L54-57), E-20 | ○ |
| C-052 | カートがDBに保存されること | E-06 (L75-113) | ○ |
| C-053 | CartVerifyPersistEvent=falseの場合は保存されないこと | E-06 (L87-91) | ○ |
| C-054 | カートがDBから削除されること | E-06 (L115-122) | ○ |
| C-055 | カートトークンが置き換えられること | E-06 (L124-130) | ○ |
| C-056 | 古いカートが削除されること | E-06 (L132-148) | △ |

### CartRuleLoader クラス（UT-CART-057〜060）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-057 | トークンでカートがロードされルールが適用されること | E-07 (L60-71) | ○ |
| C-058 | カートが存在しない場合に新しいカートが作成されること | E-07 (L66-70) | ○ |
| C-059 | カートとルールがロードされ計算されること | E-07 (L73-76) | ○ |
| C-060 | キャッシュがクリアされること | E-07 (L78-87) | ○ |

### Processor クラス（UT-CART-061〜064）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-061 | カートが処理されて新しいカートが返却されること | E-08 (L32-74) | ○ |
| C-062 | 空のカートの場合も処理されること | E-08 (L78-84) | ○ |
| C-063 | hookAware=trueの場合にCartHookが実行されること | E-08 (L56-58) | ○ |
| C-064 | バリデーションエラーがカートに追加されること | E-08 (L62-64) | ○ |

### Validator クラス（UT-CART-065〜066）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-065 | 全バリデーターが実行されエラーが収集されること | E-09 (L22-33) | ○ |
| C-066 | エラーがない場合は空配列が返却されること | E-09 (L22-33) | ○ |

### CartPrice クラス（UT-CART-067〜071）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-067 | CartPriceが正しく初期化されること | E-10 (L20-34) | ○ |
| C-068 | net状態の場合にtrueを返すこと | E-10 (L71-74) | ○ |
| C-069 | gross状態の場合にfalseを返すこと | E-10 (L71-74) | ○ |
| C-070 | tax-free状態の場合にtrueを返すこと | E-10 (L76-79) | ○ |
| C-071 | 空のCartPriceが作成されること | E-10 (L81-84) | ○ |

### CalculatedPrice クラス（UT-CART-072〜073）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-072 | CalculatedPriceが正しく初期化されること | E-11 (L14-26) | ○ |
| C-073 | 価格が上書きされること | E-11 (L82-87) | ○ |

### AmountCalculator クラス（UT-CART-074〜078）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-074 | TAX_STATE_FREEの場合にネット配送額が計算されること | E-12 (L31-33, L70-83) | ○ |
| C-075 | TAX_STATE_GROSSの場合にグロス額が計算されること | E-12 (L35-37, L91-116) | ○ |
| C-076 | TAX_STATE_NETの場合にネット額が計算されること | E-12 (L39, L124-144) | ○ |
| C-077 | 水平計算タイプで税金が計算されること | E-12 (L44-50) | ○ |
| C-078 | 垂直計算タイプで税金が計算されること | E-12 (L52-62) | ○ |

### TaxCalculator クラス（UT-CART-079〜082）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-079 | ネット価格からグロス価格が計算されること | E-13 (L14-19) | ○ |
| C-080 | グロス価格から税金が計算されること | E-13 (L21-29) | ○ |
| C-081 | ネット価格から税金が計算されること | E-13 (L31-39) | ○ |
| C-082 | ネット価格から単一税率の税金が計算されること | E-13 (L41-49) | ○ |

### CartBehavior クラス（UT-CART-083〜086）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-083 | 権限がある場合にtrueを返すこと | E-14 (L24-27) | ○ |
| C-084 | 権限がない場合にfalseを返すこと | E-14 (L24-27) | ○ |
| C-085 | hookAwareの値が返却されること | E-14 (L34-37) | ○ |
| C-086 | クロージャ実行中はhookAwareがfalseになること | E-14 (L63-74) | ○ |

### CartCompressor クラス（UT-CART-087〜094）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-087 | カートがシリアライズされること | E-15 (L41-64) | ○ |
| C-088 | gzip圧縮でシリアライズされること | E-15 (L53-55) | ○ |
| C-089 | zstd圧縮でシリアライズされること | E-15 (L51-52) | ○ |
| C-090 | サイズ制限超過時に例外がスローされること | E-15 (L83-87), E-20 | ○ |
| C-091 | 非圧縮データがデシリアライズされること | E-15 (L66-81) | ○ |
| C-092 | gzip圧縮データがデシリアライズされること | E-15 (L70-72) | ○ |
| C-093 | 解凍失敗時に例外がスローされること | E-15 (L76-78), E-20 | ○ |
| C-094 | 無効な圧縮方式で例外がスローされること | E-15 (L27-31), E-20 | ○ |

### ErrorCollection クラス（UT-CART-095〜102）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-095 | エラーが追加されること | E-16 (L18-21) | ○ |
| C-096 | blockOrder=trueのエラーがある場合にtrueを返すこと | E-16 (L23-32) | ○ |
| C-097 | blockOrder=trueのエラーがない場合にfalseを返すこと | E-16 (L23-32) | ○ |
| C-098 | LEVEL_ERRORのエラーのみが返却されること | E-16 (L48-51) | ○ |
| C-099 | LEVEL_WARNINGのエラーのみが返却されること | E-16 (L56-59) | ○ |
| C-100 | 一意のハッシュが生成されること | E-16 (L98-111) | ○ |
| C-101 | 空の場合に空文字が返却されること | E-16 (L100-102) | ○ |
| C-102 | persistent=trueのエラーのみが返却されること | E-16 (L69-72) | ○ |

### DeliveryCollection クラス（UT-CART-103〜109）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-103 | 配送日順でソートされること | E-17 (L22-33) | ○ |
| C-104 | 指定日付・場所の配送が取得できること | E-17 (L35-54) | ○ |
| C-105 | 対応する配送がない場合にnullが返却されること | E-17 (L52) | ○ |
| C-106 | LineItemが配送に含まれる場合にtrueを返すこと | E-17 (L56-65) | ○ |
| C-107 | 全配送の送料コレクションが取得できること | E-17 (L67-72) | ○ |
| C-108 | primaryDeliveryIdで主配送が取得できること | E-17 (L90-98) | ○ |
| C-109 | primaryDeliveryId=nullの場合は送料>=0の最初の配送が返却されること | E-17 (L98) | ○ |

### LineItemQuantitySplitter クラス（UT-CART-110〜112）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-110 | 指定数量でLineItemが分割されること | E-18 (L31-80) | ○ |
| C-111 | 同一数量の場合はクローンが返却されること | E-18 (L33-35) | ○ |
| C-112 | 分割後の価格が正しく計算されること | E-18 (L53-76) | ○ |

### OrderConverter クラス（UT-CART-113〜120）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-113 | カートが注文データに変換されること | E-19 (L112-247) | ○ |
| C-114 | 顧客未ログイン時に例外がスローされること | E-19 (L136-138), E-20 | ○ |
| C-115 | 配送先住所がない場合に例外がスローされること | E-19 (L117-125) | ○ |
| C-116 | 注文がカートに変換されること | E-19 (L252-299) | ○ |
| C-117 | lineItemsがnullの場合に例外がスローされること | E-19 (L254-256) | ○ |
| C-118 | deliveriesがnullの場合に例外がスローされること | E-19 (L258-260) | ○ |
| C-119 | 注文からSalesChannelContextが組み立てられること | E-19 (L306-424) | △ |
| C-120 | transactionsがnullの場合に例外がスローされること | E-19 (L308-310) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-056（UT-CART-056）**: pruneメソッドのdaysパラメータの実際の運用値やデフォルト値についてはコード外の設定情報が必要
  - 候補：Shopware設定ファイル / システムコンフィグ / ドキュメント
- **C-119（UT-CART-119）**: overrideOptionsの具体的な使用例や許可されるオプションの一覧は、呼び出し元のコンテキストに依存
  - 候補：RecalculationService / AdminAPI / テストコード

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: LineItem, LineItemCollection の基本操作テストケース（CRUD操作）
- **1（中リスク）**: CartCompressor の圧縮/解凍処理（依存ライブラリの存在確認が必要：zstd）
- **2（高リスク）**:
  - 価格計算関連（AmountCalculator, TaxCalculator）は金額に直接影響するため重点レビュー推奨
  - OrderConverter のカート⇔注文変換は注文フローの根幹であり、アソシエーションの整合性確認が重要

## 6) レビュアーチェックリスト（最小）
- [ ] 金額計算（UT-CART-074〜082）のテストケースが実際の税率パターンを網羅しているか確認
- [ ] LineItem数量変更時の子LineItem連動更新（UT-CART-022）の境界ケースを追加検討
- [ ] CartPersisterの圧縮方式（gzip/zstd）がテスト環境で利用可能か確認
- [ ] OrderConverterのアソシエーションチェック（UT-CART-117, 118, 120）に他の必須アソシエーションがないか確認
- [ ] CartRuleLoaderの最大イテレーション（MAX_ITERATION=7）の妥当性確認
- [ ] CartCompressorのserializationMaxMBSize設定値の実運用での妥当性確認
