---
generated_at: 2026-02-25 10:00:00
metrics:
  claims_total: 60
  claims_with_evidence: 57
  claims_without_evidence: 3
confidence_derived: 0.95
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：57 / 60、根拠なし：3
- 優先レビュー（高）
  1. **C-44（UT-OBJ-044）**：summaryテンプレート展開の具体的な出力形式はcompileStringTemplateの実装依存であり、外部ライブラリの動作確認が必要
  2. **C-53（UT-OBJ-053）**：ボーダーカラーのスタイル条件（forList && !hasError）の三項演算子のfalseブランチが`false`を返す動作の検証
  3. **C-54（UT-OBJ-054）**：ボーダーカラーのスタイル条件でhasError=trueの場合のCSS適用なし確認

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

- E-01: `packages/decap-cms-widget-object/src/index.js` - Widget関数、エクスポート定義
- E-02: `packages/decap-cms-widget-object/src/schema.js` - スキーマ定義（collapsed, i18n）
- E-03: `packages/decap-cms-widget-object/src/ObjectControl.js` - ObjectControlクラス（メインコントロールコンポーネント）
- E-04: `packages/decap-cms-widget-object/src/ObjectPreview.js` - ObjectPreview関数コンポーネント
- E-05: `packages/decap-cms-widget-object/package.json` - パッケージ情報、依存関係

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | デフォルトオプションでWidgetがname='object'等を持つオブジェクトを返す | E-01 (L5-L13) | ○ |
| C-02 | カスタムオプションがスプレッドでマージされる | E-01 (L12) | ○ |
| C-03 | 空オブジェクトでデフォルト値が維持される | E-01 (L5, L12) | ○ |
| C-04 | DecapCmsWidgetObjectがWidget, controlComponent, previewComponentをエクスポート | E-01 (L15) | ○ |
| C-05 | デフォルトエクスポートがDecapCmsWidgetObjectと同一 | E-01 (L16) | ○ |
| C-06 | スキーマがcollapsedをboolean型で定義 | E-02 (L3) | ○ |
| C-07 | スキーマがi18nをboolean型で定義 | E-02 (L4) | ○ |
| C-08 | スキーマオブジェクトがpropertiesのみを持つ | E-02 (L1-L6) | ○ |
| C-09 | field.collapsed=falseでstate.collapsed=false | E-03 (L60) | ○ |
| C-10 | field.collapsed=trueでstate.collapsed=true | E-03 (L60) | ○ |
| C-11 | fieldにcollapsedが未設定でデフォルトfalse | E-03 (L60: `get('collapsed', false)`) | ○ |
| C-12 | shouldComponentUpdateが常にtrueを返す | E-03 (L75-L77) | ○ |
| C-13 | processControlRefでrefがchildRefsに登録される | E-03 (L27-L32) | ○ |
| C-14 | processControlRefでref=nullの場合に早期リターン | E-03 (L28) | ○ |
| C-15 | controlRefコールバックが呼び出される | E-03 (L31) | ○ |
| C-16 | controlRefがundefinedでもエラーにならない | E-03 (L31: `?.`) | ○ |
| C-17 | 複数フィールドのvalidateが呼び出される | E-03 (L79-L94) | ○ |
| C-18 | 単一フィールドのvalidateが呼び出される | E-03 (L81: `field.get('field')`) | ○ |
| C-19 | innerWrappedControl.validateが優先される | E-03 (L88-L89) | ○ |
| C-20 | hiddenウィジェットがvalidateでスキップされる | E-03 (L84) | ○ |
| C-21 | childRefが存在しない場合にエラーなし | E-03 (L88, L92: `control?.`) | ○ |
| C-22 | 通常フィールドでEditorControlが返却される | E-03 (L96-L142) | ○ |
| C-23 | hiddenウィジェットでnull返却 | E-03 (L113-L115) | ○ |
| C-24 | valueがMapの場合にフィールド名で値取得 | E-03 (L117) | ○ |
| C-25 | valueがMapでない場合にvalue全体が渡される | E-03 (L117) | ○ |
| C-26 | valueがundefinedの場合にエラーなし | E-03 (L117: `value && Map.isMap(value)`) | ○ |
| C-27 | isFieldDuplicateがtrueでisDisabled=true | E-03 (L119) | ○ |
| C-28 | isFieldHiddenがtrueでisHidden=true | E-03 (L120) | ○ |
| C-29 | isFieldDuplicateがundefinedでisDisabled=false | E-03 (L119: `isFieldDuplicate && isFieldDuplicate(field)`) | ○ |
| C-30 | parentIdsにforIDが追加される | E-03 (L133) | ○ |
| C-31 | collapsed=false -> trueへのトグル | E-03 (L144-L146) | ○ |
| C-32 | collapsed=true -> falseへのトグル | E-03 (L144-L146) | ○ |
| C-33 | collapsed状態でpath指定時に展開してフォーカス | E-03 (L148-L157) | ○ |
| C-34 | collapsed状態でpath未指定時に展開のみ | E-03 (L149-L150) | ○ |
| C-35 | 展開状態でpath指定時にフォーカス実行 | E-03 (L159-L164) | ○ |
| C-36 | ネストパスの分割処理 | E-03 (L152-L155, L160-L163) | ○ |
| C-37 | 存在しないchildRefの安全処理 | E-03 (L154: `field?.focus`) | ○ |
| C-38 | 展開状態でpath未指定時に何も実行されない | E-03 (L159: `else if (path)`) | ○ |
| C-39 | multiFieldsでcontrolForが複数回呼ばれる | E-03 (L168-L173) | ○ |
| C-40 | singleFieldでcontrolForが1回呼ばれる | E-03 (L172) | ○ |
| C-41 | multiFieldsが空Listで空配列返却 | E-03 (L170: `multiFields.map(...)`) | ○ |
| C-42 | summaryなしでlabel返却 | E-03 (L177-L179) | ○ |
| C-43 | labelなしでname返却 | E-03 (L177: `field.get('label', field.get('name'))`) | ○ |
| C-44 | summaryありでcompileStringTemplateの結果返却 | E-03 (L179) | △ |
| C-45 | multiFieldsありでフィールド群レンダリング | E-03 (L185, L188-L231) | ○ |
| C-46 | singleFieldありでフィールドレンダリング | E-03 (L186, L188-L231) | ○ |
| C-47 | fieldsもfieldもなしで「No field(s) defined」表示 | E-03 (L234) | ○ |
| C-48 | forList=trueでObjectWidgetTopBarが非表示 | E-03 (L211) | ○ |
| C-49 | forList=falseでObjectWidgetTopBarが表示 | E-03 (L211-L218) | ○ |
| C-50 | forList=trueでprops.collapsedが使用される | E-03 (L184) | ○ |
| C-51 | forList=falseでstate.collapsedが使用される | E-03 (L184) | ○ |
| C-52 | collapsed=trueでdisplay:noneが適用される | E-03 (L19-L21, L220-L225) | ○ |
| C-53 | forList=true && hasError=falseでborder-color設定 | E-03 (L207) | △ |
| C-54 | forList=true && hasError=trueでborder-colorなし | E-03 (L207) | △ |
| C-55 | collapsed=true && forList=falseでobjectLabelがheadingに渡される | E-03 (L215) | ○ |
| C-56 | ObjectPreviewでfield.fieldsがレンダリングされる | E-04 (L8) | ○ |
| C-57 | ObjectPreviewでfield.fieldがレンダリングされる | E-04 (L8) | ○ |
| C-58 | ObjectPreviewでfieldsもfieldもなくnullレンダリング | E-04 (L8) | ○ |
| C-59 | WidgetPreviewContainerでラップされる | E-04 (L7-L9) | ○ |
| C-60 | valueのデフォルト値がMap() | E-03 (L54) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-44**: `compileStringTemplate`は`decap-cms-lib-widgets`の`stringTemplate`モジュールからインポートされた外部関数であり、その具体的な動作・出力形式は本モジュールのソースコードからは完全には確認できない。テストケースでは関数の呼び出し確認（モック利用）が主な検証手段となる。
  - 候補：`packages/decap-cms-lib-widgets/src/stringTemplate.js` の実装確認
- **C-53, C-54**: スタイル適用の条件式 `forList ? !hasError : false` の具体的なCSS適用結果は、Emotionの`css`テンプレートリテラルと`cx`関数の動作に依存する。ソースコード上で三項演算子の条件は確認できるが、最終的なDOM上のスタイル適用は統合テストレベルの検証が望ましい。
  - 候補：Emotionの`cx`関数の条件付きクラス適用の動作ドキュメント

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: index.js、schema.js のテストケース（C-01〜C-08）は単純なオブジェクト返却・エクスポートの検証であり、ソースコードとの対応が明確
- **0（低リスク）**: ObjectControl の constructor、shouldComponentUpdate、handleCollapseToggle のテストケース（C-09〜C-12, C-31〜C-32）は単純な状態管理ロジック
- **1（中リスク）**: ObjectControl の validate メソッド（C-17〜C-21）は複数の条件分岐を持ち、innerWrappedControl の存在有無による分岐がある
- **1（中リスク）**: ObjectControl の focus メソッド（C-33〜C-38）は非同期的なsetState後のコールバック処理を含み、テスト実装時にact()の扱いに注意が必要
- **1（中リスク）**: ObjectControl の render メソッド内のスタイル条件（C-52〜C-54）はEmotionのCSS-in-JSの動作に依存する
- **0（低リスク）**: ObjectPreview のテストケース（C-56〜C-59）は単純なプレビューコンポーネントの検証

## 6) レビュアーチェックリスト（最小）
- [ ] ObjectControl.validate のテストケース（C-17〜C-21）がinnerWrappedControlの有無による分岐を正しくカバーしているか
- [ ] ObjectControl.focus のテストケース（C-33〜C-38）でsetStateのコールバック内の処理がテスト可能であるか
- [ ] ObjectControl.controlFor のテストケース（C-22〜C-30）でEditorControlに渡されるpropsが網羅されているか
- [ ] C-44のcompileStringTemplateの呼び出しテストが外部モジュールのモック方針と整合しているか
- [ ] C-53, C-54のスタイル条件テストが実装可能なレベルの具体性を持っているか
- [ ] ObjectPreview（C-56〜C-59）のテストケースがfield propsの各パターンをカバーしているか
