vibe/tests/cli/test_external_editor.py
Mathias Gesbert d33db9fff8 2.0.0
Co-Authored-By: Quentin Torroba <quentin.torroba@mistral.ai>
Co-Authored-By: Michel Thomazo <michel.thomazo@mistral.ai>
Co-Authored-By: Clément Drouin <clement.drouin@mistral.ai>
Co-Authored-By: Vincent Guilloux <vincent.guilloux@mistral.ai>
Co-Authored-By: Clément Siriex <clement.sirieix@mistral.ai>
Co-Authored-By: Kim-Adeline Miguel <kimadeline.miguel@mistral.ai>
Co-Authored-By: Thaddee Tyl <thaddee.tyl@gmail.com>
Co-Authored-By: David Brochart <david.brochart@gmail.com>
Co-Authored-By: Joseph Guhlin <joseph.guhlin@gmail.com>
Co-Authored-By: Thomas Kenbeek <thomaskenbeek@gmail.com>
Co-Authored-By: Remenby31 <baptiste.cruvellier31@gmail.com>
2026-01-27 16:44:55 +01:00

72 lines
3.2 KiB
Python

"""Tests for the external editor module."""
from __future__ import annotations
from unittest.mock import patch
from vibe.cli.textual_ui.external_editor import ExternalEditor
class TestGetEditor:
def test_returns_visual_first(self) -> None:
with patch.dict("os.environ", {"VISUAL": "vim", "EDITOR": "nvim"}, clear=True):
assert ExternalEditor.get_editor() == "vim"
def test_falls_back_to_editor(self) -> None:
with patch.dict("os.environ", {"EDITOR": "nvim"}, clear=True):
assert ExternalEditor.get_editor() == "nvim"
def test_falls_back_when_no_editor(self) -> None:
with patch.dict("os.environ", {}, clear=True):
assert ExternalEditor.get_editor() == "nano"
class TestEdit:
def test_returns_modified_content(self) -> None:
with patch.dict("os.environ", {"VISUAL": "vim"}, clear=True):
with patch("subprocess.run") as mock_run:
with patch("pathlib.Path.read_text", return_value="modified"):
with patch("pathlib.Path.unlink"):
editor = ExternalEditor()
result = editor.edit("original")
assert result == "modified"
mock_run.assert_called_once()
def test_returns_none_when_content_unchanged(self) -> None:
with patch.dict("os.environ", {"VISUAL": "vim"}, clear=True):
with patch("subprocess.run"):
with patch("pathlib.Path.read_text", return_value="same"):
with patch("pathlib.Path.unlink"):
editor = ExternalEditor()
result = editor.edit("same")
assert result is None
def test_strips_trailing_whitespace(self) -> None:
with patch.dict("os.environ", {"VISUAL": "vim"}, clear=True):
with patch("subprocess.run"):
with patch("pathlib.Path.read_text", return_value="content\n\n"):
with patch("pathlib.Path.unlink"):
editor = ExternalEditor()
result = editor.edit("original")
assert result == "content"
def test_handles_editor_with_args(self) -> None:
with patch.dict("os.environ", {"VISUAL": "code --wait"}, clear=True):
with patch("subprocess.run") as mock_run:
with patch("pathlib.Path.read_text", return_value="edited"):
with patch("pathlib.Path.unlink"):
editor = ExternalEditor()
editor.edit("original")
call_args = mock_run.call_args[0][0]
assert call_args[0] == "code"
assert call_args[1] == "--wait"
def test_returns_none_on_subprocess_error(self) -> None:
import subprocess as sp
with patch.dict("os.environ", {"VISUAL": "vim"}, clear=True):
with patch("subprocess.run", side_effect=sp.CalledProcessError(1, "vim")):
with patch("pathlib.Path.unlink"):
editor = ExternalEditor()
result = editor.edit("test")
assert result is None