---
generated_at: 2026-01-29 10:30:00
metrics:
  claims_total: 100
  claims_with_evidence: 95
  claims_without_evidence: 5
confidence_derived: 0.95
---

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

## 本レポートについて

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

### チェック方法
以下の観点でテストケースの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各テストケースに対して、ソースコード上のメソッド・クラスが実在するか
2. **根拠との整合性**：テストケースの内容がコードの実際の動作と矛盾していないか
3. **網羅性**：対象モジュール内の主要なクラス・メソッドを適切にカバーしているか

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：95 / 100、根拠なし：5
- 優先レビュー（高）
  1. **UT-ADM-028〜031（SnippetFinder）**：privateメソッドの内部動作に依存、実装詳細の推測を含む
  2. **UT-ADM-090〜093（AdministrationReadinessCheck）**：Kernelモック、外部依存が多い
  3. **UT-ADM-097〜100（SystemLanguageChangedSubscriber）**：特殊ケースの動作確認が必要

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

- E-01: `src/Administration/Notification/NotificationEntity.php`
- E-02: `src/Administration/Notification/NotificationDefinition.php`
- E-03: `src/Administration/Notification/NotificationCollection.php`
- E-04: `src/Administration/Snippet/AppAdministrationSnippetEntity.php`
- E-05: `src/Administration/Snippet/AppAdministrationSnippetDefinition.php`
- E-06: `src/Administration/Snippet/AppAdministrationSnippetCollection.php`
- E-07: `src/Administration/Service/AdminSearcher.php`
- E-08: `src/Administration/Snippet/SnippetFinder.php`
- E-09: `src/Administration/Snippet/CachedSnippetFinder.php`
- E-10: `src/Administration/Snippet/AppAdministrationSnippetPersister.php`
- E-11: `src/Administration/Dashboard/OrderAmountService.php`
- E-12: `src/Administration/Framework/Search/CriteriaCollection.php`
- E-13: `src/Administration/Snippet/SnippetException.php`
- E-14: `src/Administration/Controller/AdminSearchController.php`
- E-15: `src/Administration/Controller/UserConfigController.php`
- E-16: `src/Administration/Controller/DashboardController.php`
- E-17: `src/Administration/Snippet/AppLifecycleSubscriber.php`
- E-18: `src/Administration/Framework/Routing/KnownIps/KnownIpsCollector.php`
- E-19: `src/Administration/System/SalesChannel/Subscriber/SalesChannelUserConfigSubscriber.php`
- E-20: `src/Administration/Framework/Routing/AdministrationRouteScope.php`
- E-21: `src/Administration/Framework/Routing/NotFound/AdministrationNotFoundSubscriber.php`
- E-22: `src/Administration/Framework/Adapter/Cache/Http/AdministrationCacheControlListener.php`
- E-23: `src/Administration/Framework/Twig/ViteFileAccessorDecorator.php`
- E-24: `src/Administration/Framework/SystemCheck/AdministrationReadinessCheck.php`
- E-25: `src/Administration/Framework/App/Subscriber/SystemLanguageChangedSubscriber.php`

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

### Notification関連（非推奨クラス）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | NotificationEntity::getId() がIDを返却する | E-01 L38-43 | ○ |
| C-02 | NotificationEntity::setId() がIDとuniqueIdentifierを設定する | E-01 L45-50 | ○ |
| C-03 | NotificationEntity::getCreatedByIntegrationId() がIntegrationIDを返却する | E-01 L52-57 | ○ |
| C-04 | NotificationEntity::getCreatedByIntegrationId() がnullを返却可能 | E-01 L19 | ○ |
| C-05 | NotificationEntity::getCreatedByUserId() がUserIDを返却する | E-01 L78-82 | ○ |
| C-06 | NotificationEntity::isAdminOnly() がadminOnlyフラグを返却する | E-01 L104-109 | ○ |
| C-07 | NotificationEntity::getRequiredPrivileges() が権限配列を返却する | E-01 L120-125 | ○ |
| C-08 | NotificationEntity::getRequiredPrivileges() が空配列をデフォルトで返却可能 | E-01 L32 | ○ |
| C-09 | NotificationDefinition::getEntityName() が 'notification' を返却する | E-02 L31, L33-38 | ○ |
| C-10 | NotificationDefinition::getCollectionClass() がNotificationCollectionを返却する | E-02 L40-45 | ○ |
| C-11 | NotificationDefinition::getEntityClass() がNotificationEntityを返却する | E-02 L47-52 | ○ |
| C-12 | NotificationDefinition::getDefaults() がデフォルト値を返却する | E-02 L54-62 | ○ |
| C-13 | NotificationDefinition::defineFields() がフィールドコレクションを定義する | E-02 L81-98 | ○ |

### AppAdministrationSnippet関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-14 | AppAdministrationSnippetEntity::getValue() がスニペット値を返却する | E-04 L20-23 | ○ |
| C-15 | AppAdministrationSnippetEntity::setValue() がスニペット値を設定する | E-04 L25-28 | ○ |
| C-16 | AppAdministrationSnippetEntity::getAppId() がアプリIDを返却する | E-04 L30-33 | ○ |
| C-17 | AppAdministrationSnippetEntity::getLocaleId() がロケールIDを返却する | E-04 L40-43 | ○ |
| C-18 | AppAdministrationSnippetDefinition::getEntityName() が 'app_administration_snippet' を返却する | E-05 L23, L25-28 | ○ |
| C-19 | AppAdministrationSnippetDefinition::getCollectionClass() がコレクションクラスを返却する | E-05 L30-33 | ○ |
| C-20 | AppAdministrationSnippetDefinition::getEntityClass() がエンティティクラスを返却する | E-05 L35-38 | ○ |
| C-21 | AppAdministrationSnippetDefinition::defineFields() がフィールドを定義する | E-05 L45-54 | ○ |
| C-22 | AppAdministrationSnippetCollection::getApiAlias() がAPIエイリアスを返却する | E-06 L14-17 | ○ |
| C-23 | AppAdministrationSnippetCollection::getExpectedClass() が期待クラスを返却する | E-06 L19-22 | ○ |

### AdminSearcher関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 | AdminSearcher::search() が検索結果を返却する | E-07 L26-49 | ○ |
| C-25 | AdminSearcher::search() が存在しないエンティティをスキップする | E-07 L31-33 | ○ |
| C-26 | AdminSearcher::search() が権限チェックを行う | E-07 L35-37 | ○ |
| C-27 | AdminSearcher::search() が空のCriteriaCollectionで空配列を返却する | E-07 L28-30 | ○ |

### SnippetFinder関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | SnippetFinder::findSnippets() がスニペットを返却する | E-08 L48-61 | ○ |
| C-29 | SnippetFinder::findSnippets() が国コードなしとありのスニペットをマージする | E-08 L50-57 | ○ |
| C-30 | SnippetFinder::findSnippets() がアプリスニペットを含める | E-08 L59 | ○ |
| C-31 | SnippetFinder::findSnippets() が存在しないロケールでフォールバックする | E-08 L63-104 | △ |

### CachedSnippetFinder関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-32 | CachedSnippetFinder::findSnippets() がキャッシュヒット時にキャッシュから返却する | E-09 L25-31 | ○ |
| C-33 | CachedSnippetFinder::findSnippets() がキャッシュミス時にSnippetFinderを呼ぶ | E-09 L33-34 | ○ |
| C-34 | CachedSnippetFinder::findSnippets() がキャッシュにタグを設定する | E-09 L37 | ○ |

### AppAdministrationSnippetPersister関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-35 | AppAdministrationSnippetPersister::updateSnippets() がスニペットを保存する | E-10 L39-96 | ○ |
| C-36 | AppAdministrationSnippetPersister::updateSnippets() がen-GBがない場合に例外をスローする | E-10 L56-58 | ○ |
| C-37 | AppAdministrationSnippetPersister::updateSnippets() がコア重複キーで例外をスローする | E-10 L51-53 | ○ |
| C-38 | AppAdministrationSnippetPersister::updateSnippets() が既存スニペットを更新する | E-10 L76-78 | ○ |
| C-39 | AppAdministrationSnippetPersister::updateSnippets() が不要なスニペットを削除する | E-10 L91-93 | ○ |
| C-40 | AppAdministrationSnippetPersister::updateSnippets() がキャッシュを無効化する | E-10 L95 | ○ |

### OrderAmountService関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-41 | OrderAmountService::load() が注文金額統計を返却する | E-11 L29-90 | ○ |
| C-42 | OrderAmountService::load() が支払済みフィルタを適用する | E-11 L57-69 | ○ |
| C-43 | OrderAmountService::load() がタイムゾーン変換を適用する | E-11 L35-39 | ○ |
| C-44 | OrderAmountService::load() が通貨換算を適用する | E-11 L45-48 | ○ |
| C-45 | OrderAmountService::load() が注文がない場合に空配列を返却する | E-11 L80-88 | ○ |
| C-46 | OrderAmountService::load() が金額を丸める | E-11 L85 | ○ |

### CriteriaCollection関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-47 | CriteriaCollection::getExpectedClass() がCriteria::classを返却する | E-12 L14-17 | ○ |

### SnippetException関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-48 | SnippetException::extendOrOverwriteCore() が例外を生成する | E-13 L43-50 | ○ |
| C-49 | SnippetException::defaultLanguageNotGiven() が例外を生成する | E-13 L53-60 | ○ |

### AdminSearchController関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-50 | AdminSearchController::search() がJSON形式で検索結果を返却する | E-14 L45-83 | ○ |
| C-51 | AdminSearchController::search() が権限違反をレスポンスに含める | E-14 L49-58 | ○ |
| C-52 | AdminSearchController::search() が存在しないエンティティをスキップする | E-14 L91-94 | ○ |

### UserConfigController関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-53 | UserConfigController::getConfigMe() がユーザー設定を取得する | E-15 L43-54 | ○ |
| C-54 | UserConfigController::getConfigMe() がキーでフィルタリングする | E-15 L46, L79-80 | ○ |
| C-55 | UserConfigController::getConfigMe() がAdminApiSourceでない場合に例外をスローする | E-15 L88-91 | ○ |
| C-56 | UserConfigController::getConfigMe() がユーザーIDがない場合に例外をスローする | E-15 L93-96 | ○ |
| C-57 | UserConfigController::updateConfigMe() がユーザー設定を更新する | E-15 L56-68 | ○ |
| C-58 | UserConfigController::updateConfigMe() が空リクエストで204を返却する | E-15 L61-63 | ○ |
| C-59 | UserConfigController::updateConfigMe() が既存設定を上書きする | E-15 L104-130 | ○ |

### DashboardController関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-60 | DashboardController::orderAmount() が注文金額統計を返却する | E-16 L26-36 | ○ |
| C-61 | DashboardController::orderAmount() のpaidパラメータがデフォルトでtrue | E-16 L29 | ○ |
| C-62 | DashboardController::orderAmount() のtimezoneパラメータがデフォルトでUTC | E-16 L31 | ○ |

### AppLifecycleSubscriber関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-63 | AppLifecycleSubscriber::getSubscribedEvents() がイベント購読を設定する | E-17 L26-31 | ○ |
| C-64 | AppLifecycleSubscriber::onAppUpdate() がアプリインストール時にスニペットを更新する | E-17 L34-39 | ○ |
| C-65 | AppLifecycleSubscriber::onAppUpdate() がアプリ更新時にスニペットを更新する | E-17 L34-39 | ○ |
| C-66 | AppLifecycleSubscriber::onAppUpdate() がスニペットがないアプリで空配列を渡す | E-17 L44-57 | ○ |

### KnownIpsCollector関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-67 | KnownIpsCollector::collectIps() がIPv4アドレスを収集する | E-18 L23-32 | ○ |
| C-68 | KnownIpsCollector::collectIps() がIPv6アドレスとブロックを収集する | E-18 L34-62 | ○ |
| C-69 | KnownIpsCollector::collectIps() がクライアントIPがnullの場合に空配列を返却する | E-18 L26-29 | ○ |

### SalesChannelUserConfigSubscriber関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-70 | SalesChannelUserConfigSubscriber::getSubscribedEvents() がイベント購読を設定する | E-19 L31-36 | ○ |
| C-71 | SalesChannelUserConfigSubscriber::onSalesChannelDeleted() が削除されたチャネルをお気に入りから削除する | E-19 L38-67 | ○ |
| C-72 | SalesChannelUserConfigSubscriber::onSalesChannelDeleted() がvalueがnullの場合にスキップする | E-19 L48-50 | ○ |
| C-73 | SalesChannelUserConfigSubscriber::onSalesChannelDeleted() がマッチするIDがない場合に更新しない | E-19 L55-57 | ○ |

### AdministrationRouteScope関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-74 | AdministrationRouteScope::isAllowed() が常にtrueを返却する | E-20 L25-28 | ○ |
| C-75 | AdministrationRouteScope::getId() が 'administration' を返却する | E-20 L30-33 | ○ |

### AdministrationNotFoundSubscriber関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-76 | AdministrationNotFoundSubscriber::getSubscribedEvents() がイベント購読を設定する | E-21 L28-32 | ○ |
| C-77 | AdministrationNotFoundSubscriber::onError() が管理画面の404エラーでカスタムレスポンスを設定する | E-21 L35-49 | ○ |
| C-78 | AdministrationNotFoundSubscriber::onError() が非管理画面パスでは処理しない | E-21 L38, L42-44 | ○ |
| C-79 | AdministrationNotFoundSubscriber::onError() が404以外では処理しない | E-21 L40, L42-44 | ○ |

### AdministrationCacheControlListener関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-80 | AdministrationCacheControlListener::__invoke() が管理画面リクエストでキャッシュコントロールをスキップする | E-22 L17-24 | ○ |
| C-81 | AdministrationCacheControlListener::__invoke() が非管理画面リクエストでは処理しない | E-22 L26-53 | ○ |
| C-82 | AdministrationCacheControlListener::__invoke() がCACHEIDヘッダーで管理画面リクエストを識別する | E-22 L30-33 | ○ |

### ViteFileAccessorDecorator関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-83 | ViteFileAccessorDecorator::hasFile() がファイル存在時にtrueを返却する | E-23 L37-47 | ○ |
| C-84 | ViteFileAccessorDecorator::hasFile() がファイル非存在時にfalseを返却する | E-23 L37-47 | ○ |
| C-85 | ViteFileAccessorDecorator::hasFile() がバンドル未発見時にfalseを返却する | E-23 L39-44 | ○ |
| C-86 | ViteFileAccessorDecorator::getData() がViteデータを返却する | E-23 L52-61 | ○ |
| C-87 | ViteFileAccessorDecorator::getData() が非ShopwareBundleで空配列を返却する | E-23 L55-58 | ○ |
| C-88 | ViteFileAccessorDecorator::getData() がキャッシュを使用する | E-23 L97, L128 | ○ |
| C-89 | ViteFileAccessorDecorator::getBundleData() がバンドルデータを返却する | E-23 L66-69 | ○ |

### AdministrationReadinessCheck関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-90 | AdministrationReadinessCheck::run() が正常時にOKステータスを返却する | E-24 L48-86 | △ |
| C-91 | AdministrationReadinessCheck::run() がインデックスルートエラー時にFAILUREを返却する | E-24 L66-70 | △ |
| C-92 | AdministrationReadinessCheck::run() がJSモジュール未発見時にFAILUREを返却する | E-24 L68-70 | △ |
| C-93 | AdministrationReadinessCheck::run() がビルドアーティファクト欠落時にFAILUREを返却する | E-24 L63, L69-70 | △ |
| C-94 | AdministrationReadinessCheck::name() が 'AdministrationReadiness' を返却する | E-24 L38-41 | ○ |
| C-95 | AdministrationReadinessCheck::category() がCategory::FEATUREを返却する | E-24 L43-46 | ○ |

### SystemLanguageChangedSubscriber関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-96 | SystemLanguageChangedSubscriber::getSubscribedEvents() がイベント購読を設定する | E-25 L35-39 | ○ |
| C-97 | SystemLanguageChangedSubscriber::onSystemLanguageChanged() がen-GB -> de-DE時にスキップする | E-25 L49-52 | ○ |
| C-98 | SystemLanguageChangedSubscriber::onSystemLanguageChanged() が言語変更時にスニペットロケールを更新する | E-25 L56-88 | ○ |
| C-99 | SystemLanguageChangedSubscriber::onSystemLanguageChanged() がスニペットなし時にスキップする | E-25 L57-59 | ○ |
| C-100 | SystemLanguageChangedSubscriber::onSystemLanguageChanged() が存在しないロケールで例外をスローする | E-25 L91-99 | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-31（SnippetFinder フォールバック動作）**：privateメソッド`findSnippetFiles`の詳細な動作は外部から検証困難
  - 候補：統合テスト / モック注入によるテスト / リフレクションを使用したテスト
- **C-90〜93（AdministrationReadinessCheck）**：Kernelを使用した実際のHTTPリクエストのモック化が複雑
  - 候補：機能テストとして実装 / HttpKernelInterfaceのモック / ViteFileAccessorDecoratorのモック

## 5) リスクフラグ（レビュー観点）
- **1: 中リスク** - NotificationEntity/NotificationDefinitionは非推奨（v6.8.0で削除予定）のため、テスト維持の必要性を検討
- **1: 中リスク** - SnippetFinderのprivateメソッドは直接テスト不可。統合テストまたはリフレクションが必要
- **2: 高リスク** - AdministrationReadinessCheckはKernelへの依存が強く、単体テストよりも統合テストが適切な可能性あり
- **0: 低リスク** - エンティティ/定義クラスのgetter/setterは標準的なテストパターンで対応可能

## 6) レビュアーチェックリスト（最小）
- [ ] NotificationEntity/NotificationDefinitionのテストは非推奨クラスであることを考慮し、テスト対象に含めるか判断したか
- [ ] SnippetFinder::findSnippets()のテストケースが統合テストとして実装される可能性を検討したか
- [ ] OrderAmountService::load()のSQLクエリのテストはDBを使用した統合テストが必要か検討したか
- [ ] AdministrationReadinessCheck::run()のテストがKernelモックの複雑さを考慮しているか
- [ ] 各コントローラーのテストがHTTPレイヤーのテストとして適切に分離されているか
- [ ] イベントサブスクライバーのテストがイベント発火のシミュレーションを正しく行えるか検討したか
- [ ] ViteFileAccessorDecoratorのテストがファイルシステムモックを適切に使用するか検討したか
