Initial upload: config-converter-cli v1.0.0
This commit is contained in:
116
tests/test_converters.py
Normal file
116
tests/test_converters.py
Normal file
@@ -0,0 +1,116 @@
|
||||
"""Tests for the converter module."""
|
||||
|
||||
import json
|
||||
import pytest
|
||||
|
||||
from configconverter.converters import Converter
|
||||
from configconverter.exceptions import ParseError, InvalidFormatError, UnsupportedConversionError
|
||||
|
||||
|
||||
class TestConverter:
|
||||
"""Tests for the Converter class."""
|
||||
|
||||
@pytest.fixture
|
||||
def converter(self):
|
||||
return Converter()
|
||||
|
||||
def test_detect_json_format(self, converter):
|
||||
content = '{"name": "test", "value": 123}'
|
||||
assert converter.detect_format(content) == "json"
|
||||
|
||||
def test_detect_json_array(self, converter):
|
||||
content = '[{"id": 1}, {"id": 2}]'
|
||||
assert converter.detect_format(content) == "json"
|
||||
|
||||
def test_detect_yaml_format(self, converter):
|
||||
content = 'name: test\nvalue: 123\n'
|
||||
assert converter.detect_format(content) == "yaml"
|
||||
|
||||
def test_detect_toml_format(self, converter):
|
||||
content = 'name = "test"\nvalue = 123\n'
|
||||
result = converter.detect_format(content)
|
||||
assert result in ("toml", "yaml")
|
||||
|
||||
def test_convert_json_to_yaml(self, converter):
|
||||
json_content = '{"name": "test", "value": 123}'
|
||||
result = converter.convert(json_content, "json", "yaml")
|
||||
assert "name: test" in result
|
||||
assert "value: 123" in result
|
||||
|
||||
def test_convert_json_to_toml(self, converter):
|
||||
json_content = '{"name": "test", "value": 123}'
|
||||
result = converter.convert(json_content, "json", "toml")
|
||||
assert 'name = "test"' in result
|
||||
assert "value = 123" in result
|
||||
|
||||
def test_convert_yaml_to_json(self, converter):
|
||||
yaml_content = 'name: test\nvalue: 123\n'
|
||||
result = converter.convert(yaml_content, "yaml", "json")
|
||||
data = json.loads(result)
|
||||
assert data["name"] == "test"
|
||||
assert data["value"] == 123
|
||||
|
||||
def test_convert_yaml_to_toml(self, converter):
|
||||
yaml_content = 'name: test\nvalue: 123\n'
|
||||
result = converter.convert(yaml_content, "yaml", "toml")
|
||||
assert 'name = "test"' in result
|
||||
|
||||
def test_convert_toml_to_json(self, converter):
|
||||
toml_content = 'name = "test"\nvalue = 123\n'
|
||||
result = converter.convert(toml_content, "toml", "json")
|
||||
data = json.loads(result)
|
||||
assert data["name"] == "test"
|
||||
assert data["value"] == 123
|
||||
|
||||
def test_convert_toml_to_yaml(self, converter):
|
||||
toml_content = 'name = "test"\nvalue = 123\n'
|
||||
result = converter.convert(toml_content, "toml", "yaml")
|
||||
assert "name: test" in result
|
||||
|
||||
def test_invalid_json_syntax(self, converter):
|
||||
content = '{"name": "test",}'
|
||||
with pytest.raises(ParseError):
|
||||
converter.convert(content, "json", "yaml")
|
||||
|
||||
def test_invalid_yaml_syntax(self, converter):
|
||||
content = "name: test\n value: 123\n"
|
||||
with pytest.raises(ParseError):
|
||||
converter.convert(content, "yaml", "json")
|
||||
|
||||
def test_invalid_toml_syntax(self, converter):
|
||||
content = 'name = "test"\nvalue = 123\ninvalid line here\n'
|
||||
with pytest.raises(ParseError):
|
||||
converter.convert(content, "toml", "json")
|
||||
|
||||
def test_unsupported_format(self, converter):
|
||||
content = "some random text that is not valid"
|
||||
try:
|
||||
converter.detect_format(content)
|
||||
except (InvalidFormatError, Exception):
|
||||
pass
|
||||
|
||||
def test_unsupported_conversion_direction(self, converter):
|
||||
content = '{"name": "test"}'
|
||||
with pytest.raises(UnsupportedConversionError):
|
||||
converter.convert(content, "json", "xml")
|
||||
|
||||
def test_nested_structure_json_to_yaml(self, converter):
|
||||
json_content = json.dumps({
|
||||
"server": {
|
||||
"host": "localhost",
|
||||
"port": 8080
|
||||
},
|
||||
"databases": [
|
||||
{"name": "db1", "enabled": True},
|
||||
{"name": "db2", "enabled": False}
|
||||
]
|
||||
})
|
||||
result = converter.convert(json_content, "json", "yaml")
|
||||
assert "server:" in result
|
||||
assert "host: localhost" in result
|
||||
assert "databases:" in result
|
||||
|
||||
def test_case_insensitive_format(self, converter):
|
||||
json_content = '{"name": "test"}'
|
||||
result = converter.convert(json_content, "JSON", "YAML")
|
||||
assert "name: test" in result
|
||||
Reference in New Issue
Block a user