---
generated_at: 2026-01-28 14:20:00
metrics:
  claims_total: 50
  claims_with_evidence: 48
  claims_without_evidence: 2
confidence_derived: 0.96
---

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

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：48 / 50、根拠なし：2
- 優先レビュー（高）
  1. **UT-OIN-015**：APIエラー時のnull安全性に関するリスク - コード上でforce unwrap（`invoiceList!`）が存在
  2. **UT-OIN-047**：formattedPriceの各項目がnullの場合の実際の表示動作 - 実行時テストが必要

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

- E-01: `lib/screens/order_invoices/bloc/order_invoice_bloc.dart` - OrderInvoiceBlocクラス定義
- E-02: `lib/screens/order_invoices/bloc/order_invoice_event.dart` - OrderInvoiceFetchDataEventクラス定義
- E-03: `lib/screens/order_invoices/bloc/order_invoice_state.dart` - OrderInvoiceBaseState, OrderInvoiceListDataStateクラス定義
- E-04: `lib/screens/order_invoices/bloc/order_invoice_repository.dart` - OrderInvoiceRepository, OrderInvoiceRepositoryImpクラス定義
- E-05: `lib/screens/order_invoices/view/invoice_details.dart` - InvoiceScreenウィジェット定義
- E-06: `lib/data_model/order_model/order_invoices_model.dart` - InvoicesModel, ViewInvoices, InvoicesItemsモデル定義
- E-07: `lib/services/api_client.dart` - getInvoicesListメソッド（行1374-1386）
- E-08: `lib/services/mutation_query.dart` - viewInvoices GraphQLクエリ定義（行1849-1896）
- E-09: `lib/screens/cart_screen/cart_model/cart_data_model.dart` - FormattedPriceクラス定義（行157-188）

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

### Bloc層テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 (UT-OIN-001) | Blocが正常に初期化されること | E-01 (行13-21) | ○ |
| C-02 (UT-OIN-002) | 請求書一覧取得イベントで成功状態が発行されること | E-01 (行23-33) | ○ |
| C-03 (UT-OIN-003) | リポジトリでエラー発生時に失敗状態が発行されること | E-01 (行30-31) | ○ |
| C-04 (UT-OIN-004) | orderId=0で請求書取得イベントが処理されること | E-01, E-02 | ○ |
| C-05 (UT-OIN-005) | orderId=負数で請求書取得イベントが処理されること | E-01, E-02 | ○ |

### Event層テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-06 (UT-OIN-006) | orderIdを保持したイベントが生成されること | E-02 (行15-22) | ○ |
| C-07 (UT-OIN-007) | propsが空リストを返却すること | E-02 (行20-21) | ○ |

### State層テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-08 (UT-OIN-008) | OrderInvoiceInitialState.propsが空リストを返却すること | E-03 (行20-23) | ○ |
| C-09 (UT-OIN-009) | 成功状態が正しく生成されること | E-03 (行31) | ○ |
| C-10 (UT-OIN-010) | 失敗状態が正しく生成されること | E-03 (行32) | ○ |
| C-11 (UT-OIN-011) | invoicesListがnullでない場合propsにinvoicesListが含まれること | E-03 (行34-35) | ○ |
| C-12 (UT-OIN-012) | invoicesListがnullの場合propsに空文字が含まれること | E-03 (行35) | ○ |

### Repository層テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-13 (UT-OIN-013) | 抽象メソッドが定義されていること | E-04 (行16-17) | ○ |
| C-14 (UT-OIN-014) | APIクライアントから請求書一覧が取得できること | E-04 (行19-31), E-07 | ○ |
| C-15 (UT-OIN-015) | APIエラー時にnullが返却されないこと | E-04 (行30) - `invoiceList!` | △ |
| C-16 (UT-OIN-016) | 例外発生時にデバッグログが出力されること | E-04 (行27-28) | ○ |

### Model層テストケース（InvoicesModel）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-17 (UT-OIN-017) | JSONから正しくモデルが生成されること | E-06 (行26-27) | ○ |
| C-18 (UT-OIN-018) | dataが空配列の場合空のviewInvoicesが生成されること | E-06 (行21-22) | ○ |
| C-19 (UT-OIN-019) | dataがnullの場合viewInvoicesがnullになること | E-06 (行22) | ○ |
| C-20 (UT-OIN-020) | モデルから正しくJSONが生成されること | E-06 (行29-30) | ○ |

### Model層テストケース（ViewInvoices）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-21 (UT-OIN-021) | JSONから正しくモデルが生成されること | E-06 (行41-42) | ○ |
| C-22 (UT-OIN-022) | itemsがnullの場合nullが設定されること | E-06 (行36) | ○ |
| C-23 (UT-OIN-023) | モデルから正しくJSONが生成されること | E-06 (行44) | ○ |
| C-24 (UT-OIN-024) | 全パラメータを指定してインスタンスが生成できること | E-06 (行39) | ○ |

### Model層テストケース（InvoicesItems）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-25 (UT-OIN-025) | JSONから正しくモデルが生成されること | E-06 (行66-67) | ○ |
| C-26 (UT-OIN-026) | qtyが0の場合も正しくパースされること | E-06 (行52) | ○ |
| C-27 (UT-OIN-027) | 全フィールドがnullの場合も正しくパースされること | E-06 (行49-55) | ○ |
| C-28 (UT-OIN-028) | モデルから正しくJSONが生成されること | E-06 (行69) | ○ |
| C-29 (UT-OIN-029) | 全パラメータを指定してインスタンスが生成できること | E-06 (行57-64) | ○ |

### View層テストケース（InvoiceScreen）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-30 (UT-OIN-030) | orderDetailsModelを受け取りWidgetが生成されること | E-05 (行13-16) | ○ |
| C-31 (UT-OIN-031) | 初期化時に請求書取得イベントが発行されること | E-05 (行27-31) | ○ |
| C-32 (UT-OIN-032) | orderDetailsModel.idがnullの場合orderId=0でイベント発行されること | E-05 (行30) - `?? 0` | ○ |
| C-33 (UT-OIN-033) | AppBarにinvoiceタイトルが表示されること | E-05 (行41) | ○ |
| C-34 (UT-OIN-034) | 初期状態でLoaderが表示されること | E-05 (行52-53) | ○ |
| C-35 (UT-OIN-035) | データ取得成功時にinvoiceDetailsが表示されること | E-05 (行55-58) | ○ |
| C-36 (UT-OIN-036) | invoicesListがnullでない場合SingleChildScrollViewが表示されること | E-05 (行65-66) | ○ |
| C-37 (UT-OIN-037) | invoicesListがnullの場合EmptyDataViewが表示されること | E-05 (行122) | ○ |
| C-38 (UT-OIN-038) | 価格行が正しく表示されること | E-05 (行146-164) | ○ |
| C-39 (UT-OIN-039) | 子データ行が正しく表示されること | E-05 (行125-144) | ○ |
| C-40 (UT-OIN-040) | 請求書一覧がListViewで表示されること | E-05 (行166-230) | ○ |
| C-41 (UT-OIN-041) | invoicesItemsが空配列の場合空のiterableが返却されること | E-05 (行167) | ○ |
| C-42 (UT-OIN-042) | invoicesItemsがnullの場合nullが返却されること | E-05 (行167) | ○ |
| C-43 (UT-OIN-043) | subTotalが正しく表示されること | E-05 (行85-90) | ○ |
| C-44 (UT-OIN-044) | shippingAmountが正しく表示されること | E-05 (行91-96) | ○ |
| C-45 (UT-OIN-045) | taxAmountが正しく表示されること | E-05 (行97-102) | ○ |
| C-46 (UT-OIN-046) | grandTotalが正しく表示されること | E-05 (行103-108) | ○ |
| C-47 (UT-OIN-047) | formattedPriceの各項目がnullの場合空文字が表示されること | E-05 (行88-107) - `?? ""` | △ |
| C-48 (UT-OIN-048) | SKUが正しく表示されること | E-05 (行185-186) | ○ |
| C-49 (UT-OIN-049) | 商品名が正しく表示されること | E-05 (行187-188) | ○ |
| C-50 (UT-OIN-050) | 数量が正しく表示されること | E-05 (行195-196) | ○ |

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

### UT-OIN-015: APIエラー時のnull安全性
- **理由**: `OrderInvoiceRepositoryImp.getInvoicesList`メソッドで、例外発生時に`invoiceList`が初期化されないまま`invoiceList!`でforce unwrapされる可能性がある
- **候補**:
  - 実際のAPIエラーシナリオでの挙動テスト
  - try-catch内でのデフォルト値設定パターンの確認
  - エラーハンドリングポリシーの明確化

### UT-OIN-047: null時の表示動作
- **理由**: コード上では`?? ""`でnull合体演算子が使用されているが、実際のUI表示での動作確認が必要
- **候補**:
  - Widget Testによる実際の表示確認
  - 空文字表示時のUI/UXの適切性確認

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

| リスクレベル | 項目 | 説明 |
|---|---|---|
| 2: 高リスク | UT-OIN-015 | APIエラー時のforce unwrapによるクラッシュの可能性 |
| 1: 中リスク | UT-OIN-003 | エラーメッセージの内容が適切かの確認が必要 |
| 1: 中リスク | UT-OIN-032 | orderId=0でのAPI呼び出しが適切かの確認が必要 |
| 0: 低リスク | その他 | コードから直接確認可能な機能テスト |

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

- [ ] UT-OIN-015: `OrderInvoiceRepositoryImp`でAPIエラー時にアプリがクラッシュしないことを確認
- [ ] UT-OIN-003: エラー発生時のユーザーへのフィードバックが適切であることを確認
- [ ] UT-OIN-032: orderId=0でのAPI呼び出し時のサーバー側の挙動を確認
- [ ] UT-OIN-047: formattedPriceの各項目がnullの場合のUI表示が適切であることを確認
- [ ] 全テストケースがFlutter Testフレームワークで実装可能であることを確認
- [ ] Blocテストでは`bloc_test`パッケージの使用を検討
- [ ] Widgetテストでは`WidgetTester`を使用した実装を検討
