---
generated_at: 2026-01-28 10:30:00
metrics:
  claims_total: 118
  claims_with_evidence: 115
  claims_without_evidence: 3
confidence_derived: 0.97
---

# 根拠レポート：product_screen 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：115 / 118、根拠なし：3
- 優先レビュー（高）
  1. **UT-PRS-041〜046**: DownloadFileクラスのプラットフォーム依存テスト - 実機テストが必要
  2. **UT-PRS-074**: Hive永続化テスト - モック化の検討が必要
  3. **UT-PRS-092**: timeToMillisecondsのタイムゾーン考慮

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

- E-01: `lib/screens/product_screen/bloc/product_page_bloc.dart` - ProductScreenBLoc実装
- E-02: `lib/screens/product_screen/bloc/product_page_state.dart` - 状態クラス定義
- E-03: `lib/screens/product_screen/bloc/product_page_repository.dart` - リポジトリ実装
- E-04: `lib/screens/product_screen/bloc/product_page_event.dart` - イベントクラス定義
- E-05: `lib/screens/product_screen/view/product_screen.dart` - メイン画面ウィジェット
- E-06: `lib/screens/product_screen/view/quantity_view.dart` - 数量ビュー
- E-07: `lib/screens/product_screen/view/widget/product_view.dart` - 商品ビュー
- E-08: `lib/screens/product_screen/view/widget/rating_bar.dart` - 評価バー
- E-09: `lib/screens/product_screen/view/product_image_view.dart` - 商品画像ビュー
- E-10: `lib/screens/product_screen/view/file_download.dart` - ファイルダウンロード
- E-11: `lib/screens/product_screen/view/group_product.dart` - グループ商品
- E-12: `lib/screens/product_screen/view/bundle_option_view.dart` - バンドルオプション
- E-13: `lib/screens/product_screen/view/custom_option_view.dart` - カスタムオプション
- E-14: `lib/screens/product_screen/view/widget/product_type_view.dart` - 商品タイプビュー
- E-15: `lib/screens/product_screen/view/booking_option_view.dart` - 予約オプション
- E-16: `lib/screens/product_screen/view/image_zoom_view.dart` - ズーム画像ビュー
- E-17: `lib/screens/product_screen/view/product_review_summary_view.dart` - レビューサマリー
- E-18: `lib/screens/product_screen/view/downloadable_product_options.dart` - ダウンロードオプション
- E-19: `lib/screens/product_screen/view/downloadable_product_sample.dart` - サンプルダウンロード
- E-20: `lib/screens/product_screen/data_model/product_details_model.dart` - 商品詳細モデル
- E-21: `lib/screens/product_screen/data_model/download_sample_model.dart` - ダウンロードサンプルモデル
- E-22: `lib/screens/product_screen/view/widget/about_product_view.dart` - 商品情報ビュー

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

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | FetchProductEventで商品詳細取得 | E-01 (line 28-37) | ○ |
| C-02 | FetchProductEvent例外時エラー状態 | E-01 (line 35-36) | ○ |
| C-03 | AddToCartProductEvent成功 | E-01 (line 38-61) | ○ |
| C-04 | AddToCartProductEvent失敗 | E-01 (line 52-60) | ○ |
| C-05 | AddToCompareListEvent成功 | E-01 (line 62-75) | ○ |
| C-06 | AddToCompareListEvent失敗 | E-01 (line 70-74) | ○ |
| C-07 | AddToWishListProductEvent成功 | E-01 (line 76-103) | ○ |
| C-08 | RemoveFromWishlistEvent成功 | E-01 (line 104-128) | ○ |
| C-09 | DownloadProductSampleEvent成功 | E-01 (line 132-146) | ○ |
| C-10 | DownloadProductSampleEvent失敗 | E-01 (line 140-145) | ○ |
| C-11 | GetSlotEvent成功 | E-01 (line 147-156) | ○ |
| C-12 | GetSlotEvent失敗 | E-01 (line 153-155) | ○ |
| C-13 | OnClickProductLoaderEvent | E-01 (line 129-131) | ○ |
| C-14 | getProductDetails正常 | E-03 (line 45-55) | ○ |
| C-15 | getProductDetails例外 | E-03 (line 50-53) | ○ |
| C-16 | callAddToCartAPi正常 | E-03 (line 58-87) | ○ |
| C-17 | callAddToCartAPi境界値 | E-03 (line 58-87) | ○ |
| C-18 | callAddToCompareListApi正常 | E-03 (line 90-101) | ○ |
| C-19 | callWishListDeleteItem正常 | E-03 (line 104-114) | ○ |
| C-20 | removeItemFromWishlist正常 | E-03 (line 117-128) | ○ |
| C-21 | downloadSample正常 | E-03 (line 131-140) | ○ |
| C-22 | getSlots正常 | E-03 (line 143-152) | ○ |
| C-23 | FetchProductState.success | E-02 (line 30-38) | ○ |
| C-24 | FetchProductState.fail | E-02 (line 38) | ○ |
| C-25 | AddToCartProductState.success | E-02 (line 87-95) | ○ |
| C-26 | QuantityView初期表示 | E-06 (line 40-44, 59-63) | ○ |
| C-27 | QuantityView減少 | E-06 (line 82-93) | ○ |
| C-28 | QuantityView最小値境界 | E-06 (line 85) | ○ |
| C-29 | QuantityView増加 | E-06 (line 119-128) | ○ |
| C-30 | QuantityView更新 | E-06 (line 53-56) | ○ |
| C-31 | RatingBar空星 | E-08 (line 41-46) | ○ |
| C-32 | RatingBar塗り星 | E-08 (line 53-58) | ○ |
| C-33 | RatingBar半星 | E-08 (line 47-52) | ○ |
| C-34 | RatingBarタップ更新 | E-08 (line 61-66) | ○ |
| C-35 | ProductImageViewカルーセル | E-09 (line 52-75) | ○ |
| C-36 | ProductImageView空画像 | E-09 (line 76-80) | ○ |
| C-37 | ProductImageViewウィッシュリスト | E-09 (line 119-161) | ○ |
| C-38 | ProductImageView比較 | E-09 (line 162-202) | ○ |
| C-39 | ProductImageViewセールバッジ | E-09 (line 203-221) | ○ |
| C-40 | ProductImageView新商品バッジ | E-09 (line 222-240) | ○ |
| C-41 | DownloadFile.downloadPersonalData | E-10 (line 23-49) | ○ |
| C-42 | DownloadFile権限リクエスト | E-10 (line 43-44) | ○ |
| C-43 | DownloadFile.getFilePath | E-10 (line 51-59) | ○ |
| C-44 | DownloadFileパスサニタイズ | E-10 (line 56) | ○ |
| C-45 | DownloadFile.saveBase64String | E-10 (line 61-91) | ○ |
| C-46 | DownloadFile空データ | E-10 (line 65) | ○ |
| C-47 | GroupProduct.getGroupData | E-11 (line 37-48) | ○ |
| C-48 | GroupProduct表示 | E-11 (line 51-94) | ○ |
| C-49 | GroupProduct空リスト | E-11 (line 52, 94) | ○ |
| C-50 | GroupProduct数量更新 | E-11 (line 78-88) | ○ |
| C-51 | Data.toJson | E-11 (line 119-122) | ○ |
| C-52 | Data.fromJson | E-11 (line 114-117) | ○ |
| C-53 | BundleOptionsView.initState | E-12 (line 51-94) | ○ |
| C-54 | BundleOptionsViewラジオ選択 | E-12 (line 155-261) | ○ |
| C-55 | BundleOptionsViewチェック選択 | E-12 (line 263-355) | ○ |
| C-56 | BundleOptionsViewチェック解除 | E-12 (line 333-349) | ○ |
| C-57 | BundleOptionsViewドロップダウン | E-12 (line 357-502) | ○ |
| C-58 | BundleOptionsView._updateOptions | E-12 (line 505-556) | ○ |
| C-59 | BundleOptionsView._updateQtyValue | E-12 (line 558-567) | ○ |
| C-60 | BundleData.toJson | E-12 (line 660-664) | ○ |
| C-61 | CustomOptionsViewカラー | E-13 (line 133-194) | ○ |
| C-62 | CustomOptionsViewサイズ | E-13 (line 197-261) | ○ |
| C-63 | CustomOptionsView画像 | E-13 (line 75-131) | ○ |
| C-64 | CustomOptionsView._getId | E-13 (line 282-319) | ○ |
| C-65 | CustomOptionsView._getIdデフォルト | E-13 (line 287-289) | ○ |
| C-66 | CustomOptionsView._updateCallBack | E-13 (line 320-326) | ○ |
| C-67 | ProductTypeViewテキスト価格 | E-14 (line 466-469) | ○ |
| C-68 | ProductTypeViewチェックボックス価格 | E-14 (line 471-486) | ○ |
| C-69 | ProductTypeViewラジオ価格 | E-14 (line 486-498) | ○ |
| C-70 | ProductTypeView.getConfigurablePrice | E-14 (line 515-528) | ○ |
| C-71 | ProductView.callback | E-07 (line 68-81) | ○ |
| C-72 | ProductScreen.getId | E-05 (line 638-669) | ○ |
| C-73 | ProductScreen.getIdデフォルト | E-05 (line 639-642) | ○ |
| C-74 | ProductScreen.setRecentViewed | E-05 (line 671-678) | ○ |
| C-75 | ProductScreen._prepareCustomizableOptionsPayloadテキスト | E-05 (line 590-601) | ○ |
| C-76 | ProductScreen._prepareCustomizableOptionsPayloadチェック | E-05 (line 605-612) | ○ |
| C-77 | ProductScreen._prepareCustomizableOptionsPayloadファイル | E-05 (line 624-629) | ○ |
| C-78 | ProductScreen._addToCartグループ | E-05 (line 404-426) | ○ |
| C-79 | ProductScreen._addToCartグループバリデーション | E-05 (line 420-426) | ○ |
| C-80 | ProductScreen._addToCartバンドル | E-05 (line 427-450) | ○ |
| C-81 | ProductScreen._addToCartダウンロード | E-05 (line 451-474) | ○ |
| C-82 | ProductScreen._addToCartダウンロードバリデーション | E-05 (line 466-473) | ○ |
| C-83 | ProductScreen._addToCart設定可能 | E-05 (line 474-498) | ○ |
| C-84 | ProductScreen._addToCart設定可能バリデーション | E-05 (line 477-485) | ○ |
| C-85 | ProductScreen._addToCart予約 | E-05 (line 499-565) | ○ |
| C-86 | ProductScreen._addToCartテーブル予約 | E-05 (line 504-526) | ○ |
| C-87 | ProductScreen._addToCartテーブル予約バリデーション | E-05 (line 522-526) | ○ |
| C-88 | ProductScreen._addToCart必須オプション成功 | E-05 (line 344-388) | ○ |
| C-89 | ProductScreen._addToCart必須オプション失敗 | E-05 (line 377-386) | ○ |
| C-90 | BookingOptionView.initState | E-15 (line 36-60) | ○ |
| C-91 | BookingOptionView.calculateTotal | E-15 (line 62-64) | ○ |
| C-92 | BookingOptionView.timeToMilliseconds | E-15 (line 66-86) | △ |
| C-93 | BookingOptionView.getSlotsForSelectedDate | E-15 (line 101-138) | ○ |
| C-94 | BookingOptionView日単位レンタル | E-15 (line 534-644) | ○ |
| C-95 | BookingOptionView時間単位レンタル | E-15 (line 645-843) | ○ |
| C-96 | BookingOptionViewデフォルト予約 | E-15 (line 846-950) | ○ |
| C-97 | BookingOptionViewテーブル予約 | E-15 (line 1063-1230) | ○ |
| C-98 | BookingOptionView数量増加 | E-15 (line 1268-1275) | ○ |
| C-99 | BookingOptionView最小数量 | E-15 (line 1252-1260) | ○ |
| C-100 | ZoomImageView表示 | E-16 (line 49-61) | ○ |
| C-101 | ZoomImageView空画像 | E-16 (line 58-60) | ○ |
| C-102 | ProductReviewSummaryView.initState | E-17 (line 46-49) | ○ |
| C-103 | ProductReviewSummaryView空パーセンテージ | E-17 (line 47-49) | ○ |
| C-104 | ProductReviewSummaryViewレビュー作成遷移 | E-17 (line 125-131) | ○ |
| C-105 | ProductReviewSummaryView未ログイン | E-17 (line 132-137) | ○ |
| C-106 | DownloadProductOptionsCheckbox表示 | E-18 (line 39-96) | ○ |
| C-107 | DownloadProductOptionsチェック追加 | E-18 (line 64-77) | ○ |
| C-108 | DownloadProductOptionsチェック解除 | E-18 (line 75-77) | ○ |
| C-109 | DownloadProductSampleリスト表示 | E-19 (line 47-96) | ○ |
| C-110 | DownloadProductSampleタップ | E-19 (line 83) | ○ |
| C-111 | Product.fromJson | E-20 (line 47-48) | ○ |
| C-112 | Product.toJson | E-20 (line 50) | ○ |
| C-113 | PriceHtml.fromJson | E-20 (line 65-66) | ○ |
| C-114 | DownloadSampleModel.fromJson | E-21 (line 12-13) | ○ |
| C-115 | AboutProductView説明表示 | E-22 (line 50-57) | ○ |
| C-116 | AboutProductView追加情報表示 | E-22 (line 77-132) | ○ |
| C-117 | AboutProductViewレビューサマリー表示 | E-22 (line 141-159) | ○ |
| C-118 | AboutProductViewレビューサマリー非表示 | E-22 (line 159-160) | ○ |

## 4) 不足情報（Unknown / Missing）

1. **タイムゾーン処理（C-92）**
   - `timeToMilliseconds`メソッドはローカルタイムゾーンを想定しているが、明示的なタイムゾーン処理がない
   - 候補：UTCとの変換テスト / サマータイム境界テスト / 異なるタイムゾーン設定でのテスト

2. **プラットフォーム依存コード**
   - `DownloadFile`クラスはAndroid/iOS固有のAPIを使用
   - 実機またはプラットフォームシミュレータでのテストが必要

3. **Hive永続化**
   - `setRecentViewed`はHiveボックスに直接アクセス
   - モック化戦略の検討が必要

## 5) リスクフラグ（レビュー観点）

| リスクレベル | 項目 | 理由 |
|---|---|---|
| 2 | カート追加ロジック（UT-PRS-078〜089） | 複数の商品タイプに対するバリデーションが複雑。金額計算への影響大 |
| 2 | 価格計算（UT-PRS-067〜070） | カスタマイズオプションの価格計算ミスは売上に直結 |
| 1 | ファイルダウンロード（UT-PRS-041〜046） | プラットフォーム依存性があり、権限管理も関係 |
| 1 | 予約機能（UT-PRS-090〜099） | 日時処理、タイムゾーン、スロット管理の複雑性 |
| 0 | UIコンポーネント（UT-PRS-031〜040） | 表示のみで、ビジネスロジックへの影響小 |
| 0 | データモデル（UT-PRS-111〜114） | JSON変換のみで、自動生成コード |

## 6) レビュアーチェックリスト（最小）

- [ ] カート追加のバリデーションロジック（grouped, bundle, configurable, downloadable, booking）が網羅されているか確認
- [ ] 価格計算テスト（_calculateCustomOptionsPrice, getConfigurablePrice）の入力パターンが十分か確認
- [ ] DownloadFileのプラットフォーム依存テストの実行環境を確保
- [ ] Hive関連テストのモック戦略を決定
- [ ] BookingOptionViewのタイムゾーン処理の要否を判断
- [ ] 非同期処理（BLoC）のタイミング依存テストケースの追加検討
- [ ] エラーメッセージの国際化対応テストの要否を判断
