mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-07-16 07:19:57 +00:00
fix: suppress traceback in shell if no ipython installed
Old implementation was showing import error, new implementation instead hides it behind separated call and if-else check
This commit is contained in:
@ -1,14 +1,30 @@
|
||||
import pytest
|
||||
|
||||
from pytest_mock import MockerFixture
|
||||
|
||||
from ahriman.application.interactive_shell import InteractiveShell
|
||||
|
||||
|
||||
def test_has_ipython(mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must correctly check if IPython is installed
|
||||
"""
|
||||
find_spec_mock = mocker.patch("ahriman.application.interactive_shell.find_spec")
|
||||
assert InteractiveShell.has_ipython()
|
||||
find_spec_mock.assert_called_once_with("IPython.terminal.embed")
|
||||
|
||||
|
||||
def test_has_ipython_module_not_found(mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must return False if IPython is not installed
|
||||
"""
|
||||
mocker.patch("ahriman.application.interactive_shell.find_spec", side_effect=ModuleNotFoundError)
|
||||
assert not InteractiveShell.has_ipython()
|
||||
|
||||
|
||||
def test_interact(mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must call IPython shell
|
||||
"""
|
||||
mocker.patch("ahriman.application.interactive_shell.InteractiveShell.has_ipython", return_value=True)
|
||||
banner_mock = mocker.patch("IPython.terminal.embed.InteractiveShellEmbed.show_banner")
|
||||
interact_mock = mocker.patch("IPython.terminal.embed.InteractiveShellEmbed.interact")
|
||||
|
||||
@ -18,11 +34,11 @@ def test_interact(mocker: MockerFixture) -> None:
|
||||
interact_mock.assert_called_once_with()
|
||||
|
||||
|
||||
def test_interact_import_error(mocker: MockerFixture) -> None:
|
||||
def test_interact_no_ipython(mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must call builtin shell if no IPython available
|
||||
"""
|
||||
pytest.helpers.import_error("IPython.terminal.embed", ["InteractiveShellEmbed"], mocker)
|
||||
mocker.patch("ahriman.application.interactive_shell.InteractiveShell.has_ipython", return_value=None)
|
||||
interact_mock = mocker.patch("code.InteractiveConsole.interact")
|
||||
|
||||
shell = InteractiveShell()
|
||||
|
Reference in New Issue
Block a user