Initial upload: config-converter-cli v1.0.0
This commit is contained in:
128
tests/test_validators.py
Normal file
128
tests/test_validators.py
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
"""Tests for the validator module."""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from configconverter.validators import Validator
|
||||||
|
from configconverter.exceptions import ParseError
|
||||||
|
|
||||||
|
|
||||||
|
class TestValidator:
|
||||||
|
"""Tests for the Validator class."""
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def validator(self):
|
||||||
|
return Validator()
|
||||||
|
|
||||||
|
def test_valid_json(self, validator):
|
||||||
|
content = '{"name": "test", "value": 123}'
|
||||||
|
is_valid, error = validator.validate(content, "json")
|
||||||
|
assert is_valid is True
|
||||||
|
assert error is None
|
||||||
|
|
||||||
|
def test_valid_yaml(self, validator):
|
||||||
|
content = 'name: test\nvalue: 123\n'
|
||||||
|
is_valid, error = validator.validate(content, "yaml")
|
||||||
|
assert is_valid is True
|
||||||
|
assert error is None
|
||||||
|
|
||||||
|
def test_valid_toml(self, validator):
|
||||||
|
content = 'name = "test"\nvalue = 123\n'
|
||||||
|
is_valid, error = validator.validate(content, "toml")
|
||||||
|
assert is_valid is True
|
||||||
|
assert error is None
|
||||||
|
|
||||||
|
def test_invalid_json(self, validator):
|
||||||
|
content = '{"name": "test",}'
|
||||||
|
is_valid, error = validator.validate(content, "json")
|
||||||
|
assert is_valid is False
|
||||||
|
assert error is not None
|
||||||
|
assert isinstance(error, ParseError)
|
||||||
|
|
||||||
|
def test_invalid_yaml(self, validator):
|
||||||
|
content = "name: test\n bad_indent: value\n"
|
||||||
|
is_valid, error = validator.validate(content, "yaml")
|
||||||
|
assert is_valid is False
|
||||||
|
assert error is not None
|
||||||
|
|
||||||
|
def test_invalid_toml(self, validator):
|
||||||
|
content = 'name = "test"\nvalue = 123\ninvalid line with spaces at start\n'
|
||||||
|
is_valid, error = validator.validate(content, "toml")
|
||||||
|
assert is_valid is False
|
||||||
|
assert error is not None
|
||||||
|
|
||||||
|
def test_auto_detect_json(self, validator):
|
||||||
|
content = '{"name": "test"}'
|
||||||
|
is_valid, error = validator.validate(content)
|
||||||
|
assert is_valid is True
|
||||||
|
|
||||||
|
def test_auto_detect_yaml(self, validator):
|
||||||
|
content = 'name: test\n'
|
||||||
|
is_valid, error = validator.validate(content)
|
||||||
|
assert is_valid is True
|
||||||
|
|
||||||
|
def test_auto_detect_toml(self, validator):
|
||||||
|
content = 'name = "test"\n'
|
||||||
|
is_valid, error = validator.validate(content)
|
||||||
|
assert is_valid is True
|
||||||
|
|
||||||
|
def test_empty_content(self, validator):
|
||||||
|
content = ""
|
||||||
|
try:
|
||||||
|
is_valid, error = validator.validate(content)
|
||||||
|
assert is_valid is True
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_whitespace_content(self, validator):
|
||||||
|
content = " \n\t\n "
|
||||||
|
try:
|
||||||
|
is_valid, error = validator.validate(content)
|
||||||
|
assert is_valid is True
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_validate_file(self, validator, tmp_path):
|
||||||
|
file_path = tmp_path / "test.json"
|
||||||
|
file_path.write_text('{"name": "test"}')
|
||||||
|
|
||||||
|
is_valid, error = validator.validate_file(str(file_path), "json")
|
||||||
|
assert is_valid is True
|
||||||
|
|
||||||
|
def test_validate_file_not_found(self, validator):
|
||||||
|
is_valid, error = validator.validate_file("/nonexistent/path.json", "json")
|
||||||
|
assert is_valid is False
|
||||||
|
assert error is not None
|
||||||
|
|
||||||
|
def test_complex_json_structure(self, validator):
|
||||||
|
content = '''
|
||||||
|
{
|
||||||
|
"server": {
|
||||||
|
"host": "localhost",
|
||||||
|
"port": 8080,
|
||||||
|
"ssl": {
|
||||||
|
"enabled": true,
|
||||||
|
"cert": "/path/to/cert"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"databases": [
|
||||||
|
{"name": "primary", "replica": false},
|
||||||
|
{"name": "replica", "replica": true}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
is_valid, error = validator.validate(content, "json")
|
||||||
|
assert is_valid is True
|
||||||
|
|
||||||
|
def test_nested_yaml_structure(self, validator):
|
||||||
|
content = '''
|
||||||
|
services:
|
||||||
|
- name: web
|
||||||
|
ports:
|
||||||
|
- 80
|
||||||
|
- 443
|
||||||
|
- name: api
|
||||||
|
ports:
|
||||||
|
- 8080
|
||||||
|
'''
|
||||||
|
is_valid, error = validator.validate(content, "yaml")
|
||||||
|
assert is_valid is True
|
||||||
Reference in New Issue
Block a user