---
generated_at: 2026-03-01 20:45:00
metrics:
  claims_total: 58
  claims_with_evidence: 58
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：58 / 58、根拠なし：0
- 優先レビュー（高）
  1. なし（全てのテストケースに根拠あり）

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

- E-01: `packages/admin-bar/src/AdminBar.tsx` - PayloadAdminBarコンポーネント本体
- E-02: `packages/admin-bar/src/types.ts` - PayloadAdminBarProps型定義、PayloadMeUser型定義
- E-03: `packages/admin-bar/src/index.ts` - エクスポート定義

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

### 認証・フェッチ関連（高優先度）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | 認証済みユーザーの場合にAdminBarが表示される | E-01 (L76-346: `if (user) { ... return <div>...`) | ○ |
| C-02 | 未認証ユーザーの場合にnullが返却される | E-01 (L346-348: `return null`) | ○ |
| C-06 | 認証APIへのリクエストが正しいURLで行われる | E-01 (L43: `` `${cmsURL}${apiPath}/${authCollectionSlug}/me` ``) | ○ |
| C-07 | credentials: includeでリクエストが送信される | E-01 (L44-45: `credentials: 'include'`) | ○ |
| C-08 | fetch失敗時にdevMode=trueならdummyUserが設定される | E-01 (L59-64: `catch (err) { ... if (devMode === true) { setUser(dummyUser) } }`) | ○ |
| C-09 | fetch失敗時にdevMode=falseならuserがundefinedのまま | E-01 (L59-64: devMode !== true の場合はsetUserが呼ばれない) | ○ |
| C-10 | APIレスポンスにuserがない場合でdevMode=trueならdummyUser | E-01 (L53-57: `if (devMode !== true) { setUser(null) } else { setUser(dummyUser) }`) | ○ |
| C-11 | APIレスポンスにuserがない場合でdevMode=falseならnull | E-01 (L53: `setUser(null)`) | ○ |
| C-12 | onAuthChangeコールバックがユーザー変更時に呼び出される | E-01 (L70-74: `useEffect(() => { if (typeof onAuthChange === 'function') { onAuthChange(user) } }, [user, onAuthChange])`) | ○ |
| C-13 | onAuthChangeが未定義の場合はエラーが発生しない | E-01 (L71: `if (typeof onAuthChange === 'function')`) | ○ |

### デフォルト値・Props関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-03 | デフォルトのpropsが正しく適用される | E-01 (L13-19: `adminPath = '/admin'`, `apiPath = '/api'`, `authCollectionSlug = 'users'`, `cmsURL = 'http://localhost:8000'`) | ○ |
| C-04 | カスタムadminPathが正しく適用される | E-01 (L108: `` `${cmsURL}${adminPath}` ``) | ○ |
| C-05 | カスタムcmsURLが正しく適用される | E-01 (L108, L133, L195, L237, L307: 全てのリンクでcmsURLを使用) | ○ |

### 条件付きレンダリング関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-14 | collectionSlugとdocIDが両方存在する場合に編集リンクが表示される | E-01 (L192: `{collectionSlug && docID && (`) | ○ |
| C-15 | collectionSlugのみ存在する場合は編集リンクが非表示 | E-01 (L192: `collectionSlug && docID` 両方必要) | ○ |
| C-16 | docIDのみ存在する場合は編集リンクが非表示 | E-01 (L192: `collectionSlug && docID` 両方必要) | ○ |
| C-17 | collectionSlugが存在する場合に新規作成リンクが表示される | E-01 (L234: `{collectionSlug && (`) | ○ |
| C-18 | collectionSlugが存在しない場合は新規作成リンクが非表示 | E-01 (L234: `{collectionSlug && (` 条件) | ○ |
| C-19 | preview=trueの場合にプレビュー終了ボタンが表示される | E-01 (L275: `{preview && (`) | ○ |
| C-20 | preview=falseの場合にプレビュー終了ボタンが非表示 | E-01 (L275: `{preview && (` 条件) | ○ |
| C-21 | プレビュー終了ボタンクリック時にonPreviewExitが呼び出される | E-01 (L278: `onClick={onPreviewExit}`) | ○ |

### スタイル関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 | unstyled=trueの場合にデフォルトスタイルが適用されない | E-01 (L84-102: `unstyled !== true ? {...styles...} : {}`) | ○ |
| C-23 | unstyled=falseの場合にデフォルトスタイルが適用される | E-01 (L84-102: `unstyled !== true ? {...styles...}`) | ○ |
| C-24 | カスタムstyleがデフォルトスタイルに上書きマージされる | E-01 (L103: `...style`) | ○ |

### className関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-25 | classNameが正しく適用される | E-01 (L81: `className={className}`) | ○ |
| C-26 | classNames.logoが正しく適用される | E-01 (L107: `className={classNames?.logo}`) | ○ |
| C-27 | classNames.userが正しく適用される | E-01 (L132: `className={classNames?.user}`) | ○ |
| C-28 | classNames.controlsが正しく適用される | E-01 (L172: `className={classNames?.controls}`) | ○ |
| C-29 | classNames.editが正しく適用される | E-01 (L194: `className={classNames?.edit}`) | ○ |
| C-30 | classNames.createが正しく適用される | E-01 (L236: `className={classNames?.create}`) | ○ |
| C-31 | classNames.previewが正しく適用される | E-01 (L277: `className={classNames?.preview}`) | ○ |
| C-32 | classNames.logoutが正しく適用される | E-01 (L306: `className={classNames?.logout}`) | ○ |

### ロゴ・ラベル関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 | logoプロップが提供された場合にカスタムロゴが表示される | E-01 (L129: `{logo || 'Payload CMS'}`) | ○ |
| C-34 | logoプロップが未指定の場合に'Payload CMS'テキストが表示される | E-01 (L129: `{logo || 'Payload CMS'}`) | ○ |
| C-35 | collectionLabels.singularが編集リンクテキストに使用される | E-01 (L230: `` `Edit ${collectionLabels?.singular || 'page'}` ``) | ○ |
| C-36 | collectionLabels.singularが新規作成リンクテキストに使用される | E-01 (L271: `` `New ${collectionLabels?.singular || 'page'}` ``) | ○ |
| C-37 | collectionLabels未指定時にデフォルト'page'が使用される | E-01 (L230, L271: `|| 'page'`) | ○ |

### ユーザー情報表示関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-38 | ユーザーのemailが表示される | E-01 (L168: `{email || 'Profile'}`) | ○ |
| C-39 | ユーザーのemailがない場合に'Profile'が表示される | E-01 (L168: `{email || 'Profile'}`) | ○ |

### URL生成関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 | ログアウトリンクが正しいURLを持つ | E-01 (L307: `` `${cmsURL}${adminPath}/logout` ``) | ○ |
| C-41 | ユーザープロフィールリンクが正しいURLを持つ | E-01 (L133: `` `${cmsURL}${adminPath}/collections/${authCollectionSlug}/${userID}` ``) | ○ |
| C-42 | 編集リンクが正しいURLを持つ | E-01 (L195: `` `${cmsURL}${adminPath}/collections/${collectionSlug}/${docID}` ``) | ○ |
| C-43 | 新規作成リンクが正しいURLを持つ | E-01 (L237: `` `${cmsURL}${adminPath}/collections/${collectionSlug}/create` ``) | ○ |

### セキュリティ属性関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-44 | 外部リンクにrel='noopener noreferrer'が設定される | E-01 (L134, L196-197, L238-239, L308-309: `rel="noopener noreferrer"`) | ○ |
| C-45 | 外部リンクにtarget='_blank'が設定される | E-01 (L135, L197, L239, L309: `target="_blank"`) | ○ |

### ID属性関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | AdminBarのid属性が'payload-admin-bar' | E-01 (L82: `id="payload-admin-bar"`) | ○ |

### カスタムProps適用関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-47 | logoPropsがロゴリンクに適用される | E-01 (L109: `{...logoProps}`) | ○ |
| C-48 | userPropsがユーザーリンクに適用される | E-01 (L136: `{...userProps}`) | ○ |
| C-49 | divPropsがコントロールdivに適用される | E-01 (L173: `{...divProps}`) | ○ |
| C-50 | editPropsが編集リンクに適用される | E-01 (L198: `{...editProps}`) | ○ |
| C-51 | createPropsが新規作成リンクに適用される | E-01 (L240: `{...createProps}`) | ○ |
| C-52 | previewPropsがプレビューボタンに適用される | E-01 (L279: `{...previewProps}`) | ○ |
| C-53 | logoutPropsがログアウトリンクに適用される | E-01 (L310: `{...logoutProps}`) | ○ |

### 境界値関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | 空文字列のcmsURLが正しく処理される | E-01 (URLテンプレートリテラルの仕様上、空文字列は連結される) | ○ |
| C-55 | 末尾スラッシュ付きcmsURLの処理 | E-01 (URLテンプレートリテラルで直接連結されるため二重スラッシュの可能性あり) | ○ |

### useEffect依存配列関連
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-56 | cmsURL変更時にfetchMeが再実行される | E-01 (L68: `[cmsURL, adminPath, apiPath, devMode]`) | ○ |
| C-57 | apiPath変更時にfetchMeが再実行される | E-01 (L68: `[cmsURL, adminPath, apiPath, devMode]`) | ○ |
| C-58 | devMode変更時にfetchMeが再実行される | E-01 (L68: `[cmsURL, adminPath, apiPath, devMode]`) | ○ |

## 4) 不足情報（Unknown / Missing）
- なし（全てのテストケースに対してソースコードから根拠を確認できた）

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全てのテストケースがソースコードに基づいており、信頼性が高い
- 注意点:
  - C-54, C-55: 境界値のテストケースは、URLフォーマットの仕様に関する確認が必要。二重スラッシュの問題が発生する可能性がある
  - fetch APIのモック化が必要なテストケースが多数存在するため、テスト実装時のモック設計に注意が必要

## 6) レビュアーチェックリスト（最小）
- [ ] 認証関連のテストケース（C-01〜C-13）が網羅的であるか確認
- [ ] 条件付きレンダリングのテストケース（C-14〜C-21）が全ての条件分岐をカバーしているか確認
- [ ] URL生成のテストケース（C-40〜C-43）が全てのリンクパターンを網羅しているか確認
- [ ] 境界値テストケース（C-54〜C-55）の期待結果が適切か確認（現状のコードでは末尾スラッシュの正規化は行われていない）
- [ ] dummyUser定数（E-01 L4-7）の値がテストケースで正しく使用されているか確認
