---
generated_at: 2026-02-25 10:30:00
metrics:
  claims_total: 188
  claims_with_evidence: 183
  claims_without_evidence: 5
confidence_derived: 0.97
---

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

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：183 / 188、根拠なし：5
- 優先レビュー（高）
  1. **C-149（getMediaDisplayURL セマフォ初期化）**：セマフォライブラリの内部動作に依存し、直接的なコード根拠が限定的
  2. **C-175（componentDidMount completeAuth呼び出し）**：外部ライブラリ（PkceAuthenticator/ImplicitAuthenticator）の内部仕様に依存
  3. **C-134（デフォルトブランチ自動取得）**：getDefaultBranchNameは外部ユーティリティ関数であり、その挙動の詳細が本モジュール内にない
  4. **C-050（90件以上のバッチ処理）**：batch関数の動作からの推測であり、GraphQLクエリの実際のバッチサイズ制限は未確認
  5. **C-187（空配列のlastCommitsクエリ）**：空配列入力時のGraphQLクエリ生成の実際の挙動は未検証

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

- E-01: `packages/decap-cms-backend-gitlab/src/API.ts` - GitLab APIクライアントクラス（1022行）
- E-02: `packages/decap-cms-backend-gitlab/src/implementation.ts` - GitLabバックエンド実装クラス（471行）
- E-03: `packages/decap-cms-backend-gitlab/src/AuthenticationPage.js` - 認証ページコンポーネント（127行）
- E-04: `packages/decap-cms-backend-gitlab/src/queries.ts` - GraphQLクエリ定義（73行）
- E-05: `packages/decap-cms-backend-gitlab/src/index.ts` - モジュールエクスポート（10行）
- E-06: `packages/decap-cms-backend-gitlab/src/__tests__/API.spec.js` - API既存テスト（187行）
- E-07: `packages/decap-cms-backend-gitlab/src/__tests__/gitlab.spec.js` - GitLab実装既存テスト（553行）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | API constructorデフォルト値テスト | E-01 (L225-238) | ○ |
| C-002 | API constructorカスタム設定テスト | E-01 (L225-238) | ○ |
| C-003 | useGraphQL=trueでApolloClient生成 | E-01 (L235-237) | ○ |
| C-004 | useGraphQL未指定でgraphQLClient未生成 | E-01 (L235-237) | ○ |
| C-005 | repoURLエンコーディング | E-01 (L231) | ○ |
| C-006 | getApolloClient正常系 | E-01 (L240-265) | ○ |
| C-007 | getApolloClient認証ヘッダー | E-01 (L241-249) | ○ |
| C-008 | getApolloClientトークンなし | E-01 (L246) | ○ |
| C-009 | reset graphQLClient存在時 | E-01 (L267-269) | ○ |
| C-010 | reset graphQLClient未設定時 | E-01 (L268) | ○ |
| C-011 | withAuthorizationHeadersトークンあり | E-01 (L271-277) | ○ |
| C-012 | withAuthorizationHeadersトークンなし | E-01 (L273) | ○ |
| C-013 | buildRequest apiRoot付与 | E-01 (L279-289) | ○ |
| C-014 | buildRequest cache存在時 | E-01 (L283-284) | ○ |
| C-015 | buildRequest cacheなし時 | E-01 (L285-288) | ○ |
| C-016 | request正常系 | E-01 (L291-297) | ○ |
| C-017 | requestエラー時APIError | E-01 (L294-296) | ○ |
| C-018 | userメソッド | E-01 (L307) | ○ |
| C-019 | hasWriteAccess project_access>=30 | E-01 (L312-344), E-06 (L13-21) | ○ |
| C-020 | hasWriteAccess project_access<30 | E-01 (L317-318), E-06 (L23-31) | ○ |
| C-021 | hasWriteAccess group_access>=30 | E-01 (L320-321), E-06 (L33-41) | ○ |
| C-022 | hasWriteAccess group_access<30 | E-01 (L320-321), E-06 (L43-51) | ○ |
| C-023 | hasWriteAccess shared_groups>=40 | E-01 (L324-329), E-06 (L53-63) | ○ |
| C-024 | hasWriteAccess shared_groups>=30 + branch権限 | E-01 (L330-341), E-06 (L65-79) | ○ |
| C-025 | hasWriteAccess merge不可 | E-01 (L335), E-06 (L97-111) | ○ |
| C-026 | hasWriteAccess push不可 | E-01 (L335), E-06 (L113-127) | ○ |
| C-027 | hasWriteAccess shared_groups<30 | E-01 (L330), E-06 (L81-95) | ○ |
| C-028 | hasWriteAccessブランチ取得エラー | E-01 (L338-339), E-06 (L129-145) | ○ |
| C-029 | readFileテキスト | E-01 (L346-362) | ○ |
| C-030 | readFileバイナリ | E-01 (L350, L356) | ○ |
| C-031 | readFileブランチ指定 | E-01 (L349) | ○ |
| C-032 | readFileキャッシュ利用 | E-01 (L360) | ○ |
| C-033 | readFileMetadata正常系 | E-01 (L364-382) | ○ |
| C-034 | readFileMetadataエラー時 | E-01 (L376-378) | ○ |
| C-035 | readFileMetadata author_name空 | E-01 (L373) | ○ |
| C-036 | getCursorFromHeaders正常系 | E-01 (L384-405) | ○ |
| C-037 | getCursorFromHeaders最初のページ | E-01 (L393) | ○ |
| C-038 | getCursorFromHeaders最後のページ | E-01 (L394) | ○ |
| C-039 | getCursorFromHeaders中間ページ | E-01 (L393-397) | ○ |
| C-040 | listFiles正常系 | E-01 (L437-446) | ○ |
| C-041 | listFiles再帰 | E-01 (L437) | ○ |
| C-042 | listFiles空ディレクトリ | E-01 (L443) | ○ |
| C-043 | traverseCursor正常系 | E-01 (L448-455) | ○ |
| C-044 | listAllFiles全ページREST | E-01 (L549-568) | ○ |
| C-045 | listAllFilesGraphQL分岐 | E-01 (L550-552) | ○ |
| C-046 | listAllFiles空ディレクトリ | E-01 (L567) | ○ |
| C-047 | listAllFilesGraphQLページネーション | E-01 (L457-471) | ○ |
| C-048 | listAllFilesGraphQL単一ページ | E-01 (L468) | ○ |
| C-049 | readFilesGraphQL正常系 | E-01 (L473-547) | ○ |
| C-050 | readFilesGraphQLバッチ処理 | E-01 (L481) | △ |
| C-051 | toBase64正常系 | E-01 (L570) | ○ |
| C-052 | fromBase64正常系 | E-01 (L571) | ○ |
| C-053 | fromBase64空文字列 | E-01 (L571) | ○ |
| C-054 | getBranch正常系 | E-01 (L573-578) | ○ |
| C-055 | getBranch存在しないブランチ | E-01 (L574) | ○ |
| C-056 | uploadAndCommit正常系 | E-01 (L580-620) | ○ |
| C-057 | uploadAndCommit newBranch | E-01 (L597) | ○ |
| C-058 | uploadAndCommit commitAuthor | E-01 (L599-603) | ○ |
| C-059 | uploadAndCommitブランチ競合 | E-01 (L614-617) | ○ |
| C-060 | uploadAndCommit汎用エラー | E-01 (L618) | ○ |
| C-061 | getCommitItems CREATE | E-01 (L622-666) | ○ |
| C-062 | getCommitItems UPDATE | E-01 (L633-637) | ○ |
| C-063 | getCommitItems MOVE | E-01 (L635-636) | ○ |
| C-064 | getCommitItems子ファイル移動 | E-01 (L650-663) | ○ |
| C-065 | getCommitItemsパストリム | E-01 (L631) | ○ |
| C-066 | persistFiles通常 | E-01 (L668-679) | ○ |
| C-067 | persistFilesワークフロー | E-01 (L670-672) | ○ |
| C-068 | deleteFiles正常系 | E-01 (L681-694) | ○ |
| C-069 | deleteFiles著者情報 | E-01 (L684-688) | ○ |
| C-070 | getMergeRequests正常系 | E-01 (L696-713) | ○ |
| C-071 | getMergeRequestsブランチ指定 | E-01 (L704) | ○ |
| C-072 | getMergeRequests空結果 | E-01 (L708) | ○ |
| C-073 | listUnpublishedBranches正常系 | E-01 (L715-725) | ○ |
| C-074 | getFileId正常系 | E-01 (L727-736) | ○ |
| C-075 | isFileExists存在 | E-01 (L738-753) | ○ |
| C-076 | isFileExists不存在 | E-01 (L745-748) | ○ |
| C-077 | isFileExists 500エラー | E-01 (L749) | ○ |
| C-078 | getBranchMergeRequest正常系 | E-01 (L755-762) | ○ |
| C-079 | getBranchMergeRequest MRなし | E-01 (L757-759) | ○ |
| C-080 | getDifferences正常系 | E-01 (L764-798) | ○ |
| C-081 | getDifferences new_file | E-01 (L783) | ○ |
| C-082 | getDifferences deleted_file | E-01 (L785) | ○ |
| C-083 | getDifferences renamed_file | E-01 (L787) | ○ |
| C-084 | getDifferences modified | E-01 (L781) | ○ |
| C-085 | getDifferencesバイナリ判定 | E-01 (L795) | ○ |
| C-086 | getDifferences SVGバイナリ判定 | E-01 (L795) | ○ |
| C-087 | getDifferences同一ブランチ | E-01 (L765-767) | ○ |
| C-088 | getDifferences 1000件上限 | E-01 (L776-778) | ○ |
| C-089 | retrieveUnpublishedEntryData | E-01 (L800-824) | ○ |
| C-090 | rebaseMergeRequest即時完了 | E-01 (L826-852) | ○ |
| C-091 | rebaseMergeRequestポーリング完了 | E-01 (L832-845) | ○ |
| C-092 | rebaseMergeRequestタイムアウト | E-01 (L847-848) | ○ |
| C-093 | rebaseMergeRequestエラー | E-01 (L849-851) | ○ |
| C-094 | createMergeRequest正常系 | E-01 (L854-868) | ○ |
| C-095 | editorialWorkflowGit新規 | E-01 (L870-889) | ○ |
| C-096 | editorialWorkflowGit既存更新 | E-01 (L890-908) | ○ |
| C-097 | editorialWorkflowGitバイナリ削除 | E-01 (L897-902) | ○ |
| C-098 | updateMergeRequestLabels | E-01 (L911-919) | ○ |
| C-099 | updateUnpublishedEntryStatus | E-01 (L921-931) | ○ |
| C-100 | mergeMergeRequest | E-01 (L933-944) | ○ |
| C-101 | publishUnpublishedEntry | E-01 (L946-951) | ○ |
| C-102 | closeMergeRequest | E-01 (L953-961) | ○ |
| C-103 | getDefaultBranch | E-01 (L963-966) | ○ |
| C-104 | isShaExistsInBranch存在 | E-01 (L968-976) | ○ |
| C-105 | isShaExistsInBranch不存在 | E-01 (L975) | ○ |
| C-106 | deleteBranch | E-01 (L978-983) | ○ |
| C-107 | deleteUnpublishedEntry | E-01 (L985-991) | ○ |
| C-108 | getMergeRequestStatues | E-01 (L993-1001) | ○ |
| C-109 | getStatuses正常系 | E-01 (L1003-1013), E-06 (L148-173) | ○ |
| C-110 | getStatusesステータスマッピング成功 | E-01 (L1008-1010) | ○ |
| C-111 | getStatusesステータスマッピングその他 | E-01 (L1010) | ○ |
| C-112 | getUnpublishedEntrySha | E-01 (L1015-1020) | ○ |
| C-113 | getMaxAccess正常系 | E-01 (L194-201), E-06 (L176-186) | ○ |
| C-114 | getMaxAccess 1件 | E-01 (L195-200) | ○ |
| C-115 | getMaxAccess同一レベル | E-01 (L196-199) | ○ |
| C-116 | batch正常系 | E-01 (L203-208) | ○ |
| C-117 | batch空配列 | E-01 (L204) | ○ |
| C-118 | batch アイテム<=maxPerBatch | E-01 (L204-206) | ○ |
| C-119 | GitLab constructorデフォルト | E-02 (L48-99), E-07 (L325-329) | ○ |
| C-120 | GitLab constructorカスタム | E-02 (L70-98) | ○ |
| C-121 | GitLab constructor repo未設定エラー | E-02 (L78-83), E-07 (L325-329) | ○ |
| C-122 | GitLab constructor proxied=true | E-02 (L78-79) | ○ |
| C-123 | GitLab constructor API指定 | E-02 (L85) | ○ |
| C-124 | isGitBackend | E-02 (L101-103) | ○ |
| C-125 | status認証済み | E-02 (L105-116) | ○ |
| C-126 | statusエラー時 | E-02 (L110-113) | ○ |
| C-127 | status API null | E-02 (L107) | ○ |
| C-128 | authComponent | E-02 (L118-120), E-07 (L331-336) | ○ |
| C-129 | restoreUser | E-02 (L122-124) | ○ |
| C-130 | authenticate成功 | E-02 (L126-169), E-07 (L349-357) | ○ |
| C-131 | authenticate API生成 | E-02 (L128-138) | ○ |
| C-132 | authenticate権限エラー | E-02 (L151-154), E-07 (L339-347) | ○ |
| C-133 | authenticateリポ未発見 | E-02 (L140-148) | ○ |
| C-134 | authenticateデフォルトブランチ取得 | E-02 (L156-166) | △ |
| C-135 | logout | E-02 (L171-174), E-07 (L386-395) | ○ |
| C-136 | getToken正常 | E-02 (L176-178), E-07 (L377-384) | ○ |
| C-137 | getTokenログアウト後 | E-02 (L176-178) | ○ |
| C-138 | filterFile一致 | E-02 (L180-189), E-07 (L518-530) | ○ |
| C-139 | filterFile depth不一致 | E-02 (L188), E-07 (L532-544) | ○ |
| C-140 | filterFile拡張子不一致 | E-02 (L188) | ○ |
| C-141 | entriesByFolder | E-02 (L191-210) | ○ |
| C-142 | listAllFiles | E-02 (L212-216) | ○ |
| C-143 | allEntriesByFolder | E-02 (L218-239) | ○ |
| C-144 | entriesByFiles | E-02 (L241-248) | ○ |
| C-145 | getEntry | E-02 (L250-256), E-07 (L397-419) | ○ |
| C-146 | getMedia | E-02 (L258-264) | ○ |
| C-147 | getMediaデフォルトフォルダ | E-02 (L258) | ○ |
| C-148 | getMediaDisplayURL | E-02 (L266-273) | ○ |
| C-149 | getMediaDisplayURLセマフォ初期化 | E-02 (L267) | △ |
| C-150 | getMediaFile | E-02 (L275-291) | ○ |
| C-151 | persistEntry | E-02 (L293-300) | ○ |
| C-152 | persistMedia | E-02 (L302-322) | ○ |
| C-153 | persistMediaパストリム | E-02 (L315) | ○ |
| C-154 | deleteFiles | E-02 (L324-326) | ○ |
| C-155 | traverseCursor | E-02 (L328-350) | ○ |
| C-156 | traverseCursorメタデータ付き | E-02 (L330-337) | ○ |
| C-157 | loadMediaFile | E-02 (L352-371) | ○ |
| C-158 | loadEntryMediaFiles | E-02 (L373-377) | ○ |
| C-159 | unpublishedEntries | E-02 (L379-387) | ○ |
| C-160 | unpublishedEntry id指定 | E-02 (L389-408) | ○ |
| C-161 | unpublishedEntry collection+slug | E-02 (L401-404) | ○ |
| C-162 | unpublishedEntryパラメータなし | E-02 (L405-407) | ○ |
| C-163 | getBranch | E-02 (L410-414) | ○ |
| C-164 | unpublishedEntryDataFile | E-02 (L416-420) | ○ |
| C-165 | unpublishedEntryMediaFile | E-02 (L422-426) | ○ |
| C-166 | updateUnpublishedEntryStatusロック | E-02 (L428-435) | ○ |
| C-167 | deleteUnpublishedEntryロック | E-02 (L437-444) | ○ |
| C-168 | publishUnpublishedEntryロック | E-02 (L446-453) | ○ |
| C-169 | getDeployPreview正常 | E-02 (L455-469) | ○ |
| C-170 | getDeployPreviewステータスなし | E-02 (L463) | ○ |
| C-171 | getDeployPreviewエラー | E-02 (L466-467) | ○ |
| C-172 | componentDidMount pkce | E-03 (L56-93) | ○ |
| C-173 | componentDidMount implicit | E-03 (L29-39, L67-68) | ○ |
| C-174 | componentDidMount Netlify | E-03 (L83-92) | ○ |
| C-175 | componentDidMount completeAuth呼び出し | E-03 (L76) | △ |
| C-176 | componentDidMount completeAuthエラー | E-03 (L77-79) | ○ |
| C-177 | componentDidMount completeAuth成功 | E-03 (L81) | ○ |
| C-178 | handleLoginログイン成功 | E-03 (L95-104) | ○ |
| C-179 | handleLoginログイン失敗 | E-03 (L98-100) | ○ |
| C-180 | handleLogin preventDefault | E-03 (L96) | ○ |
| C-181 | renderレンダリング | E-03 (L106-125) | ○ |
| C-182 | render inProgress=true | E-03 (L119) | ○ |
| C-183 | render inProgress=false | E-03 (L119) | ○ |
| C-184 | render loginError表示 | E-03 (L112) | ○ |
| C-185 | lastCommitsクエリ生成 | E-04 (L42-73) | ○ |
| C-186 | lastCommits単一パス | E-04 (L43-60) | ○ |
| C-187 | lastCommits空配列 | E-04 (L43) | △ |
| C-188 | index.tsエクスポート | E-05 (L1-10) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-050**: batch関数のmaxPerBatch=90は E-01 L481で確認できるが、GraphQL APIの実際のバッチサイズ制限に関するGitLab公式ドキュメントの参照が不足
  - 候補：GitLab GraphQL API公式ドキュメント / GraphQLクエリ制限仕様
- **C-134**: getDefaultBranchNameはdecap-cms-lib-utilの関数であり、本モジュール内にその詳細実装がない
  - 候補：decap-cms-lib-util/src内のgetDefaultBranchName実装 / GitLab REST API仕様
- **C-149**: semaphoreライブラリの内部動作（同時実行数制限の仕組み）が本モジュール内で確認できない
  - 候補：semaphore npmパッケージドキュメント
- **C-175**: PkceAuthenticator/ImplicitAuthenticatorのcompleteAuthメソッドの呼び出しタイミング・契約が本モジュール内にない
  - 候補：decap-cms-lib-auth内のAuthenticator実装
- **C-187**: 空配列を入力した場合のgqlテンプレートリテラルの実際の出力は未検証
  - 候補：graphql-tagライブラリの挙動テスト

## 5) リスクフラグ（レビュー観点）
- **0 (低リスク)**: C-009, C-010, C-051, C-052, C-053, C-115, C-117, C-118, C-124, C-147, C-149, C-180, C-182, C-183, C-186, C-187, C-188 - ユーティリティ・ヘルパー系のテストケース
- **1 (中リスク)**: C-050, C-134 - 外部依存のバッチサイズ・デフォルトブランチ取得に関するテスト。外部ライブラリの仕様変更で影響を受ける可能性あり
- **2 (高リスク)**: C-175 - 外部認証ライブラリのcompleteAuth呼び出しに関するテスト。認証フロー全体の正確性に影響

## 6) レビュアーチェックリスト（最小）
- [ ] hasWriteAccessの全アクセスレベル組み合わせ（C-019〜C-028）が実際のGitLab APIの権限モデルと整合しているか
- [ ] editorialWorkflowGitのワークフロー（C-095〜C-097）が実際のCMS編集ワークフローの仕様と一致しているか
- [ ] rebaseMergeRequestのタイムアウト回数30回（C-092）が適切な値か
- [ ] getDifferencesの1000件上限（C-088）がGitLab APIの実際の制限と一致しているか
- [ ] AuthenticationPageの認証タイプ分岐（C-172〜C-174）が全てのサポートされる認証方式をカバーしているか
- [ ] 根拠なし項目（C-050, C-134, C-149, C-175, C-187）の仕様を外部ドキュメントで確認すること
