118 lines
4.9 KiB
Python
Raw Normal View History

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