---
generated_at: 2026-01-28 12:30:00
metrics:
  claims_total: 84
  claims_with_evidence: 84
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：84 / 84、根拠なし：0
- 優先レビュー（高）
  1. **CategoryBloc関連テスト（UT-CTS-001〜016）**：状態管理の中核機能
  2. **CategoriesRepo関連テスト（UT-CTS-017〜026）**：API呼び出しの信頼性
  3. **ウィッシュリスト・カート機能（UT-CTS-060〜066）**：ユーザー操作の重要機能

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

- E-01: `lib/screens/categories_screen/categories_screen.dart` - メイン画面StatefulWidget
- E-02: `lib/screens/categories_screen/bloc/categories_bloc.dart` - BLoC状態管理
- E-03: `lib/screens/categories_screen/bloc/categories_event.dart` - イベント定義
- E-04: `lib/screens/categories_screen/bloc/categories_state.dart` - 状態定義
- E-05: `lib/screens/categories_screen/bloc/categories_repository.dart` - リポジトリ層
- E-06: `lib/screens/categories_screen/widget/sub_categories_loader_view.dart` - ローダーUI
- E-07: `lib/screens/categories_screen/widget/sub_categories_list.dart` - リスト表示UI
- E-08: `lib/screens/categories_screen/widget/sub_categories_grid_view.dart` - グリッド表示UI
- E-09: `lib/screens/categories_screen/widget/sub_categories_view.dart` - メイン表示コンテナ
- E-10: `lib/screens/categories_screen/utils/index.dart` - エクスポート定義

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

### CategoryBloc テストケース（UT-CTS-001〜016）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | FetchSubCategoryEventでカテゴリデータが取得される | E-02 L23-30 | ○ |
| C-02 | FetchSubCategoryEvent例外時にfail状態が発行される | E-02 L28-29 | ○ |
| C-03 | FetchDeleteAddItemCategoryEventでウィッシュリスト追加成功 | E-02 L31-53 | ○ |
| C-04 | isInWishlistがトグルされる | E-02 L36-44 | ○ |
| C-05 | FetchDeleteAddItemCategoryEvent API失敗時fail状態 | E-02 L50-52 | ○ |
| C-06 | FetchDeleteItemEventでウィッシュリスト削除成功 | E-02 L58-77 | ○ |
| C-07 | FetchDeleteItemEvent例外時fail状態 | E-02 L78-81 | ○ |
| C-08 | AddToCartSubCategoriesEventでカート追加成功 | E-02 L82-97 | ○ |
| C-09 | AddToCartSubCategoriesEvent GraphQLエラー時fail | E-02 L90-92 | ○ |
| C-10 | AddToCartSubCategoriesEvent例外時fail | E-02 L94-96 | ○ |
| C-11 | AddToCompareSubCategoryEventで比較リスト追加成功 | E-02 L98-112 | ○ |
| C-12 | AddToCompareSubCategoryEvent API失敗時fail | E-02 L105-107 | ○ |
| C-13 | OnClickSubCategoriesLoaderEventでローダー状態更新 | E-02 L113-115 | ○ |
| C-14 | FilterFetchEventでフィルター属性取得 | E-02 L116-123 | ○ |
| C-15 | FilterFetchEvent例外時fail | E-02 L121-122 | ○ |
| C-16 | HasMoreSubCategoryLoadingEventで追加読み込み状態 | E-02 L124-126 | ○ |

### CategoriesRepo テストケース（UT-CTS-017〜026）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-17 | callCategoriesDataでカテゴリデータ取得 | E-05 L27-39 | ○ |
| C-18 | callCategoriesData例外時null返却 | E-05 L34-37 | ○ |
| C-19 | getFilterProductsでフィルター属性取得 | E-05 L42-51 | ○ |
| C-20 | getFilterProducts例外時例外スロー | E-05 L50 (null強制アンラップ) | ○ |
| C-21 | callWishListDeleteItemでウィッシュリスト追加 | E-05 L54-65 | ○ |
| C-22 | callWishListDeleteItem例外時null返却 | E-05 L60-63 | ○ |
| C-23 | callAddToCartApiでカート追加 | E-05 L68-75 | ○ |
| C-24 | callAddToCompareListApiで比較リスト追加 | E-05 L78-82 | ○ |
| C-25 | removeItemFromWishlistでウィッシュリスト削除 | E-05 L85-95 | ○ |
| C-26 | removeItemFromWishlist例外時例外スロー | E-05 L94 (null強制アンラップ) | ○ |

### SubCategoryScreen テストケース（UT-CTS-027〜037）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-27 | initStateでfiltersがフォーマットされる | E-01 L52-63 | ○ |
| C-28 | filters空時にcategory_idがデフォルト追加 | E-01 L62 | ○ |
| C-29 | スクロール末端で追加データロード | E-01 L73-84 | ○ |
| C-30 | hasMoreData()=false時イベント非発行 | E-01 L77 | ○ |
| C-31 | hasMoreData()がtrue返却 | E-01 L86-89 | ○ |
| C-32 | 全データ取得済み時false返却 | E-01 L88 | ○ |
| C-33 | ローディング中false返却 | E-01 L88 (!isLoading条件) | ○ |
| C-34 | ShowLoaderCategoryState時ローダー表示 | E-01 L145-147 | ○ |
| C-35 | FetchSubCategoryState成功時データ更新 | E-01 L151-161 | ○ |
| C-36 | page>1時データ追加 | E-01 L155-156 | ○ |
| C-37 | FetchSubCategoryState失敗時エラー表示 | E-01 L162-164 | ○ |

### Event/State クラス テストケース（UT-CTS-038〜053）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-38 | FetchSubCategoryEvent.props空リスト | E-03 L34 | ○ |
| C-39 | AddToCartSubCategoriesEvent.props正しい値 | E-03 L24 | ○ |
| C-40 | AddToCartSubCategoriesEvent null値処理 | E-03 L24 (?? "") | ○ |
| C-41 | FetchDeleteAddItemCategoryEvent.props | E-03 L43 | ○ |
| C-42 | AddToCompareSubCategoryEvent.props | E-03 L62 | ○ |
| C-43 | OnClickSubCategoriesLoaderEvent.props例外 | E-03 L71 (throw UnimplementedError) | ○ |
| C-44 | ShowLoaderCategoryState.props空リスト | E-04 L22 | ○ |
| C-45 | OnClickSubCategoriesLoaderState.props | E-04 L31 | ○ |
| C-46 | FilterFetchState.props filterModel含む | E-04 L46 | ○ |
| C-47 | FilterFetchState.props null時空文字 | E-04 L46 (条件式) | ○ |
| C-48 | FetchSubCategoryState.props | E-04 L60-61 | ○ |
| C-49 | AddToCompareSubCategoryState.props | E-04 L75 | ○ |
| C-50 | AddToCartSubCategoriesState.props | E-04 L89 | ○ |
| C-51 | FetchDeleteAddItemCategoryState.props | E-04 L105-106 | ○ |
| C-52 | RemoveWishlistState.props | E-04 L121-122 | ○ |
| C-53 | HasMoreSubCategoryLoadingState.props | E-04 L130 | ○ |

### UIウィジェット テストケース（UT-CTS-054〜084）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | SubCategoriesLoader.build スケルトン構築 | E-06 L19-54 | ○ |
| C-55 | SubCategoriesList.build 商品表示 | E-07 L129-135 | ○ |
| C-56 | SubCategoriesList タップで画面遷移 | E-07 L26-33 | ○ |
| C-57 | isInSale=true時SALEバッジ | E-07 L67-88 | ○ |
| C-58 | isNew=true時NEWバッジ | E-07 L89-114 | ○ |
| C-59 | isSaleable=false時ボタン無効化 | E-07 L179-180 (opacity) | ○ |
| C-60 | simple商品で直接カート追加 | E-07 L190-205 | ○ |
| C-61 | カスタマイズオプションあり時画面遷移 | E-07 L206-224 | ○ |
| C-62 | ログイン済みウィッシュリスト追加 | E-07 L244-246 | ○ |
| C-63 | ログイン済みウィッシュリスト削除 | E-07 L240-242 | ○ |
| C-64 | 未ログイン時ウィッシュリスト警告 | E-07 L248-255 | ○ |
| C-65 | ログイン済み比較リスト追加 | E-07 L265-270 | ○ |
| C-66 | 未ログイン時比較警告 | E-07 L271-276 | ○ |
| C-67 | レビュー存在時星評価表示 | E-07 L140-176 | ○ |
| C-68 | レビュー空時星評価非表示 | E-07 L140 (条件式) | ○ |
| C-69 | SubCategoriesGridView.build グリッド表示 | E-08 L187-196 | ○ |
| C-70 | SubCategoriesGridView タップで画面遷移 | E-08 L27-34 | ○ |
| C-71 | 画像存在時ImageView表示 | E-08 L52-70 | ○ |
| C-72 | 画像なし時プレースホルダー | E-08 L71-76 | ○ |
| C-73 | simple商品でカート追加 | E-08 L270-280 | ○ |
| C-74 | SubCategoriesView グリッドモード | E-09 L94-161 | ○ |
| C-75 | SubCategoriesView リストモード | E-09 L162-211 | ○ |
| C-76 | グリッド/リスト切り替え | E-09 L273-299 | ○ |
| C-77 | ソートボタンでBottomSheet | E-09 L243-256 | ○ |
| C-78 | フィルターボタンで画面遷移 | E-09 L302-319 | ○ |
| C-79 | プルトゥリフレッシュ | E-09 L60-67 | ○ |
| C-80 | 空データ時EmptyDataView | E-09 L342-347 | ○ |
| C-81 | isLoading時ローダー表示 | E-09 L349-355 | ○ |
| C-82 | hasMoreLoading時追加ローダー | E-09 L212-225 | ○ |
| C-83 | カテゴリ画像ヘッダー表示 | E-09 L83-87 | ○ |
| C-84 | 画像なしヘッダー非表示 | E-09 L88-90 | ○ |

## 4) 不足情報（Unknown / Missing）
- 全テストケースにコードベースからの根拠が存在するため、不足情報はありません。
- ただし、以下の点は実際のテスト実装時に確認が必要です：
  - ApiClientのモック実装方法
  - NewProductsModel, AddWishListModel等のデータモデル構造
  - appStoragePrefの状態管理方法

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全てのテストケースがソースコードから直接導出されています
- **注意点**:
  - E-03 L71: `OnClickSubCategoriesLoaderEvent.props`が`throw UnimplementedError()`を含む（意図的な未実装）
  - E-05 L50, L94: null強制アンラップ（`!`）があり、例外発生の可能性
  - BLoCパターンの状態遷移テストには統合テストも推奨

## 6) レビュアーチェックリスト（最小）
- [ ] CategoryBloc.mapEventToStateの全イベント処理が網羅されているか確認
- [ ] CategoriesRepoの各API呼び出しメソッドがテストされているか確認
- [ ] UI Widgetのユーザーインタラクション（タップ、スクロール）がカバーされているか確認
- [ ] 異常系・境界値テストが主要機能に対して存在するか確認
- [ ] Equatableのprops実装テストが全State/Eventクラスに存在するか確認
- [ ] ログイン状態による分岐（ウィッシュリスト、比較機能）がテストされているか確認
