Skip to content

[Feature] Phase 2 E2E 統合テスト(update コマンドの差分更新フロー検証) #28

@Kewton

Description

@Kewton

概要

Phase 2 の update コマンドを中心とした E2E 統合テストを作成する。

背景・動機

差分更新が正しく動作することを、CLI バイナリ経由のフルパイプラインで検証する。

提案する解決策

テストシナリオ

  1. フルフロー: index → ファイル追加 → update → search で新規ファイルが見つかる
  2. ファイル変更: index → ファイル内容変更 → update → search で変更後の内容が検索される
  3. ファイル削除: index → ファイル削除 → update → search で削除ファイルが出ない
  4. 変更なし: index → update(変更なし) → Incremental update completed: が出力され、stdout に Added: 0 files / Modified: 0 files / Deleted: 0 files / Unchanged: が含まれることを検証(contains による部分一致で行うこと)
  5. インデックス未作成で update: フルインデックスにフォールバックし成功する。stderr に Note: No existing index found. Running full index... というフォールバックメッセージが含まれることを contains による部分一致で検証する。stdout には通常のupdate出力形式(Incremental update completed: + Added: N files)が含まれることも contains による部分一致で検証推奨
  6. 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 であることをアサート
  7. .cmindexignore 追加後の update: 新たに除外対象になったファイルが検索結果から消える。update 実行後の出力で Deleted カウントが増加していることも検証する(除外ファイルが deleted 扱いになることを確認)。注意: .cmindexignorefrom_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をカバーする。既存テストとの重複は許容する

受け入れ基準

  • 上記 7 シナリオのテストが全て PASS
  • テストは独立して実行可能
  • cargo test / clippy / fmt 全パス

依存 Issue

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions