# E2E テスト（WebDriver + tauri-driver）

TelosDB の UI を WebDriver で操作し、表示・動作を検証します。

## 前提

1. **tauri-driver のインストール**
   ```bash
   cargo install tauri-driver --locked
   ```

2. **プラットフォーム別ドライバ**
   - **Windows**: `edgedriver` が devDependency に含まれており、初回実行時に Edge のバージョンに合わせて Edge Driver を自動ダウンロードする。手動で用意する場合は [Microsoft Edge Driver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/) を PATH に通すか、`TELOS_EDGE_DRIVER` にバイナリのパスを指定する。
   - **Linux**: `WebKitWebDriver` をインストール（例: Debian 系では `sudo apt install webkit2gtk-driver`）。CI では仮想ディスプレイ用に `xvfb` が必要な場合あり。
   - **macOS**: デスクトップ向け WebDriver は非対応のため、この E2E は Windows / Linux で実行すること。

## 起動待ち

各 spec の `before()` で **起動が完了するまで待機**してからテストを開始する。

- **ヘルパー**: `tests/e2e/helpers/wait-for-app.js` の `waitForAppReady(browser)`
- **手順**: (1) フロントのメイン UI（`#query`）が表示されるまで最大 20 秒待つ (2) MCP (3001) の `/edition` が応答するまで最大 20 秒ポーリング
- これにより「ウィンドウは開いたがフロントや MCP がまだ準備できていない」状態でアサートして失敗することを防ぐ。

## 実行

プロジェクトルートで:

```bash
# 依存のインストール（未実施なら）
npm install

# E2E 用にビルドしてからテスト実行（初回はビルドに時間がかかります）
npm run test:e2e
```

事前にビルドだけしたい場合:

```bash
npm run build:e2e
```

その後、バイナリのパスを環境変数で渡してテストのみ実行する例:

```bash
# Windows でルートに target がある場合の例
set TELOS_E2E_APP=D:\develop\TelosDB\target\debug\app.exe
npm run test:e2e
```

## スペック

- `tests/e2e/specs/app.spec.js` … ウィンドウタイトル、ヘッダー、検索 UI の表示と検索実行の確認。
- `tests/e2e/specs/docs-edit-drawing.spec.js` … 文書編集モーダル・ツールバーの描画確認。
- `tests/e2e/specs/screenshot-docs-modal.spec.js` … 編集モーダルのスクリーンショット取得（`npm run test:e2e:screenshot`）。
- `tests/e2e/specs/settings-autostart.spec.js` … 設定パネル「ログイン時自動起動」の表示・トグル・保存・永続化（計画 auto_start）。
- `tests/e2e/specs/settings-folder-monitor.spec.js` … 設定パネル「モニター先フォルダ」の表示・追加・保存・永続化・削除。挙動として「監視フォルダに .txt を追加すると取り込まれ検索でヒットする」を検証（計画 folder_monitor）。

## 検索の可否をログで確認する

バックエンドは検索実行時に次のログを出す（`RUST_LOG=info` で表示）。

- `[search] query="..." limit=N min_score=X` … 検索が開始された
- `[search] FTS hits=N` … FTS5 のヒット件数
- `[search] Pro vector hits=N` / `[search] Community LSA vector hits=N` … ベクトル検索のヒット件数（該当する方のみ）
- `[search] result_count=N ok=true|false` … 最終結果件数と成否

手動でアプリを起動して検索するときは、ターミナルの stderr に上記が出る。E2E でアプリを tauri-driver 経由で起動している場合は、アプリの stderr がそのまま見えないことがあるため、検索の可否は E2E の「検索がヒットする」spec の成否と、必要なら `TELOS_LOG_FILE=log.txt` などでログをファイルに出して確認する。

## 注意

- テスト実行中は TelosDB のウィンドウが開きます。操作は WebDriver が行うため、手で触らないでください。
- MCP サーバ（3001）がアプリ起動時に立ち上がるため、ポートが他プロセスで占有されていないことを確認してください。
