---
generated_at: 2026-01-29 18:05:00
metrics:
  claims_total: 133
  claims_with_evidence: 128
  claims_without_evidence: 5
confidence_derived: 0.96
---

# 根拠レポート：Core-Framework-Api単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：128 / 133、根拠なし：5
- 優先レビュー（高）
  1. **UT-API-077〜082（SyncService）**：実際のDB操作・イベントディスパッチの挙動確認が必要
  2. **UT-API-101〜107（ClientRepository）**：DB接続を伴う統合テスト的な検証が必要
  3. **UT-API-114〜120（JsonEntityEncoder）**：シリアライズ結果の詳細検証が必要

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

- E-01: `src/Core/Framework/Api/Acl/Role/AclRoleDefinition.php`
- E-02: `src/Core/Framework/Api/Acl/Role/AclRoleEntity.php`
- E-03: `src/Core/Framework/Api/Acl/Role/AclRoleCollection.php`
- E-04: `src/Core/Framework/Api/Acl/Role/AclUserRoleDefinition.php`
- E-05: `src/Core/Framework/Api/Acl/AclAnnotationValidator.php`
- E-06: `src/Core/Framework/Api/Acl/AclWriteValidator.php`
- E-07: `src/Core/Framework/Api/Util/AccessKeyHelper.php`
- E-08: `src/Core/Framework/Api/Context/AdminApiSource.php`
- E-09: `src/Core/Framework/Api/Context/SalesChannelApiSource.php`
- E-10: `src/Core/Framework/Api/Context/AdminSalesChannelApiSource.php`
- E-11: `src/Core/Framework/Api/Context/SystemSource.php`
- E-12: `src/Core/Framework/Api/Sync/SyncOperation.php`
- E-13: `src/Core/Framework/Api/Sync/SyncBehavior.php`
- E-14: `src/Core/Framework/Api/Sync/SyncResult.php`
- E-15: `src/Core/Framework/Api/Sync/SyncService.php`
- E-16: `src/Core/Framework/Api/Sync/SyncFkResolver.php`
- E-17: `src/Core/Framework/Api/OAuth/AccessToken.php`
- E-18: `src/Core/Framework/Api/OAuth/RefreshToken.php`
- E-19: `src/Core/Framework/Api/OAuth/Client/ApiClient.php`
- E-20: `src/Core/Framework/Api/OAuth/Scope/AdminScope.php`
- E-21: `src/Core/Framework/Api/OAuth/Scope/WriteScope.php`
- E-22: `src/Core/Framework/Api/OAuth/User/User.php`
- E-23: `src/Core/Framework/Api/OAuth/ClientRepository.php`
- E-24: `src/Core/Framework/Api/OAuth/ScopeRepository.php`
- E-25: `src/Core/Framework/Api/Serializer/JsonEntityEncoder.php`
- E-26: `src/Core/Framework/Api/ApiDefinition/DefinitionService.php`
- E-27: `src/Core/Framework/Api/ApiException.php`

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

### AclRoleDefinition（UT-API-001〜006）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | getEntityNameが'acl_role'を返す | E-01 L41,L44-47 | ○ |
| C-02 | getCollectionClassがAclRoleCollection::classを返す | E-01 L49-52 | ○ |
| C-03 | getEntityClassがAclRoleEntity::classを返す | E-01 L54-57 | ○ |
| C-04 | getDefaultsが['privileges'=>[]]を返す | E-01 L59-62 | ○ |
| C-05 | defineFieldsで8フィールドが定義される | E-01 L76-88 | ○ |
| C-06 | WriteProtectionが設定される | E-01 L69-74 | ○ |

### AclRoleEntity（UT-API-007〜019）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-07 | getName/setNameが正しく動作 | E-02 L34-42 | ○ |
| C-08 | getPrivileges/setPrivilegesが正しく動作 | E-02 L54-68 | ○ |
| C-09 | getDescription/setDescriptionが正しく動作 | E-02 L70-78 | ○ |
| C-10 | getUsersがUserCollectionまたはnullを返す | E-02 L44-52 | ○ |
| C-11 | getAppがAppEntityまたはnullを返す | E-02 L80-88 | ○ |
| C-12 | getIntegrationsがIntegrationCollectionまたはnullを返す | E-02 L90-98 | ○ |
| C-13 | getDeletedAtがDateTimeInterfaceまたはnullを返す | E-02 L100-108 | ○ |

### AclRoleCollection（UT-API-020〜021）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-14 | getApiAliasが'dal_acl_role_collection'を返す | E-03 L14-17 | ○ |
| C-15 | getExpectedClassがAclRoleEntity::classを返す | E-03 L19-22 | ○ |

### AclUserRoleDefinition（UT-API-022〜023）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-16 | getEntityNameが'acl_user_role'を返す | E-04 L19,L21-24 | ○ |
| C-17 | defineFieldsで6フィールドが定義される | E-04 L31-41 | ○ |

### AclAnnotationValidator（UT-API-024〜030）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-18 | privilegesがnull/空の場合は検証をスキップ | E-05 L46-49 | ○ |
| C-19 | Context未存在時にMissingPrivilegeException | E-05 L52-55 | ○ |
| C-20 | 権限不足時にMissingPrivilegeException | E-05 L67-69 | ○ |
| C-21 | 'app.all'スコープで全アプリアクセス許可 | E-05 L59-65 | ○ |
| C-22 | getAppPrivilegeでアプリ名から権限文字列生成 | E-05 L73-93 | ○ |

### AclWriteValidator（UT-API-031〜036）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-23 | SYSTEM_SCOPEの場合は検証スキップ | E-06 L52 | ○ |
| C-24 | isAdmin=trueの場合は検証スキップ | E-06 L52 | ○ |
| C-25 | 権限不足時にMissingPrivilegeException | E-06 L77-86 | ○ |
| C-26 | 翻訳エンティティの権限は親に委譲 | E-06 L69-75 | ○ |
| C-27 | getPrivilegeForParentWriteOperationの動作 | E-06 L102-118 | ○ |

### AccessKeyHelper（UT-API-037〜045）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | generateAccessKeyで各識別子のキー生成 | E-07 L27-29, L12-15 | ○ |
| C-29 | generateSecretAccessKeyでシークレット生成 | E-07 L33-35 | ○ |
| C-30 | getOriginでアクセスキーの起源特定 | E-07 L37-46 | ○ |
| C-31 | 無効な識別子/キーで例外 | E-07 L41-43, L52-54 | ○ |

### AdminApiSource（UT-API-046〜053）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-32 | isAllowedで管理者は常にtrue | E-08 L59-66 | ○ |
| C-33 | isAllowedで権限リスト内ならtrue | E-08 L65 | ○ |
| C-34 | getUserId/getIntegrationIdの動作 | E-08 L28-36 | ○ |
| C-35 | setIsAdmin/setPermissionsの動作 | E-08 L38-49 | ○ |

### SalesChannelApiSource/AdminSalesChannelApiSource/SystemSource（UT-API-054〜056）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-36 | getSalesChannelIdの動作 | E-09 L19-22 | ○ |
| C-37 | getOriginalContextの動作 | E-10 L19-22 | ○ |
| C-38 | SystemSource.type='system' | E-11 L10 | ○ |

### SyncOperation（UT-API-057〜069）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-39 | getter系メソッドの動作 | E-12 L28-49 | ○ |
| C-40 | validateの各検証ロジック | E-12 L67-94 | ○ |
| C-41 | getSupportedActionsの戻り値 | E-12 L59-62 | ○ |
| C-42 | hasCriteriaの動作 | E-12 L114-117 | ○ |
| C-43 | replacePayloadの動作 | E-12 L101-104 | ○ |
| C-44 | createFromArrayの動作と例外 | E-12 L122-140 | ○ |

### SyncBehavior（UT-API-070〜072）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-45 | getter系メソッドの動作 | E-13 L21-40 | ○ |

### SyncResult（UT-API-073〜076）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | getter系メソッドの動作 | E-14 L25-50 | ○ |
| C-47 | getApiAliasの戻り値 | E-14 L31-34 | ○ |

### SyncService（UT-API-077〜082）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-48 | syncメソッドの基本動作 | E-15 L38-78 | ○ |
| C-49 | skipIndexers/onlyIndexersの適用 | E-15 L46-51 | ○ |
| C-50 | indexingBehaviorの適用 | E-15 L53-58 | ○ |
| C-51 | criteriaを使用したdeleteの動作 | E-15 L130-134, L144-169 | ○ |
| C-52 | 空criteriaでの例外 | E-15 L153-154 | ○ |

### SyncFkResolver（UT-API-083〜086）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-53 | resolveメソッドの基本動作 | E-16 L38-79 | ○ |
| C-54 | 解決できないFK参照で例外 | E-16 L69-76 | ○ |
| C-55 | nullOnMissing=trueの動作 | E-16 L63-66 | ○ |
| C-56 | 未知のresolverキーで例外 | E-16 L172-181 | ○ |

### OAuth AccessToken（UT-API-087〜092）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-57 | getter系メソッドの動作 | E-17 L33-52 | ○ |
| C-58 | addScopeの動作 | E-17 L75-78 | ○ |
| C-59 | initJwtConfigurationの動作 | E-17 L80-88 | ○ |

### OAuth ApiClient（UT-API-093〜095）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-60 | getter系メソッドの動作 | E-19 L40-56 | ○ |

### OAuth Scopes（UT-API-096〜099）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-61 | AdminScope/WriteScopeのgetIdentifier | E-20 L13-16, E-21 L16-19 | ○ |
| C-62 | jsonSerializeの動作 | E-20 L18-21, E-21 L21-24 | ○ |

### OAuth User（UT-API-100）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-63 | getIdentifierの動作 | E-22 L22-26 | ○ |

### ClientRepository（UT-API-101〜107）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-64 | validateClientのpassword/refresh_token grant | E-23 L25-29 | ○ |
| C-65 | validateClientのclient_credentials grant | E-23 L31-50 | ○ |
| C-66 | getClientEntityのadministration | E-23 L58-59 | ○ |
| C-67 | getClientEntityのインテグレーション | E-23 L62-74 | ○ |
| C-68 | DB操作の詳細動作 | **根拠不足** | △ |

### ScopeRepository（UT-API-108〜113）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-69 | getScopeEntityByIdentifierの動作 | E-24 L68-71 | ○ |
| C-70 | finalizeScopesのpassword grant | E-24 L85-87 | ○ |
| C-71 | finalizeScopesの管理者スコープ追加 | E-24 L105-116 | ○ |
| C-72 | finalizeScopesのUserVerifiedScope除去 | E-24 L89-91 | ○ |
| C-73 | finalizeScopesのclient_credentials+writeAccess | E-24 L93-95 | ○ |

### JsonEntityEncoder（UT-API-114〜120）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-74 | encodeのEntity処理 | E-25 L43-47 | ○ |
| C-75 | encodeのEntityCollection処理 | E-25 L43-45, L57-66 | ○ |
| C-76 | サポートされない入力で例外 | E-25 L39-41 | ○ |
| C-77 | 空customFieldsのstdClass変換 | E-25 L80-86 | ○ |
| C-78 | includes/excludesフィルター | E-25 L76-78, L106-141 | ○ |
| C-79 | ApiAwareフィールドフィルタ | E-25 L182-186 | ○ |

### DefinitionService（UT-API-121〜125）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-80 | generateの動作 | E-26 L49-52 | ○ |
| C-81 | getSchemaの動作 | E-26 L59-62 | ○ |
| C-82 | toApiTypeの動作 | E-26 L67-74 | ○ |

### ApiException（UT-API-126〜133）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-83 | missingPrivilegesの動作 | E-27 L130-133 | ○ |
| C-84 | invalidAccessKeyの動作 | E-27 L349-356 | ○ |
| C-85 | invalidAccessKeyIdentifierの動作 | E-27 L358-365 | ○ |
| C-86 | invalidSyncOperationExceptionの動作 | E-27 L99-106 | ○ |
| C-87 | invalidSyncCriteriaExceptionの動作 | E-27 L90-97 | ○ |
| C-88 | resolverNotFoundExceptionの動作 | E-27 L108-115 | ○ |
| C-89 | userNotLoggedInの動作 | E-27 L409-416 | ○ |
| C-90 | salesChannelInMaintenanceModeの動作 | E-27 L367-374 | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-68（ClientRepository DB操作）**：実際のDBスキーマおよびテストデータに依存するため、統合テストでの検証が必要
  - 候補：`tests/integration/` 配下の既存テスト / DBスキーマ定義 / テストフィクスチャ
- **OAuth トークン有効期限**：トークンの有効期限設定やリフレッシュロジックの詳細が未確認
  - 候補：JWT設定ファイル / OAuth2サーバー設定
- **イベントディスパッチの詳細**：SyncServiceでディスパッチされるイベントのリスナー側の挙動
  - 候補：EventSubscriberの実装 / イベント定義
- **エンティティプロテクション**：WriteProtectionの実際の適用タイミングと挙動
  - 候補：DataAbstractionLayerのテスト / プロテクション機構の実装

## 5) リスクフラグ（レビュー観点）
- **2（高リスク）**：UT-API-024〜036（ACL検証）- セキュリティに直結する認可ロジック
- **2（高リスク）**：UT-API-037〜045（AccessKeyHelper）- 認証キーの生成・検証ロジック
- **2（高リスク）**：UT-API-101〜113（OAuth）- 認証・認可の中核機能
- **1（中リスク）**：UT-API-077〜086（Sync）- データ整合性に影響する同期機能
- **1（中リスク）**：UT-API-114〜120（Serializer）- API出力のセキュリティフィルタリング
- **0（低リスク）**：UT-API-001〜023（Entity/Definition）- 標準的なORMパターン

## 6) レビュアーチェックリスト（最小）
- [ ] ACL関連テストケース（UT-API-024〜036）で、権限バイパスの可能性がないか確認
- [ ] AccessKeyHelper（UT-API-037〜045）で、キー生成のランダム性が十分か確認
- [ ] OAuth関連テストケース（UT-API-087〜113）で、トークン漏洩リスクがないか確認
- [ ] SyncService（UT-API-077〜082）で、大量データ同期時のパフォーマンス観点を追加検討
- [ ] JsonEntityEncoder（UT-API-114〜120）で、ApiAwareフィールドフィルタが全ケースで正しく動作するか確認
- [ ] 境界値テスト（空配列、null、最大長）が網羅されているか確認
- [ ] 実際の単体テスト実装時に、モック/スタブの適切な使用を確認
