---
generated_at: 2026-01-28 16:10:00
metrics:
  claims_total: 56
  claims_with_evidence: 56
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：56 / 56、根拠なし：0
- 優先レビュー（高）
  1. **URL拡張のテストケース**：WMFProjectとWMFServiceEnvironmentへの依存関係のモック方法
  2. **DateFormatterのテスト**：タイムゾーン依存のテストにおける環境差異
  3. **Dictionary.encodedForAPI()のテスト**：パーセントエンコーディングの期待値検証

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

- E-01: `WMFData/Sources/WMFData/Extensions/CharacterSet+API.swift`
- E-02: `WMFData/Sources/WMFData/Extensions/DateFormatter+MediaWikiAPI.swift`
- E-03: `WMFData/Sources/WMFData/Extensions/Dictionary+API.swift`
- E-04: `WMFData/Sources/WMFData/Extensions/HTTPURLResponse+Extensions.swift`
- E-05: `WMFData/Sources/WMFData/Extensions/NSError+Extensions.swift`
- E-06: `WMFData/Sources/WMFData/Extensions/String+Extensions.swift`
- E-07: `WMFData/Sources/WMFData/Extensions/URL+API.swift`

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

### CharacterSet+API.swift (UT-WDE-001 - UT-WDE-004)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | urlQueryComponentAllowedがurlQueryAllowedから+, &, =を除外して生成される | E-01 (L4-8) | ○ |
| C-02 | +記号が許可文字セットから除外されている | E-01 (L6: `characterSet.remove(charactersIn: "+&=")`) | ○ |
| C-03 | &記号が許可文字セットから除外されている | E-01 (L6: `characterSet.remove(charactersIn: "+&=")`) | ○ |
| C-04 | =記号が許可文字セットから除外されている | E-01 (L6: `characterSet.remove(charactersIn: "+&=")`) | ○ |

### DateFormatter+MediaWikiAPI.swift (UT-WDE-005 - UT-WDE-011)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-05 | mediaWikiAPIDateFormatterのフォーマットがyyyy-MM-dd'T'HH:mm:ss'Z'である | E-02 (L8: `dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"`) | ○ |
| C-06 | mediaWikiAPIDateFormatterのタイムゾーンがGMTである | E-02 (L6: `TimeZone(secondsFromGMT: 0)`) | ○ |
| C-07 | mediaWikiAPIDateFormatterのロケールがen_US_POSIXである | E-02 (L7: `Locale(identifier: "en_US_POSIX")`) | ○ |
| C-08 | metricsAPIDateFormatterのフォーマットがyyyyMMddである | E-02 (L16: `dateFormat = "yyyyMMdd"`) | ○ |
| C-09 | metricsAPIDateFormatterのタイムゾーンがGMTである | E-02 (L14: `TimeZone(secondsFromGMT: 0)`) | ○ |
| C-10 | growthUserImpactAPIDateFormatterのフォーマットがyyyy-MM-ddである | E-02 (L24: `dateFormat = "yyyy-MM-dd"`) | ○ |
| C-11 | growthUserImpactAPIDateFormatterのタイムゾーンがGMTである | E-02 (L22: `TimeZone(secondsFromGMT: 0)`) | ○ |

### Dictionary+API.swift (UT-WDE-012 - UT-WDE-019)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-12 | encodedForAPI()がキーと値をパーセントエンコードする | E-03 (L11-12: `addingPercentEncoding`) | ○ |
| C-13 | エンコードにCharacterSet.urlQueryComponentAllowedを使用する | E-03 (L11-12) | ○ |
| C-14 | 値がString型でない場合はcontinueでスキップされる | E-03 (L12: `(value as? String)?`, L13: `continue`) | ○ |
| C-15 | 空の辞書が渡された場合空の辞書が返却される | E-03 (L5-6: 空の辞書で初期化しループ) | ○ |

### HTTPURLResponse+Extensions.swift (UT-WDE-020 - UT-WDE-026)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-16 | isSuccessStatusCodeが200-299の範囲でtrueを返す | E-04 (L4-5: `(200..<300).contains(self.statusCode)`) | ○ |
| C-17 | ステータスコード199ではfalseが返却される | E-04 (L4-5: 範囲外) | ○ |
| C-18 | ステータスコード300ではfalseが返却される | E-04 (L4-5: 範囲外、..<は終端を含まない) | ○ |
| C-19 | ステータスコード404ではfalseが返却される | E-04 (L4-5: 範囲外) | ○ |
| C-20 | ステータスコード500ではfalseが返却される | E-04 (L4-5: 範囲外) | ○ |

### NSError+Extensions.swift (UT-WDE-027 - UT-WDE-032)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-21 | NSURLErrorTimedOutでtrueが返却される | E-05 (L7: `NSURLErrorTimedOut`) | ○ |
| C-22 | NSURLErrorCannotConnectToHostでtrueが返却される | E-05 (L8: `NSURLErrorCannotConnectToHost`) | ○ |
| C-23 | NSURLErrorNetworkConnectionLostでtrueが返却される | E-05 (L9: `NSURLErrorNetworkConnectionLost`) | ○ |
| C-24 | NSURLErrorNotConnectedToInternetでtrueが返却される | E-05 (L10: `NSURLErrorNotConnectedToInternet`) | ○ |
| C-25 | 対象外のエラーコードではfalseが返却される | E-05 (L12-13: `default: return false`) | ○ |
| C-26 | 別ドメインのエラーではfalseが返却される | E-05 (L5-6: `domain`の判定) | ○ |

### String+Extensions.swift (UT-WDE-033 - UT-WDE-040)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-27 | spacesToUnderscoresがスペースをアンダースコアに変換する | E-06 (L4-5: `replacingOccurrences(of: " ", with: "_")`) | ○ |
| C-28 | underscoresToSpacesがアンダースコアをスペースに変換する | E-06 (L8-9: `replacingOccurrences(of: "_", with: " ")`) | ○ |
| C-29 | 変換対象がない文字列はそのまま返却される | E-06 (replacingOccurrencesの標準動作) | ○ |
| C-30 | 空文字列が渡された場合空文字列が返却される | E-06 (replacingOccurrencesの標準動作) | ○ |

### URL+API.swift (UT-WDE-041 - UT-WDE-056)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-31 | mediaWikiAPIURL()がbaseMediaWikiAPIPathComponentsを使用する | E-07 (L6, L22: `/w/api.php`) | ○ |
| C-32 | プロジェクトのsiteURLがnilの場合nilを返す | E-07 (L17-19: guard文) | ○ |
| C-33 | wikimediaRestAPIURL()がbaseWikimediaRestAPIPathComponentsを使用する | E-07 (L10, L33) | ○ |
| C-34 | 追加パスコンポーネントがjoined(separator: "/")で結合される | E-07 (L33, L44) | ○ |
| C-35 | mediaWikiRestAPIURL()がbaseMediaWikiRestAPIPathComponentsを使用する | E-07 (L13, L44: `/w/rest.php/`) | ○ |
| C-36 | paymentMethodsAPIURL()がpayments.wikimedia.orgを使用する | E-07 (L54: `host = "payments.wikimedia.org"`) | ○ |
| C-37 | metricsAPIURL()がwikimedia.orgを使用する | E-07 (L63: `host = "wikimedia.org"`) | ○ |
| C-38 | donatePaymentSubmissionURL()がpayments.wikimedia.orgを使用する | E-07 (L73) | ○ |
| C-39 | donateConfigURL()が本番環境でdonate.wikimedia.orgを使用する | E-07 (L86: `.production: host = "donate.wikimedia.org"`) | ○ |
| C-40 | donateConfigURL()がステージング環境でtest.wikipedia.orgを使用する | E-07 (L88: `.staging: host = "test.wikipedia.org"`) | ○ |
| C-41 | fundraisingCampaignConfigURL()が本番環境でdonate.wikimedia.orgを使用する | E-07 (L101) | ○ |
| C-42 | fundraisingCampaignConfigURL()がステージング環境でtest.wikipedia.orgを使用する | E-07 (L103) | ○ |
| C-43 | featureConfigURL()が本番環境でwikimediaRestAPIURLを呼び出す | E-07 (L112) | ○ |
| C-44 | featureConfigURL()がステージング環境でtest.wikipedia.orgを使用する | E-07 (L117) | ○ |
| C-45 | featureConfigURL()がステージング環境でaction=rawクエリパラメータを付与する | E-07 (L118: `queryItems = [URLQueryItem(name: "action", value: "raw")]`) | ○ |

## 4) 不足情報（Unknown / Missing）
- 該当なし
  - 全テストケースはソースコードに基づいて生成されており、根拠が確認できます

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: 全テストケースがソースコードから直接導出可能
- **注意点**:
  - URL+API.swiftのテストでは、WMFProjectとWMFServiceEnvironmentのモック/スタブが必要
  - DateFormatterのテストでは、システムタイムゾーンに依存しないテスト設計が必要
  - Dictionary.encodedForAPI()のテストでは、パーセントエンコーディングの期待値をSwiftの標準動作に基づいて設計

## 6) レビュアーチェックリスト（最小）
- [ ] CharacterSet.urlQueryComponentAllowedで除外される文字（+, &, =）が正しいか確認
- [ ] DateFormatterの各フォーマットがMediaWiki API仕様と一致しているか確認
- [ ] NSError.isInternetConnectionErrorで判定する4つのエラーコードが適切か確認
- [ ] URL生成メソッドのホスト名とパスが実際のAPI仕様と一致しているか確認
- [ ] WMFServiceEnvironmentの.production/.stagingの環境切り替えが正しくテストされるか確認
- [ ] テストケースの優先度（高/中/低）が適切に設定されているか確認
