---
generated_at: 2026-02-25 10:00:00
metrics:
  claims_total: 67
  claims_with_evidence: 64
  claims_without_evidence: 3
confidence_derived: 0.96
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：64 / 67、根拠なし：3
- 優先レビュー（高）
  1. **C-02（UT-PRX-002）**：toBase64がundefinedの場合の挙動はNon-null assertion演算子（!）からの推論であり、実際のランタイム動作の確認が必要
  2. **C-63（UT-PRX-063）**：config.logo?.src のオプショナルチェーンの動作はコードから読み取れるが、renderPageLogoの内部動作は外部コンポーネント依存
  3. **C-64（UT-PRX-064）**：config.logo_urlのフォールバック動作はコードから推測可能だが、logo未定義時の挙動の詳細確認が必要

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

- E-01: `packages/decap-cms-backend-proxy/src/implementation.ts` - ProxyBackendクラスおよびヘルパー関数の実装
- E-02: `packages/decap-cms-backend-proxy/src/AuthenticationPage.js` - AuthenticationPageコンポーネントの実装
- E-03: `packages/decap-cms-backend-proxy/src/index.ts` - エクスポート定義
- E-04: `packages/decap-cms-backend-proxy/package.json` - パッケージ設定・依存関係
- E-05: `decap-cms-lib-util` の型定義（import文から確認）- EditorialWorkflowError, APIError, unsentRequest, blobToFileObj

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | serializeAsset: AssetProxyが正しくBase64シリアライズされる | E-01 (L21-24) | ○ |
| C-02 | serializeAsset: toBase64がundefinedの場合にエラーが発生する | E-01 (L22: Non-null assertion `!`) | △ |
| C-03 | deserializeMediaFile: Base64エンコードされたメディアファイルが正しくデシリアライズされる | E-01 (L34-49) | ○ |
| C-04 | deserializeMediaFile: デシリアライズ後のファイルサイズが正しい | E-01 (L39-44, L48) | ○ |
| C-05 | deserializeMediaFile: encodingがbase64以外の場合にconsole.errorが出力される | E-01 (L36-37) | ○ |
| C-06 | deserializeMediaFile: contentが空文字列の場合にファイルサイズが0 | E-01 (L39-44) | ○ |
| C-07 | deserializeMediaFile: URLオブジェクトが生成されurlとdisplayURLが一致する | E-01 (L47-48) | ○ |
| C-08 | constructor: 有効な設定で正しく初期化される | E-01 (L58-68) | ○ |
| C-09 | constructor: branchが未指定の場合にデフォルト値'master'が設定される | E-01 (L63) | ○ |
| C-10 | constructor: proxy_urlが未設定の場合にエラーがスローされる | E-01 (L59-61) | ○ |
| C-11 | constructor: optionsが未指定の場合にデフォルト値{}が設定される | E-01 (L58: `options = {}`) | ○ |
| C-12 | constructor: cms_label_prefixが設定される | E-01 (L67) | ○ |
| C-13 | isGitBackend: falseが返却される | E-01 (L70-72) | ○ |
| C-14 | status: 認証・APIのステータスがtrueで返却される | E-01 (L74-76) | ○ |
| C-15 | authComponent: AuthenticationPageコンポーネントが返却される | E-01 (L78-80) | ○ |
| C-16 | restoreUser: authenticate()の結果が返却される | E-01 (L82-84) | ○ |
| C-17 | authenticate: Promiseが解決される | E-01 (L86-88) | ○ |
| C-18 | logout: nullが返却される | E-01 (L90-92) | ○ |
| C-19 | getToken: 空文字列のPromiseが返却される | E-01 (L94-96) | ○ |
| C-20 | request: 正常なレスポンスの場合にJSONが返却される | E-01 (L98-112) | ○ |
| C-21 | request: リクエストボディにbranchが含まれる | E-01 (L102) | ○ |
| C-22 | request: Content-Typeヘッダーが正しく設定される | E-01 (L101) | ○ |
| C-23 | request: レスポンスがエラーの場合にAPIErrorがスローされる | E-01 (L109-111) | ○ |
| C-24 | request: 404エラーの場合にAPIErrorが正しいステータスコードでスローされる | E-01 (L109-111) | ○ |
| C-25 | request: POSTメソッドで送信される | E-01 (L100) | ○ |
| C-26 | entriesByFolder: 正しいアクション名とパラメータでリクエストが送信される | E-01 (L114-119) | ○ |
| C-27 | entriesByFiles: 正しいアクション名とパラメータでリクエストが送信される | E-01 (L121-126) | ○ |
| C-28 | getEntry: 正しいアクション名とパラメータでリクエストが送信される | E-01 (L128-133) | ○ |
| C-29 | unpublishedEntries: 正しいアクション名でリクエストが送信される | E-01 (L135-140) | ○ |
| C-30 | unpublishedEntry: idを指定して未公開エントリが取得できる | E-01 (L142-164) | ○ |
| C-31 | unpublishedEntry: collectionとslugを指定して未公開エントリが取得できる | E-01 (L142-164) | ○ |
| C-32 | unpublishedEntry: 404エラーの場合にEditorialWorkflowErrorがスローされる | E-01 (L158-161), E-05 | ○ |
| C-33 | unpublishedEntry: 404以外のエラーの場合にそのままエラーが再スローされる | E-01 (L162) | ○ |
| C-34 | unpublishedEntry: cmsLabelPrefixがリクエストパラメータに含まれる | E-01 (L154) | ○ |
| C-35 | unpublishedEntryDataFile: データファイルの内容が返却される | E-01 (L166-172) | ○ |
| C-36 | unpublishedEntryMediaFile: メディアファイルがデシリアライズされて返却される | E-01 (L174-180) | ○ |
| C-37 | deleteUnpublishedEntry: 正しいアクション名とパラメータでリクエストが送信される | E-01 (L182-187) | ○ |
| C-38 | persistEntry: エントリとアセットが正しくリクエストされる | E-01 (L189-201) | ○ |
| C-39 | persistEntry: optionsにstatusが未設定の場合にinitialWorkflowStatusが使用される | E-01 (L197) | ○ |
| C-40 | persistEntry: optionsにstatusが設定されている場合にそのstatusが使用される | E-01 (L197) | ○ |
| C-41 | persistEntry: cmsLabelPrefixがリクエストパラメータに含まれる | E-01 (L199) | ○ |
| C-42 | persistEntry: assetsが空配列の場合に正常に処理される | E-01 (L190) | ○ |
| C-43 | updateUnpublishedEntryStatus: 正しいアクション名とパラメータでリクエストが送信される | E-01 (L203-214) | ○ |
| C-44 | publishUnpublishedEntry: 正しいアクション名とパラメータでリクエストが送信される | E-01 (L216-221) | ○ |
| C-45 | getMedia: メディアファイル一覧がデシリアライズされて返却される | E-01 (L223-230) | ○ |
| C-46 | getMedia: 引数でmediaFolderを指定した場合にそのフォルダが使用される | E-01 (L223) | ○ |
| C-47 | getMedia: メディアファイルが0件の場合に空配列が返却される | E-01 (L229) | ○ |
| C-48 | getMediaFile: 単一メディアファイルがデシリアライズされて返却される | E-01 (L232-238) | ○ |
| C-49 | persistMedia: アセットがシリアライズされてリクエストが送信される | E-01 (L240-248) | ○ |
| C-50 | persistMedia: commitMessageがオプションに含まれる | E-01 (L244) | ○ |
| C-51 | deleteFiles: 正しいアクション名とパラメータでリクエストが送信される | E-01 (L250-255) | ○ |
| C-52 | deleteFiles: pathsが1件のみの場合に正常に処理される | E-01 (L250-255) | ○ |
| C-53 | getDeployPreview: 正しいアクション名とパラメータでリクエストが送信される | E-01 (L257-262) | ○ |
| C-54 | AuthenticationPage componentDidMount: PropTypesのチェックが実行される | E-02 (L39-47) | ○ |
| C-55 | AuthenticationPage handleLogin: ログインボタンクリック時にonLoginが呼び出される | E-02 (L49-52) | ○ |
| C-56 | AuthenticationPage handleLogin: イベントのデフォルト動作が防止される | E-02 (L50) | ○ |
| C-57 | AuthenticationPage render: inProgressがfalseの場合にログインボタンが有効 | E-02 (L60) | ○ |
| C-58 | AuthenticationPage render: inProgressがtrueの場合にログインボタンが無効 | E-02 (L60) | ○ |
| C-59 | AuthenticationPage render: inProgressがtrueの場合に'auth.loggingIn'テキストが表示される | E-02 (L61) | ○ |
| C-60 | AuthenticationPage render: inProgressがfalseの場合に'auth.login'テキストが表示される | E-02 (L61) | ○ |
| C-61 | AuthenticationPage render: config.site_urlが設定されている場合にGoBackButtonが表示される | E-02 (L63) | ○ |
| C-62 | AuthenticationPage render: config.site_urlが未設定の場合にGoBackButtonが表示されない | E-02 (L63) | ○ |
| C-63 | AuthenticationPage render: config.logo.srcが設定されている場合にロゴが表示される | E-02 (L59) | △ |
| C-64 | AuthenticationPage render: config.logo_urlが設定されている場合にロゴが表示される | E-02 (L59) | △ |
| C-65 | index.ts: ProxyBackendが正しくエクスポートされる | E-03 (L8) | ○ |
| C-66 | index.ts: AuthenticationPageが正しくエクスポートされる | E-03 (L8) | ○ |
| C-67 | index.ts: DecapCmsBackendProxyオブジェクトにProxyBackendとAuthenticationPageが含まれる | E-03 (L4-7) | ○ |

## 4) 不足情報（Unknown / Missing）
- C-02: `serializeAsset`関数でNon-null assertion演算子（`!`）を使用してtoBase64を呼び出しているが、TypeScriptのランタイム時にundefinedだった場合の具体的なエラー型は実行環境依存
  - 候補：TypeErrorがスローされる / ランタイムテストで確認が必要
- C-63: `renderPageLogo`は`decap-cms-ui-default`からインポートされた外部関数であり、`config.logo?.src`のオプショナルチェーンの結果（undefined時のフォールバック）は外部実装に依存
  - 候補：renderPageLogoの実装確認 / decap-cms-ui-defaultのソースコード参照
- C-64: `config.logo_url`はフォールバック値として使用されるが、`config.logo`が定義されているが`src`がない場合の動作は`config.logo?.src`の評価結果（undefined）による
  - 候補：renderPageLogoへの引数がundefinedになるケースの確認

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - エクスポート定義関連のテストケース（C-65, C-66, C-67）は構造確認のみ
- 0: 低リスク - isGitBackend, logout, getTokenなどの単純な戻り値テスト
- 1: 中リスク - deserializeMediaFileのencodingチェックはconsole.errorのみでエラーをスローしないため、呼び出し元で不正データが伝播する可能性がある
- 1: 中リスク - unpublishedEntryの404判定は`e.status === 404`でキャッチしているが、エラーオブジェクトの構造がAPIError以外の場合を考慮していない可能性
- 1: 中リスク - requestメソッドがfetchWithTimeoutを使用しているが、タイムアウト時の挙動に関するテストケースが不足

## 6) レビュアーチェックリスト（最小）
- [ ] C-02: toBase64がundefinedの場合の実際のランタイム挙動を確認
- [ ] C-05: encodingがbase64以外の場合、空のBlobが返されることの業務影響を確認
- [ ] C-32: EditorialWorkflowErrorのコンストラクタ引数（第2引数のtrue）の意味を確認
- [ ] C-39/C-40: persistEntryのstatus優先順位（options.status || this.options.initialWorkflowStatus）がビジネス要件と一致するか確認
- [ ] C-63/C-64: renderPageLogoの外部依存の動作確認（logo?.srcとlogo_urlのフォールバック）
- [ ] requestメソッドのタイムアウト時の挙動テストの追加検討
