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

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：88 / 88、根拠なし：0
- 優先レビュー（高）
  1. **UT-AEA-012, UT-AEA-014, UT-AEA-016**：リポジトリで例外発生時にforce unwrap（!）によるクラッシュの可能性があり、実際のエラーハンドリングを確認する必要あり
  2. **UT-AEA-057**：SharedPreference連携のモック化方法を確認
  3. **UT-AEA-081, UT-AEA-082**：LocationScreen連携のテスト実装方法を確認

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

- E-01: `lib/screens/add_edit_address/bloc/add_edit_address_bloc.dart` - BLoCパターンによる状態管理クラス
- E-02: `lib/screens/add_edit_address/bloc/add_edit_address_event.dart` - イベントクラス定義
- E-03: `lib/screens/add_edit_address/bloc/add_edit_address_state.dart` - 状態クラス定義
- E-04: `lib/screens/add_edit_address/bloc/add_edit_address_repository.dart` - リポジトリパターンによるAPI呼び出し
- E-05: `lib/screens/add_edit_address/view/add_edit_address_screen.dart` - メイン画面ウィジェット
- E-06: `lib/screens/add_edit_address/view/widget/get_address_form.dart` - 住所入力フォームウィジェット
- E-07: `lib/screens/add_edit_address/view/widget/save_address_button.dart` - 保存ボタンウィジェット
- E-08: `lib/screens/add_edit_address/view/widget/add_edit_address_loader_view.dart` - ローディングビュー
- E-09: `lib/screens/add_edit_address/utils/index.dart` - エクスポート定義
- E-10: `lib/screens/address_list/data_model/country_model.dart` - 国データモデル
- E-11: `lib/screens/address_list/data_model/address_model.dart` - 住所データモデル
- E-12: `lib/screens/address_list/data_model/update_address_model.dart` - 住所更新レスポンスモデル

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

### BLoCクラス（AddEditAddressBloc）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 (UT-AEA-001) | FetchEditAddressEventで住所更新が成功すること | E-01: L29-58 | ○ |
| C-02 (UT-AEA-002) | FetchEditAddressEventでAPI失敗時にエラーステートが発行されること | E-01: L52-57 | ○ |
| C-03 (UT-AEA-003) | FetchEditAddressEventで例外発生時にエラーステートが発行されること | E-01: L61-64 | ○ |
| C-04 (UT-AEA-004) | FetchAddAddressEventで住所追加が成功すること | E-01: L65-84 | ○ |
| C-05 (UT-AEA-005) | FetchAddAddressEventでAPI失敗時にエラーステートが発行されること | E-01: L82-84 | ○ |
| C-06 (UT-AEA-006) | FetchAddAddressEventで例外発生時にエラーステートが発行されること | E-01: L85-87 | ○ |
| C-07 (UT-AEA-007) | AddressCountryEventで国リストが取得できること | E-01: L88-92 | ○ |
| C-08 (UT-AEA-008) | AddressCountryEventで例外発生時にエラーステートが発行されること | E-01: L93-95 | ○ |
| C-09 (UT-AEA-009) | FetchEditAddressEventでaddressIdがnullの場合デフォルト値0が使用されること | E-01: L33 `event.addressId ?? 0` | ○ |
| C-10 (UT-AEA-010) | FetchAddAddressEventで各フィールドがnullの場合空文字がデフォルト使用されること | E-01: L68-77 `?? ""` | ○ |

### リポジトリクラス（AddEditAddressRepositoryImp）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-11 (UT-AEA-011) | 住所更新APIが正常に呼び出されること | E-04: L50-86 | ○ |
| C-12 (UT-AEA-012) | 住所更新APIで例外発生時の挙動確認 | E-04: L81-85 `return updateAddressModel!` force unwrap | ○ |
| C-13 (UT-AEA-013) | 住所作成APIが正常に呼び出されること | E-04: L88-122 | ○ |
| C-14 (UT-AEA-014) | 住所作成APIで例外発生時の挙動確認 | E-04: L117-121 `return baseModel!` force unwrap | ○ |
| C-15 (UT-AEA-015) | 国リスト取得APIが正常に呼び出されること | E-04: L123-133 | ○ |
| C-16 (UT-AEA-016) | 国リスト取得APIで例外発生時の挙動確認 | E-04: L128-132 `return countryData!` force unwrap | ○ |

### イベントクラス

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-17 (UT-AEA-017) | FetchAddAddressEventが正しく生成されること | E-02: L15-30 | ○ |
| C-18 (UT-AEA-018) | FetchAddAddressEventがすべてnullで生成できること | E-02: L16-27 すべてnullable | ○ |
| C-19 (UT-AEA-019) | FetchEditAddressEventが正しく生成されること | E-02: L32-47 | ○ |
| C-20 (UT-AEA-020) | FetchEditAddressEventがすべてnullで生成できること | E-02: L33-45 すべてnullable | ○ |
| C-21 (UT-AEA-021) | AddressCountryEventが正しく生成されること | E-02: L13 | ○ |

### 状態クラス

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 (UT-AEA-022) | FetchAddAddressState.successが正しく生成されること | E-03: L31 | ○ |
| C-23 (UT-AEA-023) | FetchAddAddressState.failが正しく生成されること | E-03: L33 | ○ |
| C-24 (UT-AEA-024) | FetchEditAddressState.successが正しく生成されること | E-03: L46 | ○ |
| C-25 (UT-AEA-025) | FetchEditAddressState.failが正しく生成されること | E-03: L48 | ○ |
| C-26 (UT-AEA-026) | propsがupdateAddressModelを含むこと | E-03: L50 | ○ |
| C-27 (UT-AEA-027) | updateAddressModelがnullの場合propsが空文字を含むこと | E-03: L50 `else ""` | ○ |
| C-28 (UT-AEA-028) | AddressCountryState.successが正しく生成されること | E-03: L62 | ○ |
| C-29 (UT-AEA-029) | AddressCountryState.failが正しく生成されること | E-03: L64 | ○ |
| C-30 (UT-AEA-030) | propsがcountryDataを含むこと | E-03: L66 | ○ |
| C-31 (UT-AEA-031) | InitialAddEditAddressStateのpropsが空リストであること | E-03: L19 | ○ |

### フォームウィジェット（GetAddressForm）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-32 (UT-AEA-032) | フォームウィジェットが正しく構築されること | E-06: L29-158 | ○ |
| C-33 (UT-AEA-033) | firstNameが入力されている場合nullが返ること | E-06: L41-46 | ○ |
| C-34 (UT-AEA-034) | firstNameが空の場合エラーメッセージが返ること | E-06: L42-45 | ○ |
| C-35 (UT-AEA-035) | lastNameが入力されている場合nullが返ること | E-06: L56-61 | ○ |
| C-36 (UT-AEA-036) | lastNameが空の場合エラーメッセージが返ること | E-06: L57-60 | ○ |
| C-37 (UT-AEA-037) | 有効なメールアドレスの場合nullが返ること | E-06: L71-78 | ○ |
| C-38 (UT-AEA-038) | メールアドレスが空の場合エラーメッセージが返ること | E-06: L72-74 | ○ |
| C-39 (UT-AEA-039) | 無効なメールアドレスの場合エラーメッセージが返ること | E-06: L75-77 `isValidEmail` | ○ |
| C-40 (UT-AEA-040) | 電話番号が入力されている場合nullが返ること | E-06: L104-109 | ○ |
| C-41 (UT-AEA-041) | 電話番号が空の場合エラーメッセージが返ること | E-06: L105-108 | ○ |
| C-42 (UT-AEA-042) | 住所が入力されている場合nullが返ること | E-06: L120-125 | ○ |
| C-43 (UT-AEA-043) | 住所が空の場合エラーメッセージが返ること | E-06: L121-124 | ○ |
| C-44 (UT-AEA-044) | 郵便番号が入力されている場合nullが返ること | E-06: L147-152 | ○ |
| C-45 (UT-AEA-045) | 郵便番号が空の場合エラーメッセージが返ること | E-06: L148-151 | ○ |
| C-46 (UT-AEA-046) | 会社名が空でもnullが返ること | E-06: L90-92 `return null` | ○ |
| C-47 (UT-AEA-047) | isCheckout=falseの場合VAT IDフィールドが表示されること | E-06: L128-137 `if(isCheckout==false)` | ○ |
| C-48 (UT-AEA-048) | isCheckout=trueの場合VAT IDフィールドが非表示になること | E-06: L128-137 条件分岐 | ○ |

### 保存ボタンウィジェット（SaveAddressButton）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-49 (UT-AEA-049) | 保存ボタンが正しく構築されること | E-07: L63-101 | ○ |
| C-50 (UT-AEA-050) | フォームが有効な場合に編集イベントが発行されること | E-07: L142-165 `isEdit ?? false ? ... FetchEditAddressEvent` | ○ |
| C-51 (UT-AEA-051) | フォームが有効な場合に追加イベントが発行されること | E-07: L166-180 `FetchAddAddressEvent` | ○ |
| C-52 (UT-AEA-052) | フォームが無効な場合にイベントが発行されないこと | E-07: L105 `if (widget.formKey.currentState!.validate())` | ○ |
| C-53 (UT-AEA-053) | 保存ボタンタップ時にローディングダイアログが表示されること | E-07: L106-140 `showDialog` | ○ |
| C-54 (UT-AEA-054) | デフォルト住所チェックボックスの状態が正しく切り替わること | E-07: L69-75 `onChanged` | ○ |

### メイン画面ウィジェット（AddNewAddress）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-55 (UT-AEA-055) | 編集モードで既存データが各コントローラーに設定されること | E-05: L63-95 | ○ |
| C-56 (UT-AEA-056) | 新規モードで顧客名がコントローラーに設定されること | E-05: L104-113 | ○ |
| C-57 (UT-AEA-057) | SharedPreferenceから顧客名が取得されること | E-05: L105 `appStoragePref.getCustomerName()` | ○ |
| C-58 (UT-AEA-058) | AppBarのタイトルが編集モードで正しく表示されること | E-05: L122-124 | ○ |
| C-59 (UT-AEA-059) | AppBarのタイトルが新規モードで正しく表示されること | E-05: L122-124 | ○ |
| C-60 (UT-AEA-060) | BlocConsumerがステート変更を正しくリッスンすること | E-05: L174-277 | ○ |
| C-61 (UT-AEA-061) | FetchEditAddressState.success時にナビゲーションが行われること | E-05: L180-221 | ○ |
| C-62 (UT-AEA-062) | FetchEditAddressState.fail時にエラー通知が表示されること | E-05: L177-179 | ○ |
| C-63 (UT-AEA-063) | FetchAddAddressState.success時にナビゲーションが行われること | E-05: L226-269 | ○ |
| C-64 (UT-AEA-064) | FetchAddAddressState.fail時にエラー通知が表示されること | E-05: L223-225 | ○ |
| C-65 (UT-AEA-065) | InitialAddEditAddressState時にローダーが表示されること | E-05: L312-317 | ○ |
| C-66 (UT-AEA-066) | InitialAddEditAddressState時にAddressCountryEventが発行されること | E-05: L313-314 | ○ |
| C-67 (UT-AEA-067) | AddressCountryState.success時に国リストが設定されること | E-05: L281-307 | ○ |
| C-68 (UT-AEA-068) | AddressCountryState.fail時にEmptyDataViewが表示されること | E-05: L308-310 | ○ |
| C-69 (UT-AEA-069) | 編集モードで国が選択リストから正しく設定されること | E-05: L286-300 | ○ |
| C-70 (UT-AEA-070) | 選択された国に州リストがある場合ドロップダウンが表示されること | E-05: L361-375 | ○ |
| C-71 (UT-AEA-071) | 選択された国に州リストがない場合テキストフィールドが表示されること | E-05: L376-391 | ○ |
| C-72 (UT-AEA-072) | 国リストが文字列リストに変換されること | E-05: L439-451 | ○ |
| C-73 (UT-AEA-073) | countryListが空の場合空リストが返却されること | E-05: L441 `if (countryList != null)` | ○ |
| C-74 (UT-AEA-074) | 国名がnullの場合「Select Country...」が設定されること | E-05: L443-444 | ○ |
| C-75 (UT-AEA-075) | 国ドロップダウン選択時にselectedCountryが更新されること | E-05: L454-461 | ○ |
| C-76 (UT-AEA-076) | 国選択時にcountryCodeが更新されること | E-05: L457 | ○ |
| C-77 (UT-AEA-077) | 国選択時に州リストがある場合selectedStateが先頭に設定されること | E-05: L458-460 | ○ |
| C-78 (UT-AEA-078) | 州ドロップダウン選択時にselectedStateが更新されること | E-05: L462-471 | ○ |
| C-79 (UT-AEA-079) | 州選択時にstateNameが更新されること | E-05: L468 | ○ |
| C-80 (UT-AEA-080) | 州選択時にstateNameControllerが更新されること | E-05: L471 | ○ |
| C-81 (UT-AEA-081) | LocationScreenから返却されたデータがフォームに設定されること | E-05: L127-150 | ○ |
| C-82 (UT-AEA-082) | LocationScreenから国情報が返却された場合selectedCountryが更新されること | E-05: L139-147 | ○ |

### ローダービュー（AddEditLoaderView）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-83 (UT-AEA-083) | ローダービューが正しく構築されること | E-08: L17-45 | ○ |
| C-84 (UT-AEA-084) | スケルトンローダーの色がテーマに従って設定されること | E-08: L25-26 | ○ |

### バリデーション（buildUI内）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-85 (UT-AEA-085) | 都市名が入力されている場合nullが返ること | E-05: L401-405 | ○ |
| C-86 (UT-AEA-086) | 都市名が空の場合エラーメッセージが返ること | E-05: L402-405 | ○ |
| C-87 (UT-AEA-087) | 州名が入力されている場合nullが返ること | E-05: L384-388 | ○ |
| C-88 (UT-AEA-088) | 州名が空の場合エラーメッセージが返ること | E-05: L385-388 | ○ |

## 4) 不足情報（Unknown / Missing）
- 不足情報なし。すべてのテストケースはソースコードに基づいて生成されています。

## 5) リスクフラグ（レビュー観点）
- **リスク1（高）**：リポジトリクラスのcallEditAddressApi、callCreateAddress、callCountriesDataメソッドで例外発生時に`!`（force unwrap）を使用しており、nullの場合にクラッシュする可能性があります。テストでは例外ハンドリングの挙動を確認する必要があります。
- **リスク0（低）**：状態クラスのpropsゲッターでnull判定後に空文字を返す実装は、Equatableの比較に影響を与える可能性があります。

## 6) レビュアーチェックリスト（最小）
- [ ] UT-AEA-012, UT-AEA-014, UT-AEA-016のforce unwrapに関するテストが適切にモック化されているか確認
- [ ] EmailValidatorとPhoneNumberValidatorのmixin実装が実際のバリデーションロジックと一致しているか確認
- [ ] LocationScreen連携テスト（UT-AEA-081, UT-AEA-082）のナビゲーション結果モック化方法を確認
- [ ] SharedPreference（appStoragePref）のモック化方法を確認
- [ ] 国/州ドロップダウンのfirstWhereOrNull使用箇所でcollectionパッケージの動作を確認
