release: 0.3.0 persistent history, configurable openers, and dev info panel
This commit is contained in:
@@ -7,6 +7,7 @@ import pytest
|
||||
|
||||
from app.opener import (
|
||||
OpenWithOption,
|
||||
_reset_openers_config_cache,
|
||||
available_openers,
|
||||
is_blocking_option,
|
||||
launch_background_option,
|
||||
@@ -14,6 +15,11 @@ from app.opener import (
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def reset_openers_config_cache() -> None:
|
||||
_reset_openers_config_cache()
|
||||
|
||||
|
||||
def test_available_openers_headless_file_excludes_gui(
|
||||
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
||||
) -> None:
|
||||
@@ -65,6 +71,107 @@ def test_available_openers_gui_directory_filters_file_only_tools(
|
||||
assert labels == ["VS Code", "Antigravity", "Neovim"]
|
||||
|
||||
|
||||
def test_available_openers_respects_configured_order(
|
||||
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
||||
) -> None:
|
||||
config_path = tmp_path / "config.toml"
|
||||
config_path.write_text(
|
||||
('[open_with]\nfiles = ["nvim", "code"]\ndirectories = ["opencode", "code"]\n'),
|
||||
encoding="utf-8",
|
||||
)
|
||||
monkeypatch.setenv("CD_BROWSER_CONFIG_FILE", str(config_path))
|
||||
monkeypatch.delenv("SSH_CONNECTION", raising=False)
|
||||
monkeypatch.setattr("app.opener.sys.platform", "darwin")
|
||||
|
||||
available = {
|
||||
"opencode": "/usr/local/bin/opencode",
|
||||
"nvim": "/usr/local/bin/nvim",
|
||||
"code": "/usr/local/bin/code",
|
||||
}
|
||||
monkeypatch.setattr("app.opener.shutil.which", lambda name: available.get(name))
|
||||
|
||||
folder = tmp_path / "project"
|
||||
folder.mkdir()
|
||||
file_path = tmp_path / "notes.txt"
|
||||
file_path.write_text("hello", encoding="utf-8")
|
||||
|
||||
folder_labels = [option.label for option in available_openers(folder)]
|
||||
file_labels = [option.label for option in available_openers(file_path)]
|
||||
|
||||
assert folder_labels == ["OpenCode", "VS Code"]
|
||||
assert file_labels == ["Neovim", "VS Code"]
|
||||
|
||||
|
||||
def test_available_openers_invalid_config_falls_back_to_defaults(
|
||||
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
||||
) -> None:
|
||||
config_path = tmp_path / "config.toml"
|
||||
config_path.write_text("[open_with\n", encoding="utf-8")
|
||||
monkeypatch.setenv("CD_BROWSER_CONFIG_FILE", str(config_path))
|
||||
monkeypatch.setenv("SSH_CONNECTION", "1")
|
||||
|
||||
available = {
|
||||
"antigravity": "/usr/local/bin/antigravity",
|
||||
"nvim": "/usr/local/bin/nvim",
|
||||
"nano": "/usr/bin/nano",
|
||||
"less": "/usr/bin/less",
|
||||
"bat": "/usr/local/bin/bat",
|
||||
}
|
||||
monkeypatch.setattr("app.opener.shutil.which", lambda name: available.get(name))
|
||||
|
||||
file_path = tmp_path / "notes.txt"
|
||||
file_path.write_text("hello", encoding="utf-8")
|
||||
labels = [option.label for option in available_openers(file_path)]
|
||||
|
||||
assert labels == ["Antigravity", "Neovim", "Nano", "Less", "Bat"]
|
||||
|
||||
|
||||
def test_available_openers_creates_default_config_when_missing(
|
||||
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
||||
) -> None:
|
||||
config_path = tmp_path / "config.toml"
|
||||
monkeypatch.setenv("CD_BROWSER_CONFIG_FILE", str(config_path))
|
||||
monkeypatch.setenv("SSH_CONNECTION", "1")
|
||||
monkeypatch.setattr(
|
||||
"app.opener.shutil.which",
|
||||
lambda name: (
|
||||
"/usr/bin/true" if name in {"nvim", "nano", "less", "bat"} else None
|
||||
),
|
||||
)
|
||||
|
||||
file_path = tmp_path / "notes.txt"
|
||||
file_path.write_text("hello", encoding="utf-8")
|
||||
available_openers(file_path)
|
||||
|
||||
assert config_path.exists()
|
||||
config_text = config_path.read_text(encoding="utf-8")
|
||||
assert "[open_with]" in config_text
|
||||
assert (
|
||||
'files = ["code", "open", "antigravity", "nvim", "nano", "less", "bat"]'
|
||||
in config_text
|
||||
)
|
||||
|
||||
|
||||
def test_available_openers_does_not_override_existing_config(
|
||||
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
||||
) -> None:
|
||||
config_path = tmp_path / "config.toml"
|
||||
original = '[open_with]\nfiles = ["nvim"]\ndirectories = ["opencode"]\n'
|
||||
config_path.write_text(original, encoding="utf-8")
|
||||
monkeypatch.setenv("CD_BROWSER_CONFIG_FILE", str(config_path))
|
||||
monkeypatch.setenv("SSH_CONNECTION", "1")
|
||||
monkeypatch.setattr(
|
||||
"app.opener.shutil.which",
|
||||
lambda name: "/usr/bin/true" if name in {"nvim", "opencode"} else None,
|
||||
)
|
||||
|
||||
file_path = tmp_path / "notes.txt"
|
||||
file_path.write_text("hello", encoding="utf-8")
|
||||
available_openers(file_path)
|
||||
|
||||
assert config_path.read_text(encoding="utf-8") == original
|
||||
|
||||
|
||||
def test_launch_background_option_returns_success(
|
||||
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
||||
) -> None:
|
||||
|
||||
Reference in New Issue
Block a user