---
generated_at: 2026-02-25 02:50:00
metrics:
  claims_total: 50
  claims_with_evidence: 50
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

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

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

- E-01: `app/controllers/account/settings_controller.rb`（22行）
- E-02: `app/controllers/account/cancellations_controller.rb`（13行）
- E-03: `app/controllers/account/join_codes_controller.rb`（32行）
- E-04: `app/controllers/account/exports_controller.rb`（28行）
- E-05: `app/controllers/account/imports_controller.rb`（44行）
- E-06: `app/controllers/account/entropies_controller.rb`（13行）

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

### SettingsController（E-01）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | showアクションでアカウント設定が表示される | E-01: L5-7 `def show; @users = @account.users.active.alphabetically.includes(:identity); end` | ○ |
| C-02 | @usersがアルファベット順でソートされる | E-01: L6 `.alphabetically` | ○ |
| C-03 | @usersにidentityがincludesされる | E-01: L6 `.includes(:identity)` | ○ |
| C-04 | 管理者がアカウント名を更新できる | E-01: L9-11 `def update; @account.update!(account_params)` + L2 `before_action :ensure_admin, only: :update` | ○ |
| C-05 | 管理者以外はupdateが拒否される | E-01: L2 `before_action :ensure_admin, only: :update` | ○ |
| C-06 | 空のnameパラメータの挙動 | E-01: L10 `update!`の動作（モデル側バリデーションに依存） | ○ |
| C-07 | Strong Parametersでnameのみ許可 | E-01: L19-21 `params.expect account: %i[ name ]` | ○ |
| C-08 | set_accountでCurrent.accountが設定される | E-01: L15-17 `@account = Current.account` | ○ |

### CancellationsController（E-02）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-09 | オーナーがアカウントを削除できる | E-02: L4-6 `def create; Current.account.cancel; redirect_to session_menu_path` | ○ |
| C-10 | オーナー以外は削除が拒否される | E-02: L2 `before_action :ensure_owner` + L9-11 `head :forbidden unless Current.user.owner?` | ○ |
| C-11 | 管理者でもオーナーでなければ拒否 | E-02: L10-11 `head :forbidden unless Current.user.owner?` | ○ |
| C-12 | ensure_ownerの動作確認 | E-02: L9-11 | ○ |

### JoinCodesController（E-03）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-13 | showアクションで参加コード表示 | E-03: L5-6 `def show; end` + L25-27 `@join_code = Current.account.join_code` | ○ |
| C-14 | editアクションで編集画面表示 | E-03: L8-9 `def edit; end` | ○ |
| C-15 | 管理者が参加コードを更新できる | E-03: L11-16 `def update` + L3 `before_action :ensure_admin, only: %i[ update destroy ]` | ○ |
| C-16 | 管理者以外はupdateが拒否される | E-03: L3 `before_action :ensure_admin, only: %i[ update destroy ]` | ○ |
| C-17 | バリデーションエラー時にedit再表示 | E-03: L14-15 `render :edit, status: :unprocessable_entity` | ○ |
| C-18 | 管理者が参加コードをリセットできる | E-03: L19-22 `def destroy; @join_code.reset` | ○ |
| C-19 | 管理者以外はdestroyが拒否される | E-03: L3 `before_action :ensure_admin, only: %i[ update destroy ]` | ○ |
| C-20 | Strong Parametersでusage_limitのみ許可 | E-03: L29-31 `params.expect account_join_code: [ :usage_limit ]` | ○ |
| C-21 | set_join_codeの動作確認 | E-03: L25-27 | ○ |

### ExportsController（E-04）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 | showアクションでエクスポート表示 | E-04: L8-9 `def show; end` + L25-27 `@export = Current.account.exports.completed.find_by(...)` | ○ |
| C-23 | 管理者・オーナー以外は拒否 | E-04: L2 `before_action :ensure_admin_or_owner` + L17-19 `head :forbidden unless Current.user.admin? \|\| Current.user.owner?` | ○ |
| C-24 | 他ユーザーのエクスポートは取得不可 | E-04: L26 `find_by(id: params[:id], user: Current.user)` | ○ |
| C-25 | 完了していないエクスポートは取得不可 | E-04: L26 `.completed` | ○ |
| C-26 | エクスポート作成と非同期処理開始 | E-04: L11-13 `Current.account.exports.create!(user: Current.user).build_later` | ○ |
| C-27 | Current.userが紐づけられる | E-04: L12 `user: Current.user` | ○ |
| C-28 | エクスポート上限10件で制限 | E-04: L6 `CURRENT_EXPORT_LIMIT = 10` + L21-23 `head :too_many_requests if ... >= CURRENT_EXPORT_LIMIT` | ○ |
| C-29 | 境界値（9件で許可、10件で拒否） | E-04: L22 `>= CURRENT_EXPORT_LIMIT` | ○ |
| C-30 | ensure_admin_or_ownerの動作 | E-04: L17-19 | ○ |
| C-31 | set_exportの動作確認 | E-04: L25-27 | ○ |
| C-32 | 存在しないIDでnilになる | E-04: L26 `find_by` | ○ |

### ImportsController（E-05）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 | newアクションで新規作成画面表示 | E-05: L9-10 `def new; end` + L2 `layout "public"` | ○ |
| C-34 | createアクションでインポート作成 | E-05: L12-19 `def create` | ○ |
| C-35 | skip_account_seeding: trueで初期化 | E-05: L13 `Signup.new(identity: Current.identity, full_name: "Import", skip_account_seeding: true)` | ○ |
| C-36 | process_laterが呼ばれる | E-05: L39 `import.process_later` | ○ |
| C-37 | Signup失敗時にnew再表示 | E-05: L17-18 `render :new, alert: "Couldn't create account."` | ○ |
| C-38 | showアクションでインポート表示 | E-05: L22-23 `def show; end` | ○ |
| C-39 | 未認証ユーザーでもshow可能 | E-05: L5 `allow_unauthorized_access only: :show` | ○ |
| C-40 | 作成者以外は拒否される | E-05: L7 `before_action :ensure_accessed_by_owner, only: %i[ show ]` + L30-32 `head :forbidden unless @import.identity == Current.identity` | ○ |
| C-41 | 存在しないIDでエラー | E-05: L27 `@import = Current.account.imports.find(params[:id])` (`find`はRecordNotFoundを発生) | ○ |
| C-42 | ensure_accessed_by_ownerの動作 | E-05: L30-32 | ○ |
| C-43 | start_importでCurrent.setが使われる | E-05: L37-40 `Current.set(account: account) do` | ○ |
| C-44 | set_importの動作確認 | E-05: L26-28 | ○ |

### EntropiesController（E-06）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-45 | 管理者がエントロピー設定を更新できる | E-06: L4-7 `def update` + L2 `before_action :ensure_admin` | ○ |
| C-46 | 管理者以外はupdateが拒否される | E-06: L2 `before_action :ensure_admin` | ○ |
| C-47 | 不正な値でのエラー挙動 | E-06: L5 `update!`の動作（ActiveRecordエラー） | ○ |
| C-48 | Strong Parametersでauto_postpone_periodのみ許可 | E-06: L10-12 `params.expect(entropy: [ :auto_postpone_period ])` | ○ |

## 4) 不足情報（Unknown / Missing）
- 全てのテストケースはソースコードに基づいており、根拠なしの項目はありません
- ApplicationControllerで定義されている`ensure_admin`メソッドの詳細実装は参照していませんが、before_actionとして使用されていることは確認済み
  - 候補：`app/controllers/application_controller.rb` / `app/controllers/concerns/`

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全テストケースがソースコードから直接導出されており、コードとの整合性は高い
- **1: 中リスク** - モデル側のバリデーション（Account, JoinCode, Entropy等）の詳細は未確認。バリデーションエラーのテストケースはモデル実装に依存
- **0: 低リスク** - 権限チェック（ensure_admin, ensure_owner等）の実装はApplicationControllerまたはconcernsにあると推定されるが、before_actionとしての使用は確認済み

## 6) レビュアーチェックリスト（最小）
- [ ] 各コントローラのbefore_actionで指定されている権限チェックメソッド（ensure_admin, ensure_owner, ensure_admin_or_owner）の実装を確認
- [ ] Strong Parametersで許可されているパラメータがモデルの属性と一致しているか確認
- [ ] ExportsControllerのCURRENT_EXPORT_LIMIT（10件）が要件と一致しているか確認
- [ ] ImportsControllerのSignup処理（skip_account_seeding: true）の動作が意図通りか確認
- [ ] CancellationsControllerのaccount.cancelメソッドの動作（論理削除 or 物理削除）を確認
- [ ] JoinCodesControllerのresetメソッドの動作を確認
