概要
Phase 2 の update コマンドを中心とした E2E 統合テストを作成する。
背景・動機
差分更新が正しく動作することを、CLI バイナリ経由のフルパイプラインで検証する。
提案する解決策
テストシナリオ
フルフロー : index → ファイル追加 → update → search で新規ファイルが見つかる
ファイル変更 : index → ファイル内容変更 → update → search で変更後の内容が検索される
ファイル削除 : index → ファイル削除 → update → search で削除ファイルが出ない
変更なし : index → update(変更なし) → Incremental update completed: が出力され、stdout に Added: 0 files / Modified: 0 files / Deleted: 0 files / Unchanged: が含まれることを検証(contains による部分一致で行うこと)
インデックス未作成で update : フルインデックスにフォールバックし成功する。stderr に Note: No existing index found. Running full index... というフォールバックメッセージが含まれることを contains による部分一致で検証する。stdout には通常のupdate出力形式(Incremental update completed: + Added: N files)が含まれることも contains による部分一致で検証推奨
index → ファイル追加 → update → status : status の total_files, total_sections が正しく増加していることを検証。検証手順: (1) index → status --format json で初期値を動的キャプチャ(before値として保存), (2) ファイル追加, (3) update, (4) status --format json で更新後の値を動的キャプチャ(after値として保存), (5) before/after比較パターンで total_files が +1, total_sections が +N であることをアサート
.cmindexignore 追加後の update : 新たに除外対象になったファイルが検索結果から消える。update 実行後の出力で Deleted カウントが増加していることも検証する(除外ファイルが deleted 扱いになることを確認)。注意: .cmindexignore の from_content() はデフォルトパターンをマージしないため、カスタムファイル作成時には既存パターンの保持に注意すること。.cmindexignore にカスタムパターンを書く際は .commandindex/ パターンも必ず 含めること(デフォルトパターン消失による意図しないスキャンを防ぐため。ただし SUPPORTED_EXTENSIONS が md のみのため実害は小さい)
テスト設計方針
Phase 1 の E2E テスト([Feature] Phase 1 E2E 統合テスト #12 )と同様に tempfile::tempdir() で動的生成
各テストは独立したディレクトリで実行すること(S3-004) : tantivy はファイルロックを使用するため、全テストで必ず tempfile::tempdir() による独立ディレクトリを使用する。共有ディレクトリや固定パスは使用禁止
ヘルパー関数を共通化すること(S3-002) : run_index, run_update, parse_jsonl などのヘルパー関数は tests/common/mod.rs 等に共通化し、重複実装を避ける。ヘルパー関数は &Path を引数に取る設計とする。ただし既存テストのリファクタリングはスコープ外とする
stdout 検証は部分一致(contains)で行うこと(S3-008) : スペースパディングや出力フォーマットの細部に依存する完全一致検証は避け、contains による部分一致で柔軟に検証する
stderr 検証も同様に contains 部分一致で行うこと : stdout と同様に、stderr の検証も完全一致ではなく contains による部分一致で行い、出力フォーマット変更への耐性を確保する
search コマンドは current_dir(dir.path()) を必ず指定すること(S3-010) : 設定ファイルの読み込みパスがカレントディレクトリに依存するため、ヘルパー関数内で current_dir を設定し、設定漏れを防ぐ
新規E2Eテストは別ファイル(tests/e2e_update.rs)に作成 : 既存 tests/incremental_update.rs はシナリオ1〜5の一部をカバー済みだが、新規E2Eテストは tests/e2e_update.rs に作成し、より包括的なパイプライン検証(search結果の正当性検証含む)とシナリオ6〜7をカバーする。既存テストとの重複は許容する
受け入れ基準
依存 Issue
概要
Phase 2 の
updateコマンドを中心とした E2E 統合テストを作成する。背景・動機
差分更新が正しく動作することを、CLI バイナリ経由のフルパイプラインで検証する。
提案する解決策
テストシナリオ
Incremental update completed:が出力され、stdout にAdded: 0 files/Modified: 0 files/Deleted: 0 files/Unchanged:が含まれることを検証(containsによる部分一致で行うこと)Note: No existing index found. Running full index...というフォールバックメッセージが含まれることをcontainsによる部分一致で検証する。stdout には通常のupdate出力形式(Incremental update completed:+Added: N files)が含まれることもcontainsによる部分一致で検証推奨total_files,total_sectionsが正しく増加していることを検証。検証手順: (1) index →status --format jsonで初期値を動的キャプチャ(before値として保存), (2) ファイル追加, (3) update, (4)status --format jsonで更新後の値を動的キャプチャ(after値として保存), (5) before/after比較パターンでtotal_filesが +1,total_sectionsが +N であることをアサート.cmindexignoreのfrom_content()はデフォルトパターンをマージしないため、カスタムファイル作成時には既存パターンの保持に注意すること。.cmindexignoreにカスタムパターンを書く際は.commandindex/パターンも必ず含めること(デフォルトパターン消失による意図しないスキャンを防ぐため。ただし SUPPORTED_EXTENSIONS がmdのみのため実害は小さい)テスト設計方針
tempfile::tempdir()で動的生成tempfile::tempdir()による独立ディレクトリを使用する。共有ディレクトリや固定パスは使用禁止run_index,run_update,parse_jsonlなどのヘルパー関数はtests/common/mod.rs等に共通化し、重複実装を避ける。ヘルパー関数は&Pathを引数に取る設計とする。ただし既存テストのリファクタリングはスコープ外とするcontainsによる部分一致で柔軟に検証するcontains部分一致で行うこと: stdout と同様に、stderr の検証も完全一致ではなくcontainsによる部分一致で行い、出力フォーマット変更への耐性を確保するcurrent_dir(dir.path())を必ず指定すること(S3-010): 設定ファイルの読み込みパスがカレントディレクトリに依存するため、ヘルパー関数内でcurrent_dirを設定し、設定漏れを防ぐtests/incremental_update.rsはシナリオ1〜5の一部をカバー済みだが、新規E2Eテストはtests/e2e_update.rsに作成し、より包括的なパイプライン検証(search結果の正当性検証含む)とシナリオ6〜7をカバーする。既存テストとの重複は許容する受け入れ基準
依存 Issue