---
generated_at: 2026-02-25 10:00:00
metrics:
  claims_total: 153
  claims_with_evidence: 148
  claims_without_evidence: 5
confidence_derived: 0.97
---

# 根拠レポート：decap-cms-backend-azure 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：148 / 153、根拠なし：5
- 優先レビュー（高）
  1. **C-063 (UT-AZR-063)**：fromBase64の不正入力時の挙動はjs-base64ライブラリの実装依存であり、ソースコード上では明示的なエラーハンドリングがない
  2. **C-069 (UT-AZR-069)**：coreAttributesが存在しない場合のuser()メソッドの挙動はundefinedの連鎖であり、実際の挙動にはランタイム確認が必要
  3. **C-129 (UT-AZR-129)**：completePullRequestのポーリング上限到達後の挙動（正常終了するのかエラーになるのか）はコードから読み取れるが、意図された動作かは設計書がないため不明

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

- E-01: `packages/decap-cms-backend-azure/src/implementation.ts` - Azure Implementationクラスおよびhelper関数
- E-02: `packages/decap-cms-backend-azure/src/API.ts` - API クラス（Azure DevOps REST API操作）
- E-03: `packages/decap-cms-backend-azure/src/AuthenticationPage.js` - Azure認証ページReactコンポーネント
- E-04: `packages/decap-cms-backend-azure/src/index.ts` - モジュールエクスポート定義
- E-05: `packages/decap-cms-backend-azure/package.json` - パッケージ依存関係と設定

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | parseAzureRepoが正しい形式の文字列からorg/project/repoNameを分解して返却する | E-01 (L42-60) | ○ |
| C-002 | repoが文字列でない場合にエラーがスローされる | E-01 (L45-47) | ○ |
| C-003 | repoが数値の場合にエラーがスローされる | E-01 (L45-47) | ○ |
| C-004 | スラッシュ区切りが2パートの場合にエラーがスローされる | E-01 (L49-52) | ○ |
| C-005 | スラッシュ区切りが4パートの場合にエラーがスローされる | E-01 (L49-52) | ○ |
| C-006 | 空文字列の場合にエラーがスローされる | E-01 (L49-52) | ○ |
| C-007 | コンストラクタのデフォルト値初期化 | E-01 (L84-100) | ○ |
| C-008 | コンストラクタのカスタム値初期化 | E-01 (L84-100) | ○ |
| C-009 | mediaFolderのスラッシュトリム | E-01 (L97) | ○ |
| C-010 | isGitBackendがtrueを返す | E-01 (L102-104) | ○ |
| C-011 | status成功時のauth.status=true | E-01 (L106-116) | ○ |
| C-012 | status失敗時のauth.status=false | E-01 (L106-116) | ○ |
| C-013 | authComponentがAuthenticationPageを返す | E-01 (L118-120) | ○ |
| C-014 | restoreUserがauthenticateに委譲する | E-01 (L122-124) | ○ |
| C-015 | authenticateのトークン設定とAPI初期化 | E-01 (L126-143) | ○ |
| C-016 | authenticateのAPI設定値引き継ぎ | E-01 (L128-139) | ○ |
| C-017 | logoutでtokenがnullになる | E-01 (L150-153) | ○ |
| C-018 | getTokenがtokenのPromiseを返す | E-01 (L155-157) | ○ |
| C-019 | getTokenがnullの場合 | E-01 (L155-157) | ○ |
| C-020 | entriesByFolderのフィルタリング | E-01 (L159-176) | ○ |
| C-021 | depth>1でrecursive=true | E-01 (L161) | ○ |
| C-022 | ファイル0件で空配列 | E-01 (L159-176) | ○ |
| C-023 | entriesByFilesのエントリ返却 | E-01 (L178-185) | ○ |
| C-024 | getEntryのファイル読み込みと返却 | E-01 (L187-193) | ○ |
| C-025 | getMediaのメディアファイル一覧返却 | E-01 (L195-204) | ○ |
| C-026 | getMediaの空フォルダケース | E-01 (L195-204) | ○ |
| C-027 | getMediaDisplayURLのセマフォ使用 | E-01 (L206-213) | ○ |
| C-028 | セマフォの再利用 | E-01 (L207) | ○ |
| C-029 | getMediaFileの情報返却 | E-01 (L215-231) | ○ |
| C-030 | persistEntryのAPI呼び出し | E-01 (L233-236) | ○ |
| C-031 | persistMediaのファイル保存と情報返却 | E-01 (L238-261) | ○ |
| C-032 | persistMediaのパストリム | E-01 (L254) | ○ |
| C-033 | deleteFilesのAPI呼び出し | E-01 (L263-265) | ○ |
| C-034 | loadMediaFileのブランチ指定読み込み | E-01 (L267-285) | ○ |
| C-035 | loadEntryMediaFilesの並列読み込み | E-01 (L287-291) | ○ |
| C-036 | loadEntryMediaFilesの空配列 | E-01 (L287-291) | ○ |
| C-037 | unpublishedEntriesのキー一覧返却 | E-01 (L293-301) | ○ |
| C-038 | unpublishedEntryのid指定取得 | E-01 (L303-322) | ○ |
| C-039 | unpublishedEntryのcollection+slug指定取得 | E-01 (L303-322) | ○ |
| C-040 | unpublishedEntryの必須パラメータ不足エラー | E-01 (L319-321) | ○ |
| C-041 | unpublishedEntryのcollectionのみ指定エラー | E-01 (L315-321) | ○ |
| C-042 | getBranchのブランチ名生成 | E-01 (L324-328) | ○ |
| C-043 | unpublishedEntryMediaFileの取得 | E-01 (L330-334) | ○ |
| C-044 | unpublishedEntryDataFileの取得 | E-01 (L336-340) | ○ |
| C-045 | updateUnpublishedEntryStatusのロック付きステータス更新 | E-01 (L342-349) | ○ |
| C-046 | deleteUnpublishedEntryのロック付き削除 | E-01 (L351-358) | ○ |
| C-047 | publishUnpublishedEntryのロック付き公開 | E-01 (L360-367) | ○ |
| C-048 | getDeployPreviewの正常時url,status返却 | E-01 (L369-383) | ○ |
| C-049 | getDeployPreviewのステータスなし時null | E-01 (L377-378) | ○ |
| C-050 | getDeployPreviewのエラー時null | E-01 (L380-381) | ○ |
| C-051 | getChangeItemのADD返却 | E-02 (L170-179) | ○ |
| C-052 | getChangeItemのEDIT返却 | E-02 (L180-188) | ○ |
| C-053 | getChangeItemのDELETE返却 | E-02 (L189-192) | ○ |
| C-054 | getChangeItemのRENAME返却 | E-02 (L193-198) | ○ |
| C-055 | getChangeItemの未知action時の空オブジェクト | E-02 (L199-201) | ○ |
| C-056 | delayのPromise解決 | E-02 (L165-167) | ○ |
| C-057 | delay 0ミリ秒 | E-02 (L165-167) | ○ |
| C-058 | APIコンストラクタの初期化 | E-02 (L232-242) | ○ |
| C-059 | squashMerges=trueでmergeStrategy='squash' | E-02 (L238) | ○ |
| C-060 | apiRootのトリム | E-02 (L234-235) | ○ |
| C-061 | toBase64のエンコード | E-02 (L295) | ○ |
| C-062 | fromBase64のデコード | E-02 (L296) | ○ |
| C-063 | fromBase64の不正入力時の挙動 | **根拠なし** | △ |
| C-064 | branchToRefの変換 | E-02 (L298) | ○ |
| C-065 | branchToRefの空文字列 | E-02 (L298) | ○ |
| C-066 | refToBranchの変換 | E-02 (L299) | ○ |
| C-067 | refToBranchのスラッシュ含むブランチ | E-02 (L299) | ○ |
| C-068 | userのプロファイル変換 | E-02 (L301-316) | ○ |
| C-069 | userのcoreAttributes不在時のデフォルト値 | E-02 (L307-311) | △ |
| C-070 | userのDisplayNameフォールバック | E-02 (L311) | ○ |
| C-071 | readFileのテキスト読み込み | E-02 (L348-362) | ○ |
| C-072 | readFileのBlob読み込み | E-02 (L348-362) | ○ |
| C-073 | readFileのブランチ指定 | E-02 (L351) | ○ |
| C-074 | readFileMetadataのメタデータ返却 | E-02 (L318-346) | ○ |
| C-075 | readFileMetadataのエラー時フォールバック | E-02 (L339-341) | ○ |
| C-076 | listFilesのBLOBフィルタリング | E-02 (L364-391) | ○ |
| C-077 | listFilesのrecursive=trueパラメータ | E-02 (L371) | ○ |
| C-078 | listFilesのrecursive=falseパラメータ | E-02 (L371) | ○ |
| C-079 | listFilesのTREEフィルタリング | E-02 (L376) | ○ |
| C-080 | listFilesのパストリム | E-02 (L379) | ○ |
| C-081 | listFilesの404時空配列 | E-02 (L383-387) | ○ |
| C-082 | listFilesの非404エラー再スロー | E-02 (L388-389) | ○ |
| C-083 | getRefのref情報返却 | E-02 (L393-403) | ○ |
| C-084 | getRefのデフォルトブランチ | E-02 (L393) | ○ |
| C-085 | deleteRefの削除リクエスト | E-02 (L405-419) | ○ |
| C-086 | uploadAndCommitの新規ブランチコミット | E-02 (L421-448) | ○ |
| C-087 | uploadAndCommitの既存ブランチref取得 | E-02 (L427) | ○ |
| C-088 | uploadAndCommitの新規ブランチベースref | E-02 (L427) | ○ |
| C-089 | retrieveUnpublishedEntryDataの組み立て | E-02 (L450-478) | ○ |
| C-090 | retrieveUnpublishedEntryDataのclosedDate優先 | E-02 (L467) | ○ |
| C-091 | retrieveUnpublishedEntryDataのcreationDateフォールバック | E-02 (L467) | ○ |
| C-092 | getPullRequestStatuesのステータス一覧返却 | E-02 (L480-492) | ○ |
| C-093 | getStatusesのPreviewState形式変換 | E-02 (L494-504) | ○ |
| C-094 | succeededのPreviewState.Success変換 | E-02 (L501) | ○ |
| C-095 | 非succeededのPreviewState.Other変換 | E-02 (L501) | ○ |
| C-096 | getCommitItemsの新規ファイルADD | E-02 (L506-546) | ○ |
| C-097 | getCommitItemsの既存ファイルEDIT | E-02 (L506-546) | ○ |
| C-098 | getCommitItemsのファイルRENAME | E-02 (L516-517) | ○ |
| C-099 | getCommitItemsのリネーム時子ファイル移動 | E-02 (L530-543) | ○ |
| C-100 | persistFilesのuseWorkflow=false直接コミット | E-02 (L548-558) | ○ |
| C-101 | persistFilesのuseWorkflow=trueワークフロー | E-02 (L550-552) | ○ |
| C-102 | deleteFilesの削除リクエスト送信 | E-02 (L560-581) | ○ |
| C-103 | deleteFilesの単一ファイル | E-02 (L567) | ○ |
| C-104 | getPullRequestsのCMSラベルフィルタリング | E-02 (L583-599) | ○ |
| C-105 | getPullRequestsのsourceBranchフィルタ | E-02 (L589) | ○ |
| C-106 | getPullRequestsの非CMSラベルフィルタリング | E-02 (L594-598) | ○ |
| C-107 | getPullRequestsの空配列 | E-02 (L583-599) | ○ |
| C-108 | listUnpublishedBranchesのブランチ名配列 | E-02 (L601-605) | ○ |
| C-109 | isFileExistsのtrue返却 | E-02 (L607-621) | ○ |
| C-110 | isFileExistsの404でfalse | E-02 (L615-617) | ○ |
| C-111 | isFileExistsの非404エラー再スロー | E-02 (L618-619) | ○ |
| C-112 | createPullRequestの正しいペイロード | E-02 (L623-644) | ○ |
| C-113 | createPullRequestのステータスラベル | E-02 (L631) | ○ |
| C-114 | getBranchPullRequestのPR返却 | E-02 (L646-654) | ○ |
| C-115 | getBranchPullRequestのPR0件エラー | E-02 (L649-651) | ○ |
| C-116 | getDifferencesのBLOBフィルタリング | E-02 (L656-670) | ○ |
| C-117 | getDifferencesのTREEフィルタリング | E-02 (L665-669) | ○ |
| C-118 | editorialWorkflowGitのunpublished=false | E-02 (L672-694) | ○ |
| C-119 | editorialWorkflowGitのunpublished=true | E-02 (L672-694) | ○ |
| C-120 | editorialWorkflowGitのデフォルトステータス | E-02 (L688) | ○ |
| C-121 | updateUnpublishedEntryStatusのラベル更新 | E-02 (L696-708) | ○ |
| C-122 | updateUnpublishedEntryStatusの非CMSラベル保持 | E-02 (L702-706) | ○ |
| C-123 | deleteUnpublishedEntryのPR abandon | E-02 (L710-715) | ○ |
| C-124 | publishUnpublishedEntryのPR complete | E-02 (L717-722) | ○ |
| C-125 | updatePullRequestLabelsのラベル削除と追加 | E-02 (L724-748) | ○ |
| C-126 | updatePullRequestLabelsのCMSラベル0件 | E-02 (L725) | ○ |
| C-127 | completePullRequestの完了ステータス更新 | E-02 (L750-779) | ○ |
| C-128 | completePullRequestのポーリング | E-02 (L772-778) | ○ |
| C-129 | completePullRequestのポーリング上限 | E-02 (L770-778) | △ |
| C-130 | completePullRequestのmergeStrategy適用 | E-02 (L757) | ○ |
| C-131 | completePullRequestのdeleteSourceBranch | E-02 (L755) | ○ |
| C-132 | abandonPullRequestのabandonedステータス | E-02 (L781-796) | ○ |
| C-133 | abandonPullRequestのref削除 | E-02 (L792-795) | ○ |
| C-134 | withHeadersの認証ヘッダー付与 | E-02 (L244-253) | ○ |
| C-135 | withAzureFeaturesのapi-version付与 | E-02 (L255-267) | ○ |
| C-136 | withAzureFeaturesの既存パラメータ保持 | E-02 (L256-258) | ○ |
| C-137 | buildRequestの全適用 | E-02 (L269-278) | ○ |
| C-138 | buildRequestのcache設定保持 | E-02 (L272-274) | ○ |
| C-139 | requestの正常実行 | E-02 (L280-286) | ○ |
| C-140 | requestのAPIErrorスロー | E-02 (L283-284) | ○ |
| C-141 | componentDidMountのImplicitAuthenticator初期化 | E-03 (L25-48) | ○ |
| C-142 | componentDidMountの認証完了時onLogin呼び出し | E-03 (L41-47) | ○ |
| C-143 | componentDidMountのエラー時alert | E-03 (L42-44) | ○ |
| C-144 | handleLoginの認証スコープ・リソース | E-03 (L50-66) | ○ |
| C-145 | handleLoginのpreventDefault | E-03 (L51) | ○ |
| C-146 | handleLoginの成功時onLogin | E-03 (L63) | ○ |
| C-147 | handleLoginの失敗時loginError設定 | E-03 (L60) | ○ |
| C-148 | renderのloginWithAzureテキスト | E-03 (L81) | ○ |
| C-149 | renderのloggingInテキスト | E-03 (L81) | ○ |
| C-150 | renderのloginErrorMessage | E-03 (L75) | ○ |
| C-151 | renderのAzureアイコン | E-03 (L80) | ○ |
| C-152 | DecapCmsBackendAzureエクスポート | E-04 (L5-9) | ○ |
| C-153 | 個別エクスポート | E-04 (L10) | ○ |

## 4) 不足情報（Unknown / Missing）
- C-063: `fromBase64`に不正なBase64文字列を渡した場合の挙動は、`js-base64`ライブラリ（`Base64.decode`）の内部実装に依存する。ソースコード上ではバリデーションや例外ハンドリングがないため、実際の挙動はランタイムテストで確認する必要がある。
  - 候補：js-base64ライブラリのドキュメント / 単体テストでの実行確認
- C-069: `user()`メソッドで`coreAttributes`が`undefined`の場合、オプショナルチェーン(`?.`)によりundefinedが返されるが、`avatar_url`が`data:image/png;base64,undefined`になるなど、意図された動作かは不明。
  - 候補：Azure DevOps APIドキュメント / 実際のAPI応答サンプル
- C-129: `completePullRequest`で最大10回のポーリング後もqueuedのままの場合、関数は正常に終了するがPRは未完了のまま。この挙動が意図されたものかは設計仕様がないため不明。
  - 候補：設計書 / 開発者へのヒアリング

## 5) リスクフラグ（レビュー観点）
- **1 (中リスク)**: `fromBase64`の不正入力ハンドリング - ライブラリ依存の挙動であり、ライブラリバージョンアップ時に変更される可能性がある
- **1 (中リスク)**: `user()`のcoreAttributes不在時のフォールバック - Azure DevOps APIの応答仕様が変更された場合に影響を受ける可能性がある
- **1 (中リスク)**: `completePullRequest`のポーリング上限到達時の挙動 - エラーハンドリングが行われていないため、呼び出し元での対応が必要
- **0 (低リスク)**: `AuthenticationPage`のReactコンポーネントテスト - UIテストはレンダリング環境への依存があるが、基本的なロジックテストは可能
- **0 (低リスク)**: `delay`関数のタイミング精度 - Jest等のタイマーモックを使用すれば正確にテスト可能

## 6) レビュアーチェックリスト（最小）
- [ ] parseAzureRepoのバリデーション（UT-AZR-001〜006）がrepo形式の全パターンを網羅しているか
- [ ] authenticate/logoutフロー（UT-AZR-015〜019）のセキュリティ観点が十分か
- [ ] Editorial Workflow関連（UT-AZR-037〜047, 089〜091, 118〜125）のテストケースがワークフロー全体を網羅しているか
- [ ] completePullRequestのポーリング（UT-AZR-128〜129）のタイムアウト時の挙動テストが必要か検討
- [ ] withHeaders/buildRequest（UT-AZR-134〜140）の認証トークン漏洩リスクの観点が含まれているか
- [ ] AuthenticationPage（UT-AZR-141〜151）のテストでReactコンポーネントのマウント/アンマウントのライフサイクルが考慮されているか
- [ ] listFilesの404ハンドリング（UT-AZR-081〜082）が実運用で発生するエラーパターンを網羅しているか
