133 lines
4.9 KiB
Python
Raw Normal View History

2025-11-04 05:57:23 +01:00
from unittest.mock import patch
2025-11-04 08:09:12 +01:00
import pytest
2025-11-04 05:57:23 +01:00
from pr.__main__ import main
2025-11-04 08:09:12 +01:00
2025-11-04 05:57:23 +01:00
def test_main_version(capsys):
2025-11-04 08:09:12 +01:00
with patch("sys.argv", ["pr", "--version"]):
2025-11-04 05:57:23 +01:00
with pytest.raises(SystemExit):
main()
captured = capsys.readouterr()
2025-11-04 08:09:12 +01:00
assert "PR Assistant" in captured.out
2025-11-04 05:57:23 +01:00
def test_main_create_config_success(capsys):
2025-11-04 08:09:12 +01:00
with patch("pr.core.config_loader.create_default_config", return_value=True):
with patch("sys.argv", ["pr", "--create-config"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
2025-11-04 08:09:12 +01:00
assert "Configuration file created" in captured.out
2025-11-04 05:57:23 +01:00
def test_main_create_config_fail(capsys):
2025-11-04 08:09:12 +01:00
with patch("pr.core.config_loader.create_default_config", return_value=False):
with patch("sys.argv", ["pr", "--create-config"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
2025-11-04 08:09:12 +01:00
assert "Error creating configuration file" in captured.err
2025-11-04 05:57:23 +01:00
def test_main_list_sessions_no_sessions(capsys):
2025-11-04 08:09:12 +01:00
with patch("pr.core.session.SessionManager") as mock_sm:
2025-11-04 05:57:23 +01:00
mock_instance = mock_sm.return_value
mock_instance.list_sessions.return_value = []
2025-11-04 08:09:12 +01:00
with patch("sys.argv", ["pr", "--list-sessions"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
2025-11-04 08:09:12 +01:00
assert "No saved sessions found" in captured.out
2025-11-04 05:57:23 +01:00
def test_main_list_sessions_with_sessions(capsys):
2025-11-04 08:09:12 +01:00
sessions = [{"name": "test", "created_at": "2023-01-01", "message_count": 5}]
with patch("pr.core.session.SessionManager") as mock_sm:
2025-11-04 05:57:23 +01:00
mock_instance = mock_sm.return_value
mock_instance.list_sessions.return_value = sessions
2025-11-04 08:09:12 +01:00
with patch("sys.argv", ["pr", "--list-sessions"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
2025-11-04 08:09:12 +01:00
assert "Found 1 saved sessions" in captured.out
assert "test" in captured.out
2025-11-04 05:57:23 +01:00
def test_main_delete_session_success(capsys):
2025-11-04 08:09:12 +01:00
with patch("pr.core.session.SessionManager") as mock_sm:
2025-11-04 05:57:23 +01:00
mock_instance = mock_sm.return_value
mock_instance.delete_session.return_value = True
2025-11-04 08:09:12 +01:00
with patch("sys.argv", ["pr", "--delete-session", "test"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
assert "Session 'test' deleted" in captured.out
2025-11-04 08:09:12 +01:00
2025-11-04 05:57:23 +01:00
def test_main_delete_session_fail(capsys):
2025-11-04 08:09:12 +01:00
with patch("pr.core.session.SessionManager") as mock_sm:
2025-11-04 05:57:23 +01:00
mock_instance = mock_sm.return_value
mock_instance.delete_session.return_value = False
2025-11-04 08:09:12 +01:00
with patch("sys.argv", ["pr", "--delete-session", "test"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
assert "Error deleting session 'test'" in captured.err
2025-11-04 08:09:12 +01:00
2025-11-04 05:57:23 +01:00
def test_main_export_session_json(capsys):
2025-11-04 08:09:12 +01:00
with patch("pr.core.session.SessionManager") as mock_sm:
2025-11-04 05:57:23 +01:00
mock_instance = mock_sm.return_value
mock_instance.export_session.return_value = True
2025-11-04 08:09:12 +01:00
with patch("sys.argv", ["pr", "--export-session", "test", "output.json"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
2025-11-04 08:09:12 +01:00
assert "Session exported to output.json" in captured.out
2025-11-04 05:57:23 +01:00
def test_main_export_session_md(capsys):
2025-11-04 08:09:12 +01:00
with patch("pr.core.session.SessionManager") as mock_sm:
2025-11-04 05:57:23 +01:00
mock_instance = mock_sm.return_value
mock_instance.export_session.return_value = True
2025-11-04 08:09:12 +01:00
with patch("sys.argv", ["pr", "--export-session", "test", "output.md"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
2025-11-04 08:09:12 +01:00
assert "Session exported to output.md" in captured.out
2025-11-04 05:57:23 +01:00
def test_main_usage(capsys):
2025-11-04 08:09:12 +01:00
usage = {"total_requests": 10, "total_tokens": 1000, "total_cost": 0.01}
2025-11-04 08:10:37 +01:00
with patch("pr.core.usage_tracker.UsageTracker.get_total_usage", return_value=usage):
2025-11-04 08:09:12 +01:00
with patch("sys.argv", ["pr", "--usage"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
2025-11-04 08:09:12 +01:00
assert "Total Usage Statistics" in captured.out
assert "Requests: 10" in captured.out
2025-11-04 05:57:23 +01:00
def test_main_plugins_no_plugins(capsys):
2025-11-04 08:09:12 +01:00
with patch("pr.plugins.loader.PluginLoader") as mock_loader:
2025-11-04 05:57:23 +01:00
mock_instance = mock_loader.return_value
mock_instance.load_plugins.return_value = None
mock_instance.list_loaded_plugins.return_value = []
2025-11-04 08:09:12 +01:00
with patch("sys.argv", ["pr", "--plugins"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
2025-11-04 08:09:12 +01:00
assert "No plugins loaded" in captured.out
2025-11-04 05:57:23 +01:00
def test_main_plugins_with_plugins(capsys):
2025-11-04 08:09:12 +01:00
with patch("pr.plugins.loader.PluginLoader") as mock_loader:
2025-11-04 05:57:23 +01:00
mock_instance = mock_loader.return_value
mock_instance.load_plugins.return_value = None
2025-11-04 08:09:12 +01:00
mock_instance.list_loaded_plugins.return_value = ["plugin1", "plugin2"]
with patch("sys.argv", ["pr", "--plugins"]):
2025-11-04 05:57:23 +01:00
main()
captured = capsys.readouterr()
2025-11-04 08:09:12 +01:00
assert "Loaded 2 plugins" in captured.out
2025-11-04 05:57:23 +01:00
def test_main_run_assistant():
2025-11-04 08:09:12 +01:00
with patch("pr.__main__.Assistant") as mock_assistant:
2025-11-04 05:57:23 +01:00
mock_instance = mock_assistant.return_value
2025-11-04 08:09:12 +01:00
with patch("sys.argv", ["pr", "test message"]):
2025-11-04 05:57:23 +01:00
main()
mock_assistant.assert_called_once()
2025-11-04 08:09:12 +01:00
mock_instance.run.assert_called_once()