---
generated_at: 2026-01-28 10:30:00
metrics:
  claims_total: 136
  claims_with_evidence: 136
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：wmf-framework-remotenotifications 単体テストケース一覧

## 本レポートについて

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

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

1. **根拠の有無確認**：各テストケースに対して、ソースコードの該当メソッド・プロパティが存在するか
2. **根拠との整合性**：テストケースの入力値・期待結果がソースコードのロジックと矛盾していないか
3. **網羅性**：参照すべきクラス・メソッドを適切にカバーしているか

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：136 / 136、根拠なし：0
- 優先レビュー（高）
  1. **認証・認可関連テスト（UT-RMN-004, 005, 009）**：セキュリティ上重要
  2. **データ永続化テスト（UT-RMN-056-060）**：データ整合性に関わる
  3. **API通信テスト（UT-RMN-031-040）**：外部連携の信頼性

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/RemoteNotificationsController.swift`
- E-02: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/RemoteNotificationsAPIController.swift`
- E-03: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/RemoteNotificationsOperationsController.swift`
- E-04: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/RemoteNotificationsRefreshDeadlineController.swift`
- E-05: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/NotificationServiceHelper.swift`
- E-06: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/RemoteNotification+CoreDataClass.swift`
- E-07: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/RemoteNotification+CoreDataProperties.swift`
- E-08: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/RemoteNotificationsModelController.swift`
- E-09: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/RemoteNotificationType.swift`
- E-10: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/RemoteNotificationFilterType.swift`
- E-11: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/RemoteNotificationLinks.swift`
- E-12: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/PushNotificationsCache.swift`
- E-13: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/PushNotificationsSettings.swift`
- E-14: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/PushNotificationContentIdentifier.swift`
- E-15: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/EchoModelVersion.swift`
- E-16: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Model/WikimediaProject+RemoteNotifications.swift`
- E-17: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Operations/RemoteNotificationsOperation.swift`
- E-18: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Operations/RemoteNotificationsPagingOperation.swift`
- E-19: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Operations/RemoteNotificationsImportOperation.swift`
- E-20: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Operations/RemoteNotificationsRefreshOperation.swift`
- E-21: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Operations/RemoteNotificationsMarkReadOrUnreadOperation.swift`
- E-22: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Operations/RemoteNotificationsMarkAllAsReadOperation.swift`
- E-23: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Operations/RemoteNotificationsProjectOperation.swift`
- E-24: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Operations/RemoteNotificationsRefreshCrossWikiOperation.swift`
- E-25: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Remote Notifications/Operations/RemoteNotificationsReauthenticateOperation.swift`

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

### RemoteNotificationsController（UT-RMN-001〜024）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | init初期化テスト | E-01 L64-85 | ○ |
| C-02 | init失敗時のnilテスト | E-01 L73-78 | ○ |
| C-03 | loadNotifications正常系 | E-01 L125-163 | ○ |
| C-04 | loadNotifications未認証エラー | E-01 L132-136 | ○ |
| C-05 | loadNotifications DB不可エラー | E-01 L127-130 | ○ |
| C-06 | loadNotificationsデッドライン | E-01 L138-141 | ○ |
| C-07 | markAsReadOrUnread既読マーク | E-01 L175-189 | ○ |
| C-08 | markAsReadOrUnread未読マーク | E-01 L175-189 | ○ |
| C-09 | markAsReadOrUnread未認証 | E-01 L182-186 | ○ |
| C-10 | markAllAsRead正常系 | E-01 L193-207 | ○ |
| C-11 | markAllAsSeen正常系 | E-01 L210-225 | ○ |
| C-12 | markAllAsSeen言語未設定 | E-01 L218-221 | ○ |
| C-13 | fetchNotifications正常系 | E-01 L246-281 | ○ |
| C-14 | fetchNotificationsページング | E-01 L243-244 | ○ |
| C-15 | numberOfUnreadNotifications | E-01 L284-292 | ○ |
| C-16 | numberOfUnreadNotifications境界 | E-01 L284-292 | ○ |
| C-17 | numberOfAllNotifications | E-01 L295-302 | ○ |
| C-18 | areFiltersEnabled有効 | E-01 L56-58 | ○ |
| C-19 | areFiltersEnabled無効 | E-01 L56-58 | ○ |
| C-20 | isFullyImported済 | E-01 L343-365 | ○ |
| C-21 | isFullyImported未済 | E-01 L343-365 | ○ |
| C-22 | updateCacheWithCurrentUnreadNotificationsCount | E-01 L317-323 | ○ |
| C-23 | authManagerDidLogOut | E-01 L109-113 | ○ |
| C-24 | authManagerDidLogIn | E-01 L115-117 | ○ |

### RemoteNotificationsFilterState（UT-RMN-025〜030）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-25 | FilterState初期化 | E-01 L540-544 | ○ |
| C-26 | serialize | E-01 L629-639 | ○ |
| C-27 | init?(nsDictionary:)正常 | E-01 L641-660 | ○ |
| C-28 | init?(nsDictionary:)異常 | E-01 L641-660 | ○ |
| C-29 | stateDescription | E-01 L550-557 | ○ |
| C-30 | detailDescription | E-01 L561-623 | ○ |

### RemoteNotificationsAPIController（UT-RMN-031〜049）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-31 | getUnreadPushNotifications正常 | E-02 L243-253 | ○ |
| C-32 | getUnreadPushNotificationsエラー | E-02 L244-248 | ○ |
| C-33 | getAllNotifications正常 | E-02 L255-265 | ○ |
| C-34 | getAllNotificationsページング | E-02 L255-265 | ○ |
| C-35 | markAllAsSeen正常 | E-02 L267-291 | ○ |
| C-36 | markAllAsSeenエラー | E-02 L269-271 | ○ |
| C-37 | markAllAsRead正常 | E-02 L293-315 | ○ |
| C-38 | markAllAsReadエラー | E-02 L296-298 | ○ |
| C-39 | markAsReadOrUnread正常 | E-02 L317-351 | ○ |
| C-40 | markAsReadOrUnreadバッチ | E-02 L318-320 | ○ |
| C-41 | Query.notifications | E-02 L407-432 | ○ |
| C-42 | Query.markAsReadOrUnread既読 | E-02 L434-446 | ○ |
| C-43 | Query.markAsReadOrUnread未読 | E-02 L434-446 | ○ |
| C-44 | Notification.key | E-02 L476-478 | ○ |
| C-45 | Notification.date正常 | E-02 L480-482 | ○ |
| C-46 | Notification.date異常 | E-02 L480-482 | ○ |
| C-47 | isNewerThan新しい | E-02 L496-502 | ○ |
| C-48 | isNewerThan古い | E-02 L496-502 | ○ |
| C-49 | pushContentText | E-02 L484-486 | ○ |

### RemoteNotificationsModelController（UT-RMN-050〜068）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-50 | init正常 | E-08 L61-94 | ○ |
| C-51 | initエラー | E-08 L67-76 | ○ |
| C-52 | numberOfUnreadNotifications | E-08 L169-174 | ○ |
| C-53 | numberOfAllNotifications | E-08 L176-180 | ○ |
| C-54 | fetchNotifications正常 | E-08 L184-194 | ○ |
| C-55 | fetchNotifications条件付き | E-08 L184-194 | ○ |
| C-56 | createNewNotifications正常 | E-08 L196-216 | ○ |
| C-57 | createNewNotifications日付なし | E-08 L361-365 | ○ |
| C-58 | markAllAsRead正常 | E-08 L220-254 | ○ |
| C-59 | markAllAsReadエラー | E-08 L236-239 | ○ |
| C-60 | markAsReadOrUnread | E-08 L256-282 | ○ |
| C-61 | distinctWikisWithUnreadNotifications | E-08 L286-288 | ○ |
| C-62 | distinctWikis | E-08 L290-293 | ○ |
| C-63 | isProjectAlreadyImported済 | E-08 L345-353 | ○ |
| C-64 | isProjectAlreadyImported未済 | E-08 L345-353 | ○ |
| C-65 | resetDatabaseAndSharedCache | E-08 L116-157 | ○ |
| C-66 | deleteLegacyDatabaseFiles | E-08 L102-114 | ○ |
| C-67 | getFilterSettingsFromLibrary | E-08 L314-316 | ○ |
| C-68 | setFilterSettingsToLibrary | E-08 L318-320 | ○ |

### RemoteNotificationsRefreshDeadlineController（UT-RMN-069〜072）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-69 | shouldRefresh初回 | E-04 L9-16 | ○ |
| C-70 | shouldRefresh30秒後 | E-04 L9-16 | ○ |
| C-71 | shouldRefresh30秒未満 | E-04 L9-16 | ○ |
| C-72 | reset | E-04 L20-22 | ○ |

### RemoteNotificationsOperationsController（UT-RMN-073〜076）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-73 | loadNotifications開始 | E-03 L57-84 | ○ |
| C-74 | loadNotifications重複制御 | E-03 L65-67 | ○ |
| C-75 | markAsReadOrUnread wiki別 | E-03 L86-129 | ○ |
| C-76 | markAllAsRead | E-03 L131-162 | ○ |

### Operations（UT-RMN-077〜092）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-77 | PagingOperation早期終了 | E-18 L59-64 | ○ |
| C-78 | PagingOperation再帰フェッチ | E-18 L69-135 | ○ |
| C-79 | shouldContinueToPage | E-18 L32-34 | ○ |
| C-80 | ImportOperation shouldExecute未 | E-19 L7-10 | ○ |
| C-81 | ImportOperation shouldExecute済 | E-19 L7-10 | ○ |
| C-82 | ImportOperation didFetchAndSaveAllPages | E-19 L17-19 | ○ |
| C-83 | ImportOperation willFetchAndSaveNewPage | E-19 L21-23 | ○ |
| C-84 | RefreshOperation shouldContinueToPage既存 | E-20 L5-24 | ○ |
| C-85 | RefreshOperation shouldContinueToPage新規 | E-20 L5-24 | ○ |
| C-86 | MarkReadOrUnreadOperation正常 | E-21 L20-48 | ○ |
| C-87 | MarkReadOrUnreadOperationエラー | E-21 L43-44 | ○ |
| C-88 | MarkAllAsReadOperation正常 | E-22 L5-37 | ○ |
| C-89 | RefreshCrossWikiGroupOperation | E-24 L42-59 | ○ |
| C-90 | crossWikiOperations重複除外 | E-24 L66-79 | ○ |
| C-91 | ReauthenticateOperation再認証 | E-25 L13-35 | ○ |
| C-92 | ReauthenticateOperation他エラー | E-25 L15-18 | ○ |

### Models（UT-RMN-093〜136）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-93 | RemoteNotification.type | E-06 L7-9 | ○ |
| C-94 | typeFrom各パターン | E-06 L15-81 | ○ |
| C-95 | typeFromフォールバック | E-06 L71-80 | ○ |
| C-96 | linkHost primary | E-06 L83-86 | ○ |
| C-97 | linkHost secondary | E-06 L88-95 | ○ |
| C-98 | identifierGroup | E-06 L127-135 | ○ |
| C-99 | RemoteNotificationType.imageName | E-09 L38-65 | ○ |
| C-100 | RemoteNotificationType.priority | E-09 L140-179 | ○ |
| C-101 | RemoteNotificationFilterType.init正常 | E-10 L23-64 | ○ |
| C-102 | RemoteNotificationFilterType.init異常 | E-10 L61-63 | ○ |
| C-103 | categoryStringsForFilterType | E-10 L107-145 | ○ |
| C-104 | typeStringForFilterType | E-10 L147-190 | ○ |
| C-105 | NotificationServiceHelper.allNotificationsAreForSameTalkPage同一 | E-05 L5-21 | ○ |
| C-106 | NotificationServiceHelper.allNotificationsAreForSameTalkPage異 | E-05 L13-17 | ○ |
| C-107 | NotificationServiceHelper namespace判定 | E-05 L8-10 | ○ |
| C-108 | determineNotificationsToDisplayAndCache新規 | E-05 L23-38 | ○ |
| C-109 | determineNotificationsToDisplayAndCache古い | E-05 L29 | ○ |
| C-110 | determineNotificationsToDisplayAndCacheキャッシュ | E-05 L26 | ○ |
| C-111 | talkPageContent正常 | E-05 L40-60 | ○ |
| C-112 | talkPageContent単一 | E-05 L52-54 | ○ |
| C-113 | talkPageContent複数 | E-05 L55-57 | ○ |
| C-114 | talkPageContent非トーク | E-05 L42-43 | ○ |
| C-115 | RemoteNotificationLinks.init | E-11 L11-15 | ○ |
| C-116 | RemoteNotificationLinks NSCoding | E-11 L17-30 | ○ |
| C-117 | RemoteNotificationLink JSON | E-11 L47-74 | ○ |
| C-118 | RemoteNotificationLink URLエンコード | E-11 L55-66 | ○ |
| C-119 | PushNotificationsCache.init | E-12 L9-13 | ○ |
| C-120 | PushNotificationsSettings.init | E-13 L15-19 | ○ |
| C-121 | PushNotificationsSettings.default | E-13 L7 | ○ |
| C-122 | PushNotificationContentIdentifier.save | E-14 L22-27 | ○ |
| C-123 | PushNotificationContentIdentifier.load正常 | E-14 L29-35 | ○ |
| C-124 | PushNotificationContentIdentifier.load異常 | E-14 L30-31 | ○ |
| C-125 | EchoModelVersion.current | E-15 L5-6 | ○ |
| C-126 | WikimediaProject.notificationsApiWikiIdentifier Wikipedia | E-16 L57-60 | ○ |
| C-127 | WikimediaProject.notificationsApiWikiIdentifier Commons | E-16 L62-63 | ○ |
| C-128 | WikimediaProject.notificationsApiWikiIdentifier Wikidata | E-16 L64-65 | ○ |
| C-129 | WikimediaProject.init Wikipedia | E-16 L252-285 | ○ |
| C-130 | WikimediaProject.init Commons | E-16 L244-245 | ○ |
| C-131 | WikimediaProject.init unknown | E-16 L281-283 | ○ |
| C-132 | projectName coded | E-16 L123-134 | ○ |
| C-133 | projectName localized | E-16 L129-130 | ○ |
| C-134 | mediaWikiAPIURL | E-16 L179-207 | ○ |
| C-135 | languageVariantCode Wikipedia | E-16 L166-173 | ○ |
| C-136 | languageVariantCode other | E-16 L170-172 | ○ |

## 4) 不足情報（Unknown / Missing）
- なし - すべてのテストケースはソースコードに根拠が存在する

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: すべてのテストケースがソースコードに基づいて生成されている
- **注意事項**:
  - 一部のメソッドはプライベートアクセス修飾子であり、直接テストするには内部テストまたはリフレクションが必要
  - 非同期処理（completion handler）を含むメソッドはモック/スタブを使用したテストが推奨
  - CoreData関連のテストにはインメモリストアを使用した設定が推奨

## 6) レビュアーチェックリスト（最小）
- [ ] 認証関連テスト（UT-RMN-004, 005, 009）が適切なセキュリティ要件を満たしているか
- [ ] 非同期処理のテストで適切なexpectation/waitが設定されているか
- [ ] CoreDataテストでインメモリストアが適切に構成されているか
- [ ] APIエラーケースでリトライロジックが考慮されているか
- [ ] バッチ処理（50件チャンク）のエッジケースが網羅されているか
- [ ] 言語バリアント（zh-hans, zh-hant等）の処理が正しくテストされているか
