# gist-cache-rs 機能検証テスト設計書（テストセット2：検索機能）

## テスト目的

gist-cache-rsの検索機能が設計通りに正しく動作することを確認する。

## テスト対象機能

- Auto検索（デフォルト）
- ID直接指定検索（--id）
- ファイル名検索（--filename）
- 説明文検索（--description）
- 複数候補からの選択UI
- 検索結果0件時のエラーハンドリング

## 前提条件

- gist-cache-rsがインストール済み
- GitHub CLIが認証済み
- メタデータキャッシュが最新（`gist-cache-rs update`実行済み）
- 複数のテスト用Gistが存在する

## テストケース一覧

### TC1: Auto検索（デフォルト）

**目的**: キーワードによる自動検索が正しく動作することを確認

**前提条件**:

- hello_args.sh を含む複数のGistが存在する

**手順**:

1. キーワード「hello」で検索: `gist-cache-rs run hello bash`
2. 検索結果を確認
3. 複数候補が表示された場合、番号を選択して実行

**期待結果**:

- ファイル名または説明文に「hello」を含むGistが表示される
- 1件の場合は直接実行、複数件の場合は選択UIが表示される
- 選択したGistが正しく実行される

**検証項目**:

- ファイル名での部分一致検索が動作する
- 説明文での部分一致検索が動作する
- 大文字小文字を区別しない検索が動作する

---

### TC2: ID直接指定（--id）

**目的**: Gist IDを直接指定した検索が正しく動作することを確認

**前提条件**:

- hello_args.sh のGist ID（7bcb324e9291fa350334df8efb7f0deb）が分かっている

**手順**:

1. Gist IDを直接指定: `gist-cache-rs run --id 7bcb324e9291fa350334df8efb7f0deb bash test`
2. 実行結果を確認

**期待結果**:

- 検索プロセスをスキップして、直接指定されたGistが実行される
- 「ID指定モード」のメッセージが表示される
- 複数候補の選択UIは表示されない

**検証項目**:

- 正確なGist IDで直接アクセスできる
- ID指定モードのメッセージが表示される
- 他の検索オプションと併用できない（エラーまたは無視される）

---

### TC3: ファイル名検索（--filename）

**目的**: ファイル名に限定した検索が正しく動作することを確認

**前提条件**:

- hello_args.sh を含む複数のGistが存在する

**手順**:

1. ファイル名で検索: `gist-cache-rs run --filename hello_args.sh bash`
2. 検索結果を確認
3. 実行結果を確認

**期待結果**:

- ファイル名が「hello_args.sh」に一致するGistのみが検索される
- 説明文に「hello_args.sh」が含まれていても、ファイル名が異なるGistは除外される
- 部分一致で検索される（例: 「hello」でも「hello_args.sh」が見つかる）

**検証項目**:

- ファイル名での検索が正しく動作する
- 説明文は検索対象外になる
- 複数マッチした場合は選択UIが表示される

---

### TC4: 説明文検索（--description）

**目的**: 説明文に限定した検索が正しく動作することを確認

**前提条件**:

- 説明文に特定のキーワード（例: 「#bash」「#test」）を含むGistが存在する

**手順**:

1. 説明文で検索: `gist-cache-rs run --description "#bash" bash`
2. 検索結果を確認
3. 複数候補から1つを選択して実行

**期待結果**:

- 説明文に「#bash」を含むGistのみが検索される
- ファイル名に「#bash」が含まれていても、説明文に含まれていなければ除外される
- 部分一致で検索される

**検証項目**:

- 説明文での検索が正しく動作する
- ファイル名は検索対象外になる
- タグ検索（「#bash」など）が有効に機能する

---

### TC5: 複数候補からの選択

**目的**: 複数の検索結果から番号で選択するUIが正しく動作することを確認

**前提条件**:

- 「hello」で検索すると複数のGistがヒットする

**手順**:

1. 複数ヒットするキーワードで検索: `gist-cache-rs run hello bash`
2. 表示される候補リストを確認
3. 番号を選択（例: 4を入力してEnter）
4. 選択したGistが実行されることを確認

**期待結果**:

- 複数のGistが番号付きリストで表示される
- 各Gistの説明文とファイル名が表示される
- 「番号を選択してください (1-N):」のプロンプトが表示される
- 入力した番号に対応するGistが実行される

**検証項目**:

- 番号付きリストが正しく表示される
- 有効な番号を入力すると対応するGistが実行される
- 不正な番号（0、範囲外、文字列など）を入力した場合のエラーハンドリング

---

### TC6: 検索結果0件のエラーハンドリング

**目的**: 検索結果が見つからない場合のエラーハンドリングが正しく動作することを確認

**前提条件**:

- 存在しないキーワード（例: 「nonexistent_gist_xyz」）を使用

**手順**:

1. 存在しないキーワードで検索: `gist-cache-rs run nonexistent_gist_xyz bash`
2. エラーメッセージを確認
3. 終了コードを確認

**期待結果**:

- 「No search results for query: nonexistent_gist_xyz」のようなエラーメッセージが表示される
- プログラムが適切なエラーコード（非0）で終了する
- プログラムがクラッシュしない

**検証項目**:

- 明確なエラーメッセージが表示される
- エラーコードが非0
- メモリリークやクラッシュが発生しない

---

## 追加テストケース

### TC7: 特殊文字を含む検索

**目的**: 特殊文字を含むキーワードで検索が正しく動作することを確認

**手順**:

1. 特殊文字を含むキーワードで検索: `gist-cache-rs run "data_analysis.py" bash`

**期待結果**:

- アンダースコアやピリオドを含むファイル名が正しく検索される
- 特殊文字がエスケープされずに検索される

---

### TC8: 空白を含む検索

**目的**: 空白を含む説明文の検索が正しく動作することを確認

**手順**:

1. 空白を含むキーワードで検索: `gist-cache-rs run --description "Test Script" bash`

**期待結果**:

- 空白を含む説明文が正しく検索される
- 引用符で囲んだキーワードが正しく処理される

---

## テスト実行順序

1. TC1: Auto検索（デフォルト）
2. TC2: ID直接指定（--id）
3. TC3: ファイル名検索（--filename）
4. TC4: 説明文検索（--description）
5. TC5: 複数候補からの選択
6. TC6: 検索結果0件のエラーハンドリング
7. TC7: 特殊文字を含む検索（オプション）
8. TC8: 空白を含む検索（オプション）

## 注意事項

- TC5は対話的な入力が必要なため、自動化が困難
- TC6はエラーケースのため、正常系のテスト後に実施
- 検索結果は環境（所有しているGist）によって異なる
- テスト実行前にメタデータキャッシュを最新化すること
