---
generated_at: 2026-01-28 14:15:00
metrics:
  claims_total: 87
  claims_with_evidence: 87
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：87 / 87、根拠なし：0
- 優先レビュー（高）
  1. **UT-ODT-032, UT-ODT-034, UT-ODT-036**：Repository実装で例外発生時にnullを返す危険な実装のテスト
  2. **UT-ODT-058**：キャンセル確認ダイアログからイベント発行のフロー
  3. **UT-ODT-060**：再注文イベント発行のフロー

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

- E-01: `lib/screens/order_detail/bloc/order_detail_bloc.dart` - Blocクラスの実装
- E-02: `lib/screens/order_detail/bloc/order_detail_event.dart` - イベントクラスの定義
- E-03: `lib/screens/order_detail/bloc/order_detail_state.dart` - 状態クラスの定義
- E-04: `lib/screens/order_detail/bloc/order_detail_repository.dart` - リポジトリの実装
- E-05: `lib/screens/order_detail/view/order_detail.dart` - 画面ウィジェットの実装
- E-06: `lib/screens/order_detail/widgets/order_detail_tile.dart` - 詳細タイルウィジェット
- E-07: `lib/screens/order_detail/widgets/shipping_payment_info.dart` - 配送・支払い情報ウィジェット
- E-08: `lib/screens/order_detail/widgets/shiping_payment_info.dart` - 配送・支払い情報関数（別ファイル）
- E-09: `lib/screens/order_detail/widgets/order_detail_loader.dart` - ローダーウィジェット
- E-10: `lib/screens/order_detail/utils/index.dart` - エクスポート定義

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | OrderDetailBlocのmapEventToStateがOrderDetailFetchDataEventを処理する | E-01 (L26-40) | ○ |
| C-02 | responseStatus=falseの場合OrderDetailFetchDataState.failが発行される | E-01 (L36) | ○ |
| C-03 | 例外発生時にOrderDetailFetchDataState.failがエラーメッセージと共に発行される | E-01 (L38-40) | ○ |
| C-04 | CancelOrderEventで注文キャンセルが処理される | E-01 (L41-54) | ○ |
| C-05 | キャンセル成功時にCancelOrderState.successが発行される | E-01 (L45-47) | ○ |
| C-06 | キャンセル失敗時にgraphqlErrorsがエラーとして渡される | E-01 (L49) | ○ |
| C-07 | CancelOrderで例外発生時にsomethingWrongメッセージが返される | E-01 (L52-54) | ○ |
| C-08 | OnClickOrderLoadingEventでOnClickLoadingStateが発行される | E-01 (L55-57) | ○ |
| C-09 | ReOrderEventで再注文が処理される | E-01 (L58-70) | ○ |
| C-10 | 再注文成功時にReOrderState.successが発行される | E-01 (L62) | ○ |
| C-11 | 再注文失敗時にmessageまたはgraphqlErrorsが返される | E-01 (L64) | ○ |
| C-12 | orderIdがnullの場合デフォルト値1が使用される | E-01 (L29) `event.orderId ?? 1` | ○ |
| C-13 | CancelOrderでidがnullの場合デフォルト値0が使用される | E-01 (L43) `event.id??0` | ○ |
| C-14 | OrderDetailFetchDataEventのpropsが空リストを返す | E-02 (L21) | ○ |
| C-15 | CancelOrderEventのpropsがmessageを含む | E-02 (L31) | ○ |
| C-16 | messageがnullの場合空文字が使用される | E-02 (L31) `message ?? ""` | ○ |
| C-17 | OnClickOrderLoadingEventのpropsが空リストを返す | E-02 (L40) | ○ |
| C-18 | ReOrderEventのpropsがidを含む | E-02 (L49) | ○ |
| C-19 | idがnullの場合空文字が使用される | E-02 (L49) `id ?? ""` | ○ |
| C-20 | OrderDetailInitialStateのpropsが空リストを返す | E-03 (L26) | ○ |
| C-21 | OrderDetailFetchDataState.successでstatusがsuccessになる | E-03 (L35) | ○ |
| C-22 | OrderDetailFetchDataState.failでstatusがfailになる | E-03 (L36) | ○ |
| C-23 | OrderDetailFetchDataStateのpropsがorderDetailModelを含む | E-03 (L39) | ○ |
| C-24 | orderDetailModelがnullの場合空文字が使用される | E-03 (L39) | ○ |
| C-25 | CancelOrderState.successでstatusがsuccessになる | E-03 (L48) | ○ |
| C-26 | CancelOrderState.failでstatusがfailになる | E-03 (L49) | ○ |
| C-27 | CancelOrderStateのpropsがsuccessMsg, error, baseModelを含む | E-03 (L52) | ○ |
| C-28 | OnClickLoadingStateのpropsがisReqToShowLoaderを含む | E-03 (L63) | ○ |
| C-29 | ReOrderState.successでstatusがsuccessになる | E-03 (L71) | ○ |
| C-30 | ReOrderState.failでstatusがfailになる | E-03 (L72) | ○ |
| C-31 | ReOrderStateのpropsがmessageとmodelを含む | E-03 (L75) | ○ |
| C-32 | OrderDetailRepositoryImpのgetOrderDetailsがApiClient.getOrderDetailを呼ぶ | E-04 (L28) | ○ |
| C-33 | getOrderDetailsで例外発生時にキャッチされる | E-04 (L30-33) | ○ |
| C-34 | cancelOrderがApiClient.cancelOrderを呼ぶ | E-04 (L42) | ○ |
| C-35 | cancelOrderで例外発生時にキャッチされる | E-04 (L44-47) | ○ |
| C-36 | reOrderCustomerOrderがApiClient.reOrderCustomerOrderを呼ぶ | E-04 (L55) | ○ |
| C-37 | reOrderCustomerOrderで例外発生時にキャッチされる | E-04 (L57-60) | ○ |
| C-38 | reOrderCustomerOrderにnull idを渡すことが可能 | E-04 (L52) `String? id` | ○ |
| C-39 | initStateでOrderDetailFetchDataEventが発行される | E-05 (L39) | ○ |
| C-40 | OrderDetailInitialStateでOrderDetailLoaderが返される | E-05 (L93) | ○ |
| C-41 | OrderDetailFetchDataState.successでOrderDetailTileが返される | E-05 (L98-103) | ○ |
| C-42 | OrderDetailFetchDataState.failでErrorMessage.errorMsgが返される | E-05 (L106) | ○ |
| C-43 | CancelOrderState.successでisLoadingがfalseになる | E-05 (L111) | ○ |
| C-44 | OnClickLoadingStateでisLoadingが更新される | E-05 (L115) | ○ |
| C-45 | CancelOrderState.failでShowMessage.errorNotificationが呼ばれる | E-05 (L63) | ○ |
| C-46 | CancelOrderState.successでShowMessage.successNotificationが呼ばれる | E-05 (L65-66) | ○ |
| C-47 | CancelOrderState.successで2秒後にNavigator.popが呼ばれる | E-05 (L67-69) | ○ |
| C-48 | ReOrderState.successで成功通知とカート画面遷移が行われる | E-05 (L74-77) | ○ |
| C-49 | ReOrderState.failでエラー通知が表示される | E-05 (L80) | ○ |
| C-50 | fetchOrdersでOrderDetailFetchDataEventが発行される | E-05 (L128) | ○ |
| C-51 | orderDetailModelがnullの場合NoDataFoundが返される | E-06 (L38-39) | ○ |
| C-52 | orderDetailModelが存在する場合詳細ウィジェットが返される | E-06 (L41-646) | ○ |
| C-53 | ステータスがpendingの場合キャンセルボタンが表示される | E-06 (L74-184) | ○ |
| C-54 | ステータスがpending以外の場合キャンセルボタンが非表示 | E-06 (L185) `SizedBox()` | ○ |
| C-55 | bundle商品がない場合再注文ボタンが表示される | E-06 (L231-251) | ○ |
| C-56 | bundle商品がある場合再注文ボタンが非表示 | E-06 (L231-233) | ○ |
| C-57 | isLoadingがtrueの場合CircularProgressIndicatorが表示される | E-06 (L637-644) | ○ |
| C-58 | キャンセル確認ダイアログが表示される | E-06 (L101-172) | ○ |
| C-59 | OKボタンでCancelOrderEventが発行される | E-06 (L153-162) | ○ |
| C-60 | キャンセルボタンでダイアログが閉じる | E-06 (L129-131) | ○ |
| C-61 | 再注文ボタンでReOrderEventが発行される | E-06 (L236-237) | ○ |
| C-62 | RefreshIndicatorでOrderDetailFetchDataEventが発行される | E-06 (L44-48) | ○ |
| C-63 | qtyInvoiced > 0で請求書詳細ボタンが表示される | E-06 (L608-611) | ○ |
| C-64 | qtyShipped > 0で出荷詳細ボタンが表示される | E-06 (L615-618) | ○ |
| C-65 | qtyRefunded > 0で返金詳細ボタンが表示される | E-06 (L620-625) | ○ |
| C-66 | shipmentInvoiceDetailsでNavigator.pushNamedが呼ばれる | E-06 (L671-673) | ○ |
| C-67 | 商品画像がある場合ImageViewがURLと共に表示される | E-06 (L269-285) | ○ |
| C-68 | 商品画像がない場合プレースホルダーが表示される | E-06 (L286-295) | ○ |
| C-69 | 割引額が$0.00でない場合割引行が表示される | E-06 (L562-583) | ○ |
| C-70 | 割引額が$0.00の場合SizedBox.shrink()が表示される | E-06 (L584) | ○ |
| C-71 | shippingAddressが存在する場合getShippingAddressが呼ばれる | E-07 (L41-42) | ○ |
| C-72 | shippingAddressがnullの場合getShippingAddressが呼ばれない | E-07 (L41) `if` condition | ○ |
| C-73 | shippingTitleが存在する場合配送方法が表示される | E-07 (L85-106) | ○ |
| C-74 | shippingTitleがnullの場合配送方法が非表示 | E-07 (L85) `if` condition | ○ |
| C-75 | getShippingAddressで住所情報が正しく表示される | E-07 (L141-181) | ○ |
| C-76 | _getFormattedAddressで住所がフォーマットされる | E-07 (L183-188) | ○ |
| C-77 | address1の[]が除去される | E-07 (L185) `.replaceAll` | ○ |
| C-78 | _getFormattedBillingAddressで請求先住所がフォーマットされる | E-07 (L133-139) | ○ |
| C-79 | billingAddress.address1の[]が除去される | E-07 (L136) `.replaceAll` | ○ |
| C-80 | localeがarの場合Alignment.topRightが適用される | E-07 (L89, L110) | ○ |
| C-81 | localeがar以外の場合Alignment.topLeftが適用される | E-07 (L90, L111) | ○ |
| C-82 | OrderDetailLoaderで5つのSkeletonLoaderが表示される | E-09 (L22-66) | ○ |
| C-83 | SkeletonLoaderにテーマカラーが適用される | E-09 (L24-25) | ○ |
| C-84 | shiping_payment_infoの_getFormattedAddressが住所をフォーマットする | E-08 (L115-120) | ○ |
| C-85 | shiping_payment_infoの_getFormattedBillingAddressが請求先住所をフォーマットする | E-08 (L122-127) | ○ |
| C-86 | shippingPaymentInfo関数が配送・支払い情報を表示する | E-08 (L14-113) | ○ |
| C-87 | 住所フィールドがnullの場合空文字が表示される | E-08 (L117, L124) `?? ""` | ○ |

## 4) 不足情報（Unknown / Missing）
- なし - すべてのテストケースがソースコードから直接根拠を確認できました。

## 5) リスクフラグ（レビュー観点）
- **リスク2（高）**: Repository実装（E-04）で例外発生時にnullを返してから強制アンラップ（`!`）を行う危険な実装がある
  - `getOrderDetails`: L34で `return orderDetailModel!;` - 例外時にnullになる可能性
  - `cancelOrder`: L48で `return baseModel!;`
  - `reOrderCustomerOrder`: L61で `return baseModel!;`
- **リスク1（中）**: ステータス比較がローカライズ後の文字列で行われている（E-06 L74-77）- 言語によって動作が変わる可能性
- **リスク1（中）**: 割引額の比較がハードコードされた文字列 `"\$0.00"` で行われている（E-06 L562）- 通貨によって動作が変わる可能性
- **リスク0（低）**: 2つの配送・支払い情報ファイル（shiping_payment_info.dart と shipping_payment_info.dart）が存在 - 片方はタイポと思われる

## 6) レビュアーチェックリスト（最小）
- [ ] Repository実装の例外ハンドリングが適切か確認（null安全性の問題）
- [ ] ステータス比較がローカライズに依存していないか確認
- [ ] 金額比較がハードコードされた文字列に依存していないか確認
- [ ] 重複ファイル（shiping_payment_info.dart）の整理が必要か検討
- [ ] BlocテストでMockリポジトリを使用する際の設定が適切か確認
- [ ] Widgetテストでの適切なポンプとBlocプロバイダーの設定を確認
