|
import json
|
|
from unittest.mock import patch
|
|
from rp.ui.output import OutputFormatter
|
|
|
|
|
|
class TestOutputFormatter:
|
|
def test_init(self):
|
|
formatter = OutputFormatter()
|
|
assert formatter.format_type == "text"
|
|
assert formatter.quiet is False
|
|
|
|
formatter = OutputFormatter("json", True)
|
|
assert formatter.format_type == "json"
|
|
assert formatter.quiet is True
|
|
|
|
@patch("builtins.print")
|
|
def test_output_text_quiet(self, mock_print):
|
|
formatter = OutputFormatter(quiet=True)
|
|
formatter.output("test", "response")
|
|
mock_print.assert_not_called()
|
|
|
|
@patch("builtins.print")
|
|
def test_output_text_error_quiet(self, mock_print):
|
|
formatter = OutputFormatter(quiet=True)
|
|
formatter.output("test", "error")
|
|
mock_print.assert_called()
|
|
|
|
@patch("builtins.print")
|
|
def test_output_text_result_quiet(self, mock_print):
|
|
formatter = OutputFormatter(quiet=True)
|
|
formatter.output("test", "result")
|
|
mock_print.assert_called()
|
|
|
|
@patch("builtins.print")
|
|
def test_output_json(self, mock_print):
|
|
formatter = OutputFormatter("json")
|
|
formatter.output("test data", "response")
|
|
args = mock_print.call_args[0][0]
|
|
data = json.loads(args)
|
|
assert data["type"] == "response"
|
|
assert data["data"] == "test data"
|
|
assert "timestamp" in data
|
|
|
|
@patch("builtins.print")
|
|
def test_output_structured_dict(self, mock_print):
|
|
formatter = OutputFormatter("structured")
|
|
formatter.output({"key": "value", "key2": "value2"}, "response")
|
|
assert mock_print.call_count == 2
|
|
calls = [call[0][0] for call in mock_print.call_args_list]
|
|
assert "key: value" in calls
|
|
assert "key2: value2" in calls
|
|
|
|
@patch("builtins.print")
|
|
def test_output_structured_list(self, mock_print):
|
|
formatter = OutputFormatter("structured")
|
|
formatter.output(["item1", "item2"], "response")
|
|
assert mock_print.call_count == 2
|
|
calls = [call[0][0] for call in mock_print.call_args_list]
|
|
assert "- item1" in calls
|
|
assert "- item2" in calls
|
|
|
|
@patch("builtins.print")
|
|
def test_output_structured_other(self, mock_print):
|
|
formatter = OutputFormatter("structured")
|
|
formatter.output("plain text", "response")
|
|
mock_print.assert_called_once_with("plain text")
|
|
|
|
@patch("builtins.print")
|
|
def test_output_text_dict(self, mock_print):
|
|
formatter = OutputFormatter("text")
|
|
formatter.output({"key": "value"}, "response")
|
|
args = mock_print.call_args[0][0]
|
|
data = json.loads(args)
|
|
assert data == {"key": "value"}
|
|
|
|
@patch("builtins.print")
|
|
def test_output_text_list(self, mock_print):
|
|
formatter = OutputFormatter("text")
|
|
formatter.output(["item1"], "response")
|
|
args = mock_print.call_args[0][0]
|
|
data = json.loads(args)
|
|
assert data == ["item1"]
|
|
|
|
@patch("builtins.print")
|
|
def test_output_text_other(self, mock_print):
|
|
formatter = OutputFormatter("text")
|
|
formatter.output("plain text", "response")
|
|
mock_print.assert_called_once_with("plain text")
|
|
|
|
@patch("builtins.print")
|
|
def test_error_json(self, mock_print):
|
|
formatter = OutputFormatter("json")
|
|
formatter.error("test error")
|
|
args = mock_print.call_args[0][0]
|
|
data = json.loads(args)
|
|
assert data["type"] == "error"
|
|
assert data["data"]["error"] == "test error"
|
|
|
|
@patch("sys.stderr")
|
|
def test_error_text(self, mock_stderr):
|
|
formatter = OutputFormatter("text")
|
|
formatter.error("test error")
|
|
mock_stderr.write.assert_called()
|
|
calls = mock_stderr.write.call_args_list
|
|
assert any("Error: test error" in call[0][0] for call in calls)
|
|
|
|
@patch("builtins.print")
|
|
def test_success_json(self, mock_print):
|
|
formatter = OutputFormatter("json")
|
|
formatter.success("test success")
|
|
args = mock_print.call_args[0][0]
|
|
data = json.loads(args)
|
|
assert data["type"] == "success"
|
|
assert data["data"]["success"] == "test success"
|
|
|
|
@patch("builtins.print")
|
|
def test_success_text(self, mock_print):
|
|
formatter = OutputFormatter("text")
|
|
formatter.success("test success")
|
|
mock_print.assert_called_once_with("test success")
|
|
|
|
@patch("builtins.print")
|
|
def test_success_quiet(self, mock_print):
|
|
formatter = OutputFormatter("text", quiet=True)
|
|
formatter.success("test success")
|
|
mock_print.assert_not_called()
|
|
|
|
@patch("builtins.print")
|
|
def test_info_json(self, mock_print):
|
|
formatter = OutputFormatter("json")
|
|
formatter.info("test info")
|
|
args = mock_print.call_args[0][0]
|
|
data = json.loads(args)
|
|
assert data["type"] == "info"
|
|
assert data["data"]["info"] == "test info"
|
|
|
|
@patch("builtins.print")
|
|
def test_info_text(self, mock_print):
|
|
formatter = OutputFormatter("text")
|
|
formatter.info("test info")
|
|
mock_print.assert_called_once_with("test info")
|
|
|
|
@patch("builtins.print")
|
|
def test_info_quiet(self, mock_print):
|
|
formatter = OutputFormatter("text", quiet=True)
|
|
formatter.info("test info")
|
|
mock_print.assert_not_called()
|
|
|
|
@patch("builtins.print")
|
|
def test_result(self, mock_print):
|
|
formatter = OutputFormatter("text")
|
|
formatter.result("test result")
|
|
mock_print.assert_called_once_with("test result")
|