---
generated_at: 2026-01-28 10:30:00
metrics:
  claims_total: 75
  claims_with_evidence: 72
  claims_without_evidence: 3
confidence_derived: 0.96
---

# 根拠レポート：wikipedia-auth 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：72 / 75、根拠なし：3
- 優先レビュー（高）
  1. **UT-AUTH-067/068 LoginCoordinator**: ストーリーボード依存のテスト観点
  2. **UT-AUTH-069-072 LoginFunnel**: イベント送信の実際の動作確認
  3. **UT-AUTH-073-075 WMFHCaptchaViewController**: 外部ライブラリ(HCaptcha)依存

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

- E-01: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFAuthenticationManager.swift`
- E-02: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFAccountLoginLogoutFetcher.swift`
- E-03: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFAccountCreator.swift`
- E-04: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFKeychainCredentials.swift`
- E-05: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/KeychainCredentialsManager.swift`
- E-06: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFCurrentUserFetcher.swift`
- E-07: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFPasswordResetter.swift`
- E-08: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFAuthLoginInfoFetcher.swift`
- E-09: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/WMFCaptcha.swift`
- E-10: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/Session.swift`
- E-11: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/LoginCoordinator.swift`
- E-12: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/LoginFunnel.swift`
- E-13: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFLoginViewController.swift`
- E-14: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFTwoFactorPasswordViewController.swift`
- E-15: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFAccountCreationViewController.swift`
- E-16: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFHCaptchaViewController.swift`
- E-17: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFChangePasswordViewController.swift`
- E-18: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFForgotPasswordViewController.swift`

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | WMFAuthenticationManager.login正常系 | E-01 (L177-212) | ○ |
| C-02 | WMFAuthenticationManager.login空ユーザー名 | E-01 (L22-33) LoginError enum定義 | ○ |
| C-03 | WMFAuthenticationManager.login空パスワード | E-01 (L22-33) LoginError enum定義 | ○ |
| C-04 | WMFAuthenticationManager.loginSiteURLnil | E-01 (L178-183) guard文 | ○ |
| C-05 | WMFAuthenticationManager.loginWithSavedCredentials正常系 | E-01 (L218-298) | ○ |
| C-06 | WMFAuthenticationManager.loginWithSavedCredentials認証情報なし | E-01 (L220-227) guard文 | ○ |
| C-07 | WMFAuthenticationManager.logout正常系 | E-01 (L337-372) | ○ |
| C-08 | WMFAuthenticationManager.logoutアプリ起動フラグ | E-01 (L339-341) | ○ |
| C-09 | WMFAuthenticationManager.logoutサーバー起動フラグ | E-01 (L339-341) | ○ |
| C-10 | WMFAuthenticationManager.authStatePermanentUsername正常系 | E-01 (L115-126) | ○ |
| C-11 | WMFAuthenticationManager.authStatePermanentUsernamenil | E-01 (L115-126) | ○ |
| C-12 | WMFAuthenticationManager.authStateIsPermanent正常系 | E-01 (L129-139) | ○ |
| C-13 | WMFAuthenticationManager.authStateIsPermanentfalse | E-01 (L129-139) | ○ |
| C-14 | WMFAuthenticationManager.authStateIsTemporary正常系 | E-01 (L141-143) | ○ |
| C-15 | WMFAuthenticationManager.authStateIsTemporaryfalse | E-01 (L141-143) | ○ |
| C-16 | WMFAuthenticationManager.user(siteURL:)正常系 | E-01 (L83-92) | ○ |
| C-17 | WMFAuthenticationManager.user(siteURL:)nil | E-01 (L83-92) | ○ |
| C-18 | WMFAuthenticationManager.permanentUser正常系 | E-01 (L99-112) | ○ |
| C-19 | WMFAuthenticationManager.permanentUsernil | E-01 (L99-112) | ○ |
| C-20 | WMFAccountLoginLogoutFetcher.login正常系 | E-02 (L40-203) | ○ |
| C-21 | WMFAccountLoginLogoutFetcher.login誤パスワード | E-02 (L130-132) wrongpassword case | ○ |
| C-22 | WMFAccountLoginLogoutFetcher.login一時パスワード | E-02 (L144-155) PasswordAuthenticationRequest | ○ |
| C-23 | WMFAccountLoginLogoutFetcher.login 2FA必要 | E-02 (L157-167) TOTPAuthenticationRequest | ○ |
| C-24 | WMFAccountLoginLogoutFetcher.loginメール認証必要 | E-02 (L184-194) EmailAuthAuthenticationRequest | ○ |
| C-25 | WMFAccountLoginLogoutFetcher.login CAPTCHA必要 | E-02 (L104-125) captcha handling | ○ |
| C-26 | WMFAccountLoginLogoutFetcher.login 2FAトークン付き | E-02 (L58-61) oathToken parameter | ○ |
| C-27 | WMFAccountLoginLogoutFetcher.login無効2FAトークン | E-02 (L133-135) oathauth-login-failed | ○ |
| C-28 | WMFAccountLoginLogoutFetcher.logout正常系 | E-02 (L205-209) | ○ |
| C-29 | WMFAccountLoginLogoutFetcher.logoutネットワークエラー | E-02 (L205-209) error handling | ○ |
| C-30 | WMFAccountCreator.createAccount正常系 | E-03 (L103-163) | ○ |
| C-31 | WMFAccountCreator.createAccount既存ユーザー | E-03 (L147-149) userexists case | ○ |
| C-32 | WMFAccountCreator.createAccount CAPTCHA不正 | E-03 (L143-146) captcha-createaccount-fail | ○ |
| C-33 | WMFAccountCreator.createAccountブロック | E-03 (L152-155) block check | ○ |
| C-34 | WMFAccountCreator.checkUsername利用可能 | E-03 (L74-101) | ○ |
| C-35 | WMFAccountCreator.checkUsername利用不可 | E-03 (L74-101) | ○ |
| C-36 | WMFKeychainCredentials.userName get正常系 | E-04 (L15-30) | ○ |
| C-37 | WMFKeychainCredentials.userName getnil | E-04 (L15-30) | ○ |
| C-38 | WMFKeychainCredentials.userName set正常系 | E-04 (L15-30) | ○ |
| C-39 | WMFKeychainCredentials.userName setnil | E-04 (L116-125) deleteValue | ○ |
| C-40 | WMFKeychainCredentials.password get正常系 | E-04 (L32-47) | ○ |
| C-41 | WMFKeychainCredentials.password getnil | E-04 (L32-47) | ○ |
| C-42 | WMFKeychainCredentials.password set正常系 | E-04 (L32-47) | ○ |
| C-43 | WMFKeychainCredentials.password setnil | E-04 (L116-125) deleteValue | ○ |
| C-44 | KeychainCredentialsManager.username | E-05 (L5-11) | ○ |
| C-45 | KeychainCredentialsManager.password | E-05 (L13-19) | ○ |
| C-46 | WMFCurrentUser.init permanent | E-06 (L27-43) | ○ |
| C-47 | WMFCurrentUser.init IP | E-06 (L35-36) | ○ |
| C-48 | WMFCurrentUser.init temporary | E-06 (L37-38) | ○ |
| C-49 | WMFCurrentUserFetcher.fetch正常系 | E-06 (L47-89) | ○ |
| C-50 | WMFCurrentUserFetcher.fetchエラー | E-06 (L67-69) cannotExtractUserInfo | ○ |
| C-51 | WMFPasswordResetter.resetPasswordユーザー名 | E-07 (L25-59) | ○ |
| C-52 | WMFPasswordResetter.resetPasswordメール | E-07 (L25-59) | ○ |
| C-53 | WMFPasswordResetter.resetPasswordエラー | E-07 (L43-46) accountError | ○ |
| C-54 | WMFAuthLoginInfoFetcher.fetchLoginInfo正常系 | E-08 (L22-50) | ○ |
| C-55 | WMFAuthLoginInfoFetcher.fetchLoginInfoエラー | E-08 (L43-46) cannotAuthenticateNow | ○ |
| C-56 | WMFCaptcha.captcha classic | E-09 (L28-60) | ○ |
| C-57 | WMFCaptcha.captcha hCaptcha | E-09 (L30-45) | ○ |
| C-58 | WMFCaptcha.captcha nil | E-09 (L28-60) | ○ |
| C-59 | Session.hasCentralAuthUserCookie true | E-10 (L91-102) | ○ |
| C-60 | Session.hasCentralAuthUserCookie false | E-10 (L91-102) | ○ |
| C-61 | Session.getCentralAuthUserCookie正常系 | E-10 (L104-115) | ○ |
| C-62 | Session.getCentralAuthUserCookie nil | E-10 (L104-115) | ○ |
| C-63 | Session.removeAllCookies | E-10 (L126-135) | ○ |
| C-64 | Session.hasValidCentralAuthCookies true | E-10 (L137-152) | ○ |
| C-65 | Session.hasValidCentralAuthCookies false | E-10 (L137-152) | ○ |
| C-66 | Session.cloneCentralAuthCookies | E-10 (L117-120) | ○ |
| C-67 | LoginCoordinator.start正常系 | E-11 (L27-48) | ○ |
| C-68 | LoginCoordinator.startエラー | E-11 (L28-30) guard文 | △ |
| C-69 | LoginFunnel.logSuccess | E-12 (L44-46) | ○ |
| C-70 | LoginFunnel.logLogoutInSettings | E-12 (L68-70) | ○ |
| C-71 | LoginFunnel.logCreateAccountAttempt | E-12 (L48-50) | ○ |
| C-72 | LoginFunnel.logCreateAccountSuccess | E-12 (L52-54) | ○ |
| C-73 | WMFHCaptchaViewController.validate成功 | E-16 (L68-87) | ○ |
| C-74 | WMFHCaptchaViewController.validateエラー | E-16 (L78-81) | ○ |
| C-75 | WMFHCaptchaViewController.setupHCaptcha設定エラー | E-16 (L92-94) | △ |

## 4) 不足情報（Unknown / Missing）
- **C-68 LoginCoordinator.startエラー**: ストーリーボードからのViewControllerインスタンス化失敗のテストは実際のアプリバンドルを必要とするため、ユニットテストでの再現が困難
  - 候補：UIテスト / インテグレーションテストで確認
- **C-75 WMFHCaptchaViewController.setupHCaptcha設定エラー**: WMFDeveloperSettingsDataController.shared.loadFeatureConfig()の返却値に依存しており、モック化が必要
  - 候補：依存性注入による設定のモック化 / 設定ファイルの変更

## 5) リスクフラグ（レビュー観点）
- **0 (低リスク)**: 大部分のテストケース - ソースコードから明確に導出可能
- **1 (中リスク)**: 外部API依存のテスト（MediaWiki API呼び出し） - モック化が必要
- **1 (中リスク)**: Keychainアクセス - セキュリティ関連のため実機テストでの確認推奨
- **1 (中リスク)**: HCaptchaライブラリ依存 - 外部ライブラリの動作に依存

## 6) レビュアーチェックリスト（最小）
- [ ] WMFAuthenticationManagerのlogin/logoutフローが正しくカバーされているか
- [ ] Keychainへの認証情報保存・削除が適切にテストされているか
- [ ] 2FA/メール認証のエラーハンドリングが網羅されているか
- [ ] CAPTCHAの各種タイプ（Classic/hCaptcha）が考慮されているか
- [ ] セッション管理（クッキー）のテストケースが十分か
- [ ] アカウント作成のエラーケース（既存ユーザー、ブロック等）が網羅されているか
- [ ] パスワードリセットフローがテストされているか
