From a4a2826a37b30feea30c9f4c04f0981e2e17b03b Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sun, 1 Feb 2026 22:26:10 +0000 Subject: [PATCH] Initial upload: config-converter-cli v1.0.0 --- tests/test_cli.py | 141 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 tests/test_cli.py diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 0000000..b8c7066 --- /dev/null +++ b/tests/test_cli.py @@ -0,0 +1,141 @@ +"""Tests for the CLI interface.""" + +import json +import pytest +from click.testing import CliRunner + +from configconverter.cli import main + + +class TestCLI: + """Tests for the CLI interface.""" + + @pytest.fixture + def runner(self): + return CliRunner() + + def test_help_command(self, runner): + result = runner.invoke(main, ["--help"]) + assert result.exit_code == 0 + assert "convert" in result.output + assert "validate" in result.output + assert "query" in result.output + assert "batch" in result.output + + def test_convert_command_help(self, runner): + result = runner.invoke(main, ["convert", "--help"]) + assert result.exit_code == 0 + assert "--from" in result.output + assert "--to" in result.output + assert "--indent" in result.output + + def test_validate_command_help(self, runner): + result = runner.invoke(main, ["validate", "--help"]) + assert result.exit_code == 0 + assert "--format" in result.output + assert "--quiet" in result.output + + def test_query_command_help(self, runner): + result = runner.invoke(main, ["query", "--help"]) + assert result.exit_code == 0 + assert "--format" in result.output + assert "--output" in result.output + + def test_convert_json_to_yaml(self, runner): + input_data = '{"name": "test", "value": 123}' + result = runner.invoke(main, ["convert", "--to", "yaml"], input=input_data) + assert result.exit_code == 0 + assert "name: test" in result.output + assert "value: 123" in result.output + + def test_convert_json_to_toml(self, runner): + input_data = '{"name": "test", "value": 123}' + result = runner.invoke(main, ["convert", "--to", "toml"], input=input_data) + assert result.exit_code == 0 + assert 'name = "test"' in result.output + assert "value = 123" in result.output + + def test_convert_yaml_to_json(self, runner): + input_data = "name: test\nvalue: 123\n" + result = runner.invoke(main, ["convert", "--from", "yaml", "--to", "json"], input=input_data) + assert result.exit_code == 0 + assert "name" in result.output + assert "test" in result.output + + def test_convert_toml_to_yaml(self, runner): + input_data = 'name = "test"\nvalue = 123\n' + result = runner.invoke(main, ["convert", "--from", "toml", "--to", "yaml"], input=input_data) + assert result.exit_code == 0 + assert "name: test" in result.output + + def test_validate_valid_json(self, runner): + input_data = '{"name": "test"}' + result = runner.invoke(main, ["validate"], input=input_data) + assert result.exit_code == 0 + assert "Valid" in result.output + + def test_validate_invalid_json(self, runner): + input_data = '{"name": "test",}' # trailing comma - invalid JSON + result = runner.invoke(main, ["validate", "--format", "json"], input=input_data) + assert result.exit_code != 0 + + def test_validate_quiet_mode(self, runner): + input_data = '{"name": "test"}' + result = runner.invoke(main, ["validate", "--quiet"], input=input_data) + assert result.exit_code == 0 + assert result.output.strip() == "" + + def test_query_simple_key(self, runner): + input_data = '{"name": "test", "value": 123}' + result = runner.invoke(main, ["query", "name", "-"], input=input_data) + assert result.exit_code == 0 + assert '"test"' in result.output + + def test_query_nested_key(self, runner): + input_data = '{"server": {"host": "localhost"}}' + result = runner.invoke(main, ["query", "server.host", "-"], input=input_data) + assert result.exit_code == 0 + assert "localhost" in result.output + + def test_query_invalid_expression(self, runner): + input_data = '{"name": "test"}' + result = runner.invoke(main, ["query", "invalid``", "-"], input=input_data) + assert result.exit_code != 0 + assert "Query Error" in result.output + + def test_format_command(self, runner): + input_data = '{"name":"test"}' + result = runner.invoke(main, ["format", "--indent", "4"], input=input_data) + assert result.exit_code == 0 + + def test_format_to_json(self, runner): + input_data = 'name: test\n' + result = runner.invoke(main, ["format", "--to", "json"], input=input_data) + assert result.exit_code == 0 + assert "name" in result.output + + def test_version_option(self, runner): + result = runner.invoke(main, ["--version"]) + assert result.exit_code == 0 + assert "1.0.0" in result.output + + def test_convert_with_custom_indent(self, runner): + input_data = '{"name": "test", "nested": {"a": 1}}' + result = runner.invoke(main, ["convert", "--to", "json", "--indent", "4"], input=input_data) + assert result.exit_code == 0 + assert " " in result.output + + def test_invalid_indent_option(self, runner): + input_data = '{"name": "test"}' + result = runner.invoke(main, ["convert", "--to", "json", "--indent", "3"], input=input_data) + assert result.exit_code != 0 + + def test_convert_empty_input(self, runner): + result = runner.invoke(main, ["convert", "--to", "json"], input="") + assert result.exit_code == 0 + assert result.output.strip() == "" + + def test_validate_empty_input(self, runner): + result = runner.invoke(main, ["validate"], input="") + assert result.exit_code == 0 + assert "Valid" in result.output