Initial upload: config-converter-cli v1.0.0
This commit is contained in:
141
tests/test_cli.py
Normal file
141
tests/test_cli.py
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user